/ˌaɪdɪmˈpoʊtəns/i-dem-po-tenceTakéidempotentní operaceExpertní
Definice
Idempotence je vlastnost operace, u které opakované provedení se stejnými vstupy skončí ve stejném stavu jako provedení jediné. Je to základní pojistka proti dvojímu zaúčtování, když se požadavek kvůli výpadku sítě odešle dvakrát.
Nezaměňujte: V matematice označuje idempotence prvek, pro který platí, že jeho druhá mocnina se rovná jemu samému. Tady jde o vlastnost operace v distribuovaných systémech.
Proč na tom záleží
Síť není spolehlivá. Klient odešle požadavek, server ho zpracuje, a odpověď se cestou zpátky ztratí. Klient neví, co se stalo, a zkusí to znovu. Pokud operace není idempotentní, zákazník zaplatí dvakrát.
Jak se idempotence zajišťuje
Nejběžnější způsob je idempotenční klíč: klient ke každému požadavku přiloží unikátní identifikátor a server si pamatuje, které klíče už zpracoval. Druhý požadavek se stejným klíčem nevykoná nic nového, jen vrátí původní odpověď.
Příklady z praxe
Platba s idempotenčním klíčem
E-shop pošle platební bráně požadavek s hlavičkou obsahující identifikátor objednávky. Když se odpověď ztratí a e-shop požadavek zopakuje, brána podle klíče pozná, že tuhle platbu už provedla, a nestrhne peníze podruhé.
Idempotency-Key: order-2026-07-27-8841
Časté omyly
- MýtusIdempotentní znamená, že se při opakování nic nezmění.
- Ve skutečnostiPrvní volání stav změnit může a obvykle změní. Idempotence říká, že každé další volání se stejnými vstupy už výsledný stav nezmění, ne že jej nezmění ani to první.
Časté dotazy
- Je metoda POST idempotentní?
- Podle specifikace HTTP idempotentní není. Zopakování požadavku POST může vytvořit další zdroj, proto se u plateb a objednávek doplňuje idempotenčním klíčem. Metody GET, PUT a DELETE jsou naopak podle specifikace idempotentní.
- Jaký je rozdíl mezi idempotentní a bezpečnou metodou?
- Bezpečná metoda stav vůbec nemění, typicky GET. Idempotentní metoda stav změnit může, ale opakované provedení už výsledek dál neposouvá. Každá bezpečná metoda je tedy idempotentní, opačně to neplatí.
Zdroje
- RFC 9110, oddíl 9.2.2: Idempotent Methods(otevře se v novém okně)