Sådan fungerer idempotency
Idempotency er opt-in. For at aktivere det skal du inkludere enIdempotency-Key-header på en write-request:
Example
Idempotency-Key-header, bliver ikke deduplikeret. Hver enkelt behandles uafhængigt.
Idempotency gælder for write-operationer (
POST og DELETE). Læseoperationer (GET) er allerede sikre at gentage, så de ignorerer headeren. Når en gemt respons gentages, inkluderer API’et en Idempotency-Replayed: true-responseheader, så du kan skelne en gentagelse fra en nyligt udført request.Sådan opretter du en idempotency-nøgle
Nøglen er en streng, der entydigt identificerer en enkelt logisk handling. Den skal opfylde disse krav:
En tilfældig UUID v4 fungerer, men den tvinger dig til at generere nøglen på forhånd og gemme den sammen med ordren, så du kan genbruge præcis den samme værdi ved en gentagelse.
En enklere tilgang er at udlede nøglen deterministisk fra data, du allerede har, f.eks. ordre-id’et kombineret med request-payloaden. Fordi de samme input altid giver den samme nøgle, genberegner en gentagelse den identiske nøgle, uden at du behøver at gemme noget:
Idempotency-Key-headeren. Hvis requesten fejler, og du gentager den, genberegner du nøglen ud fra den samme ordre og payload, og API’et genkender den som den samme handling.
Sådan håndteres gentagne requests
Nøgler er afgrænset pr. klient og udløber automatisk 24 timer efter første brug. Derefter kan den samme nøgle bruges igen til en ny handling.
En request, der fejler validering, gemmes ikke sammen med nøglen. Du kan rette payloaden og prøve igen med den samme nøgle.
Konflikter og fejl
Hvis du modtager en409 Conflict, er den oprindelige request stadig under behandling. Vent det antal sekunder, der er angivet i Retry-After-responseheaderen, og prøv derefter igen med den samme nøgle:
Example response
422 Unprocessable Entity betyder, at nøglen allerede er blevet brugt til en request med en anden payload. Genbrug enten den oprindelige payload, eller generér en ny nøgle til den nye handling.