Building Resilient GraphQL APIs Using Idempotency - Shopify
Aug 27, 2019

Summary
Introduced API idempotency to the Payment Service to ensure 'exactly once' transactionality. Implemented idempotency keys as first-class GraphQL parameters, request locking based on client + idempotency key to prevent simultaneous duplicates, and an IncomingRequest model to track request progress and store previous responses. Detailed a stepwise execution strategy for mutations, categorizing steps by side effects (no side effects, local side effects, remote side effects) and implementing 'run' and 'recover' functions for fault tolerance. This approach aims to provide clients with the flexibility to retry failed requests without causing duplication or conflicts.