Implementing Bulk Data Operations

1. Designing Bulk Import Endpoints

Endpoint PatternUse
POST /users/importSync small imports
POST /jobs/import + 202 AcceptedAsync large imports
POST /imports as resourceTrackable import job (CRUD on imports)

2. Designing Bulk Export Endpoints

EndpointBehavior
GET /users/export?format=csvSync stream
POST /exports + pollAsync; returns download URL when ready
Filtered exportApply same filters as list endpoint

3. Implementing CSV/JSON Import

FormatContent-TypeNotes
CSVtext/csvHeader row required; UTF-8 BOM optional
NDJSONapplication/x-ndjsonOne JSON object per line; streamable
JSON Linesapplication/jsonlSame as NDJSON
JSON arrayapplication/jsonMust fit in memory

4. Implementing CSV/JSON Export

HeaderValue
Content-Typetext/csv; charset=utf-8
Content-Dispositionattachment; filename="users-2026-05-15.csv"
Transfer-Encodingchunked (streaming)

5. Handling Large Dataset Processing

TechniqueBenefit
Streaming parserConstant memory
Chunked processing (1000-row batches)Reduced DB round-trips
Background queue (SQS, RabbitMQ)Decouple from request
Worker scalingHorizontal throughput

6. Implementing Background Processing

Example: Async Job Pattern

POST /imports
 202 Accepted
   Location: /imports/abc-123
   {"id": "abc-123", "status": "queued"}

GET /imports/abc-123
 200 OK
   {"id": "abc-123", "status": "processing", "progress": 0.42, "processedRows": 4200}

GET /imports/abc-123  (later)
 200 OK
   {"id": "abc-123", "status": "completed", "result": {"created": 9800, "failed": 200}}

7. Providing Progress Indicators

FieldType
statusqueued | processing | completed | failed
progress0.0 - 1.0 (fraction)
processedRows / totalRowsRow counts
estimatedCompletionISO 8601 timestamp

8. Validating Bulk Data Format

StageValidation
Pre-flightFile size, MIME type, encoding
HeaderRequired columns present
Per-rowSchema, types, business rules
Cross-rowUniqueness, references

9. Handling Partial Import Failures

StrategyResult
Continue on errorSkip bad rows, report at end
Stop on first errorReject entire import
Error report downloadCSV of failed rows + reasons
Resume from offsetReplay after fix

10. Implementing Data Streaming

DirectionTech
Server → ClientChunked transfer encoding, SSE, WebSocket
Client → ServerChunked upload, multipart streaming
BothHTTP/2 bidirectional, gRPC streaming