Bird
Raised Fist0
Rest APIprogramming~10 mins

Composite operations (multi-resource) in Rest API - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to send a POST request to create a new user.

Rest API
response = requests.[1]('https://api.example.com/users', json=user_data)
Drag options to blanks, or click blank then click option'
Aget
Bpost
Cdelete
Dput
Attempts:
3 left
💡 Hint
Common Mistakes
Using GET instead of POST to create a resource.
Using DELETE or PUT incorrectly for creation.
2fill in blank
medium

Complete the code to check if the response status code indicates success.

Rest API
if response.status_code == [1]:
    print('Success')
Drag options to blanks, or click blank then click option'
A200
B301
C500
D404
Attempts:
3 left
💡 Hint
Common Mistakes
Checking for 404 instead of 200.
Confusing redirect codes like 301 with success.
3fill in blank
hard

Fix the error in the code to update a user's email using PUT method.

Rest API
response = requests.[1]('https://api.example.com/users/123', json={'email': new_email})
Drag options to blanks, or click blank then click option'
Adelete
Bget
Cpost
Dput
Attempts:
3 left
💡 Hint
Common Mistakes
Using GET or POST instead of PUT for updating.
Using DELETE which removes the resource.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that maps user IDs to their names for users with active status.

Rest API
active_users = {user['id']: user[1] for user in users if user['status'] [2] 'active'}
Drag options to blanks, or click blank then click option'
A['name']
B['email']
C==
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using ['email'] instead of ['name'] for values.
Using '!=' instead of '==' in the condition.
5fill in blank
hard

Fill all three blanks to filter and map user data: keys are uppercase user names, values are emails for users older than 30.

Rest API
filtered_users = [1]({ [2]['name'].upper(): [3] for [2] in users if [2]['age'] > 30 })
Drag options to blanks, or click blank then click option'
Adict
Buser
Cuser['email']
Dusers
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'users' instead of 'user' as loop variable.
Not calling dict() around the comprehension.

Practice

(1/5)
1. What is the main benefit of using composite operations in REST APIs?
easy
A. They combine multiple API calls into a single request to save time and keep data consistent.
B. They allow you to write SQL queries inside REST endpoints.
C. They automatically generate API documentation.
D. They encrypt all API responses for security.

Solution

  1. Step 1: Understand what composite operations do

    Composite operations bundle several API calls into one request to reduce network overhead.
  2. Step 2: Identify the main benefit

    This bundling saves time and ensures related data changes happen together, keeping consistency.
  3. Final Answer:

    They combine multiple API calls into a single request to save time and keep data consistent. -> Option A
  4. Quick Check:

    Composite operations = combine calls + consistency [OK]
Hint: Composite means combining multiple calls into one [OK]
Common Mistakes:
  • Confusing composite operations with documentation tools
  • Thinking composite operations encrypt data
  • Assuming composite operations run SQL queries
2. Which of the following is the correct way to structure a composite operation request in JSON?
easy
A. [{"method": "DELETE", "path": "/items/1"}]
B. {"operation": "GET", "url": "/users"}
C. {"requests": {"method": "POST", "endpoint": "/orders"}}
D. {"operations": [{"method": "POST", "path": "/users"}, {"method": "PUT", "path": "/accounts/123"}]}

Solution

  1. Step 1: Identify the correct JSON structure for composite operations

    Composite operations usually use an "operations" array with each operation having "method" and "path" keys.
  2. Step 2: Compare options

    {"operations": [{"method": "POST", "path": "/users"}, {"method": "PUT", "path": "/accounts/123"}]} matches this structure exactly, while others use incorrect keys or formats.
  3. Final Answer:

    {"operations": [{"method": "POST", "path": "/users"}, {"method": "PUT", "path": "/accounts/123"}]} -> Option D
  4. Quick Check:

    Composite request = "operations" array with method and path [OK]
Hint: Look for "operations" array with method and path keys [OK]
Common Mistakes:
  • Using singular "operation" instead of plural "operations"
  • Using wrong keys like "url" or "endpoint"
  • Not wrapping operations inside an array
3. Given this composite operation request:
{
  "operations": [
    {"method": "POST", "path": "/users", "body": {"name": "Alice"}},
    {"method": "POST", "path": "/orders", "body": {"userId": "${1.id}", "item": "Book"}}
  ]
}
What is the expected behavior?
medium
A. Create a user named Alice, then create an order linked to that user using the new user ID.
B. Create an order first, then create a user named Alice.
C. Create a user named Alice only; the order creation will fail due to syntax error.
D. The request will fail because referencing previous operation results is not allowed.

Solution

  1. Step 1: Understand operation order and referencing

    The first operation creates a user named Alice. The second operation uses "${1.id}" to reference the ID from the first operation's result.
  2. Step 2: Determine expected behavior

    This means the order is created linked to the new user. This chaining is a key feature of composite operations.
  3. Final Answer:

    Create a user named Alice, then create an order linked to that user using the new user ID. -> Option A
  4. Quick Check:

    Reference previous result with ${1.id} = chained operations [OK]
Hint: Look for ${1.id} to see chaining between operations [OK]
Common Mistakes:
  • Assuming operations run in parallel without order
  • Thinking referencing previous results is invalid
  • Confusing operation indexes starting at 0 instead of 1
4. You have this composite operation request:
{
  "operations": [
    {"method": "POST", "path": "/products", "body": {"name": "Pen"}},
    {"method": "PUT", "path": "/inventory/${1.id}", "body": {"stock": 100}}
  ]
}
But the API returns an error saying "Invalid reference ${1.id}". What is the likely cause?
medium
A. The syntax for referencing previous results should be ${0.id}, not ${1.id}.
B. The first operation did not return an ID, so ${1.id} is invalid.
C. PUT method cannot be used in composite operations.
D. The inventory path should not include dynamic IDs.

Solution

  1. Step 1: Check the reference usage

    The error "Invalid reference ${1.id}" means the first operation's response does not contain an "id" field.
  2. Step 2: Understand why this causes error

    If the first operation's response lacks "id", the reference ${1.id} is invalid and causes failure.
  3. Final Answer:

    The first operation did not return an ID, so ${1.id} is invalid. -> Option B
  4. Quick Check:

    Reference error = missing id in first operation response [OK]
Hint: Check if referenced operation returns the expected field [OK]
Common Mistakes:
  • Assuming index starts at 0 instead of 1
  • Thinking PUT is disallowed in composite operations
  • Ignoring that referenced fields must exist in response
5. You want to create a composite operation that creates a customer, then creates two orders for that customer, and finally updates the customer's status to "active". Which JSON structure correctly represents this multi-resource composite operation?
hard
A. { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "1", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "1", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/1", "body": {"status": "active"}} ] }
B. { "operations": [ {"method": "POST", "path": "/orders", "body": {"item": "Laptop"}}, {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "PUT", "path": "/customers/1", "body": {"status": "active"}} ] }
C. { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/${1.id}", "body": {"status": "active"}} ] }
D. { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${2.id}", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${2.id}", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/${2.id}", "body": {"status": "active"}} ] }

Solution

  1. Step 1: Identify correct operation order and referencing

    The customer creation is first (operation 1), so its ID is referenced as ${1.id} in subsequent operations.
  2. Step 2: Verify all references use ${1.id} and order is logical

    Orders and update use ${1.id} correctly. { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/${1.id}", "body": {"status": "active"}} ] } matches this perfectly. { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${2.id}", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${2.id}", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/${2.id}", "body": {"status": "active"}} ] } incorrectly uses ${2.id} which refers to the first order, not the customer.
  3. Final Answer:

    { "operations": [ {"method": "POST", "path": "/customers", "body": {"name": "Bob"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Laptop"}}, {"method": "POST", "path": "/orders", "body": {"customerId": "${1.id}", "item": "Mouse"}}, {"method": "PUT", "path": "/customers/${1.id}", "body": {"status": "active"}} ] } -> Option C
  4. Quick Check:

    Use ${1.id} to reference first operation's customer ID [OK]
Hint: Reference first created resource as ${1.id} in later operations [OK]
Common Mistakes:
  • Referencing wrong operation index for customer ID
  • Hardcoding IDs instead of referencing dynamically
  • Incorrect operation order breaking dependencies
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard