Privacy Settings

We use cookies to improve your experience and analyze traffic. You can accept all cookies or customize your preferences. Learn more in our Privacy Policy .

OnCloud

Begreb

Idempotency

•
2 min
•
Grundlæggende

Idempotency (idempotens) betyder, at flere udførelser af samme operation har samme tilsigtede effekt som én. Operationen kan eksempelvis gentages efter en timeout uden at skabe en ekstra betaling, ordre eller ressource.

Hvorfor er begrebet vigtigt?

En klient kan miste svaret, selv om serveren har gennemført handlingen. Uden idempotency kan et nyt forsøg oprette dubletter, gensende en besked eller gentage en økonomisk handling.

Idempotent design gør retries mere forudsigelige. Det fjerner ikke alle fejl, men reducerer behovet for at afgøre, om første forsøg nåede frem.

Typisk misforståelse

Idempotency betyder ikke, at operationen er uden sideeffekter, eller at alle svar er ens. En sletning kan ændre systemet første gang og stadig være idempotent, fordi senere identiske kald ikke ændrer sluttilstanden yderligere.

Det garanterer heller ikke, at anmodningen kun behandles fysisk én gang. Serveren kan modtage flere forsøg, men skal undertrykke den ekstra forretningshandling.

Eksempel

Et betalings-API modtager en ordre med en unik idempotency key. Serveren registrerer nøglen, et aftryk af anmodningen og resultatet atomisk med betalingen.

Mister klienten svaret, gentages anmodningen med samme nøgle. Serveren returnerer det tidligere resultat uden en ny hævning. Samme nøgle med et andet beløb afvises.

Best practice

  • Beskriv præcist, hvilke operationer der kan gentages, og hvilken effekt kontrakten garanterer.

  • Opret én unik nøgle pr. logisk handling, og genbrug den kun til retries af samme handling.

  • Afgræns nøglen efter eksempelvis kunde og endpoint, og dokumentér dens gyldighedstid.

  • Registrér nøgle og forretningsændring atomisk, så kun begge eller ingen af dem gennemføres.

  • Sammenlign anmodningens indhold, og afvis samme nøgle med ændrede parametre.

  • Test samtidige dubletter, forsinkede anmodninger, udløb og timeout efter en gennemført ændring.

  • Kombinér retries med grænser, backoff og overvågning, så fejl ikke forstærker belastningen.

Frequently asked questions

HTTP-standarden definerer sikre metoder samt PUT og DELETE som idempotente. POST og PATCH er det ikke som udgangspunkt. Tjenesten skal overholde metodens semantik.

Ja. API'et kan bruge en klientgenereret idempotency key eller entydig ressourceidentifikator til at genkende retries og undertrykke den ekstra handling.

Nej. Det er effekten på serveren, der skal være den samme. Et gentaget DELETE kan returnere en anden status, når ressourcen er væk.

Det afhænger af systemets retry- og forsinkelsesvindue. Perioden skal dokumenteres, fordi en udløbet nøgle kan blive behandlet som en ny handling.


Andre begreber