Bird
Raised Fist0
Rest APIprogramming~3 mins

Why Composite operations (multi-resource) in Rest API? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if you could update many things at once with just one simple API call?

The Scenario

Imagine you need to update a user's profile and their related settings by calling separate API endpoints one by one.

You have to send multiple requests manually, waiting for each to finish before starting the next.

The Problem

This manual approach is slow because each request waits for the previous one.

It's also error-prone: if one request fails, you might end up with inconsistent data.

Handling all these steps manually makes your code complex and hard to maintain.

The Solution

Composite operations let you bundle multiple API calls into a single request.

This means you can update the user profile and settings together, atomically.

The server handles all steps, ensuring consistency and faster execution.

Before vs After
✗ Before
PATCH /user/123
PATCH /user/123/settings
✓ After
POST /composite
{
  "operations": [
    {"method": "PATCH", "path": "/user/123", "body": {...}},
    {"method": "PATCH", "path": "/user/123/settings", "body": {...}}
  ]
}
What It Enables

Composite operations enable you to perform multiple related changes in one go, making your app faster and more reliable.

Real Life Example

When a user updates their profile and notification preferences, a composite operation updates both at once, avoiding partial updates that confuse the user.

Key Takeaways

Manual multiple API calls are slow and risky.

Composite operations bundle calls into one request.

This improves speed, consistency, and code simplicity.

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