Implementing Batch Operations

1. Creating Multiple Resources

Example: Batch Create

POST /users/batch
Content-Type: application/json

{
  "items": [
    {"name": "Alice", "email": "alice@x.com"},
    {"name": "Bob",   "email": "bob@x.com"}
  ]
}

2. Updating Multiple Resources

PatternExample
Bulk PATCHPATCH /users/batch with id+changes per item
Filter-based updatePOST /users/bulk-update?status=inactive

3. Deleting Multiple Resources

PatternExample
POST with IDsPOST /users/batch-delete body: {"ids":[1,2,3]}
DELETE with bodyDELETE /users body: {"ids":[...]} (some proxies strip)
Query filterDELETE /users?status=spam (dangerous; require confirmation)

4. Using Batch Endpoints

ConventionURI
Sub-action on collectionPOST /users/batch
Heterogeneous batchPOST /batch with method+url+body per op
HTTP multipartEach part is one HTTP request (Google APIs style)

5. Implementing Partial Success Handling

StatusWhen
200 OKAll succeed; per-item results in body
207 Multi-StatusMixed success/failure (WebDAV)
422If atomic batch fails any item

6. Returning Batch Results

Example: Batch Result with Per-Item Status

{
  "results": [
    {"index": 0, "status": 201, "id": 100, "data": {...}},
    {"index": 1, "status": 422, "error": {"code": "DUPLICATE_EMAIL"}},
    {"index": 2, "status": 201, "id": 101, "data": {...}}
  ],
  "summary": {"total": 3, "succeeded": 2, "failed": 1}
}

7. Implementing Transaction Support

ModeBehavior
Atomic (all-or-nothing)Single DB transaction; one failure → rollback all
Best-effortEach item independent; partial success possible
Header-controlledPrefer: handling=strict vs handling=lenient

8. Setting Batch Size Limits

LimitTypical
Items per batch100-1000
Total payload10 MB
Timeout30s sync, async beyond
Over limit413 Payload Too Large or 400

9. Handling Batch Validation Errors

ModeValidation Strategy
StrictValidate all upfront; reject batch if any invalid
LenientProcess each; report per-item errors
Best practiceAlways validate request envelope (max items) up front

10. Documenting Batch Operation Behavior

Documentation ElementContent
AtomicityAll-or-nothing vs partial
LimitsMax items, max size
Result formatPer-item status structure
IdempotencyBehavior on retry