Egy hívó, aki újraküld egy POST kérést, leggyakrabban egy fizetési szolgáltató vagy webhook küldő, aki nem biztos benne, hogy a visszahívása átment, végül kétszer futtathatja le a végponted logikáját: egy második sor kerül beszúrásra, egy második e mail kerül elküldésre, egy második terhelés kerül rögzítésre. Egy Idempotency-Key fejléc küldése elkerüli ezt.
Hogyan működik
Küldj egy egyedi Idempotency-Key fejlécet (bármilyen string, amit a hívó generál, egy UUID a tipikus) egy POST kérésen. Ha egy ezzel a pontos kulccsal rendelkező kérés már lefutott ez ellen a végpont ellen, az első futásból tárolt válasz kerül azonnal visszaküldésre, bájtra pontosan, beleértve a státuszkódját is, a végponted saját logikája sosem fut le másodszor. Egy még nem látott kulccsal rendelkező kérés normálisan fut le, és a válasza ezután tárolásra kerül a kulcs alatt legközelebbre. Ez automatikusan működik minden POST végponton, nincs semmi bekapcsolnivaló, egy hívó, aki sosem küldi el a fejlécet, egyáltalán nincs hatással rá.
Egy lejátszott válasz egy Idempotency-Replayed: true fejlécet is hordoz, így meg tudod különböztetni a két esetet, ha szükséged van rá.
Meddig emlékszik egy kulcsra
24 órán át az első kérés óta, ugyanaz az ablak, amit a legtöbb fizetési szolgáltató használ a saját újraküldéseihez. Ezután ugyanaz a kulcs újra újként kezelődik.
Egy ismert korlátozás
Két kérés, amit ugyanazzal a kulccsal küldtek el, ténylegesen ugyanabban a pillanatban, mindkettő kihagyhatja a tárolt választ, és mindkettő lefuttathatja a végponted logikáját, nincs zár tartva a kettő között, csak egy utólag tárolt válasz. A gyakorlatban egy valódi újraküldés (a hívó, aki egy időtúllépésre vagy hibára vár, mielőtt újra próbálkozna) sosem fedi át így egymást, csak két kérés, amit szándékosan párhuzamosan indítottak, tenné.
Tipp: Ez jól párosul a „Mi történik, amikor egy végpont félúton meghibásodik” cikkel, az automatikus visszaállítás hiba esetén, és a lejátszott válasz újraküldéskor között egy hívó biztonságosan újraküldhet egy POST t anélkül, hogy duplikált írásokon kellene aggódnia bármelyik esetben.