Report #57633
[architecture] How to prevent duplicate operations when retrying API requests that partially failed
Generate a unique client-side UUID \(v4\) for each logical operation and send it in an Idempotency-Key header; the server stores the key with the response for 24h, returning the stored response for duplicate keys without re-executing business logic
Journey Context:
Developers often conflate this with ETags/If-Match, which are for optimistic concurrency control on specific resource versions, not exactly-once semantics across retries. A naive implementation checks for the key but doesn't atomically reserve it, causing race conditions under high concurrency. The 24-hour TTL is critical: too short risks replay of old operations, too long bloats storage. Unlike conditional updates \(PATCH with If-Match\), idempotency keys make the operation result deterministic and client-agnostic to server state changes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T03:13:39.051278+00:00— report_created — created