internet · 9 perc
HTTP metódusok és idempotencia: GET, POST, PUT és DELETE
Mi az idempotencia az interneten? HTTP GET, POST, PUT, DELETE és PATCH metódusok gyakorlati példákkal, újrapróbálási hibákkal.
Az idempotencia azt írja le, hogy ugyanannak a műveletnek az ismétlése a szerveren szándékolt állapotváltozás szempontjából ugyanazt eredményezi-e, mint az egyszeri végrehajtása. Ha egy kérés időtúllépés miatt nem ad választ, kulcsfontosságú tudni, hogy biztonságosan megismételhető-e.
Miben más az idempotens és a biztonságos HTTP metódus?
A biztonságos (safe) HTTP metódus az elvárás szerint nem kér állapotmódosítást. A GET és a HEAD ilyen; ezért idempotensek is. A PUT és a DELETE viszont módosíthat állapotot, mégis idempotensnek tekintjük őket a szándékolt hatás szerint. A „biztonságos” itt HTTP-szemantika, nem azt jelenti, hogy egy végpont kiberbiztonsági értelemben védett.
GET, POST, PUT, PATCH, DELETE összehasonlítása
- GET: erőforrás lekérése, rendszerint biztonságos és idempotens.
- POST: jellemzően új műveletet kér, például foglalás vagy fizetés létrehozását; nem garantált az idempotencia.
- PUT: erőforrás létrehozása vagy teljes cseréje a megadott címen; szándéka szerint idempotens.
- PATCH: részleges módosítás, amelynek idempotenciája a konkrét megvalósítástól függ.
- DELETE: a cél erőforrás eltávolítását kéri; megismétlése nem jelent újabb törlendő példányt.
Miért lehet más a válaszkód ugyanarra a DELETE kérésre?
Az első DELETE kérés után a szerver visszaadhat sikeres állapotot, a másodiknál pedig 404-et. Ettől még a metódus idempotens: a célobjektum mindkét kérés után nem létezik. A definíció a szándékolt hatásra, nem az azonos státuszkódra vonatkozik.
Tipikus üzleti példa: foglalás és dupla kattintás
Ha a felhasználó kétszer megnyomja az időpontfoglalás gombját, két POST kérés is érkezhet. A kliens gombjának tiltása segít, de önmagában nem elég; szerveroldali duplikációvédelemre vagy olyan idempotencia-kulcsra van szükség, amely ugyanahhoz az üzleti művelethez rendeli az ismételt kéréseket.
Az idempotencia-kulcs nem HTTP-metódus
Fizetési és rendelési API-knál gyakori megoldás, hogy a kliens egyedi kulcsot ad a kéréshez. A szerver ehhez kapcsolja az eredményt, és ha ugyanazzal a kulccsal érkezik megismételt kérés, nem hoz létre új ügyletet. A pontos működést az adott API dokumentációja szabályozza.
Amit érdemes megjegyezni
- A GET, PUT és DELETE normál szemantikája idempotens; a POST és PATCH nem automatikusan az.
- Az idempotencia nem azonos a jogosultság-ellenőrzéssel vagy a hálózati hibák hiányával.
- A szervernek kell biztosítania, hogy a végpont valóban tartsa a választott metódus elvárt szemantikáját.
- Kritikus üzleti műveleteknél külön védekezni kell az ismételt feldolgozás ellen.
A metódusok pontos definícióját és különbségeit a Mozilla dokumentációjában is ellenőrizheted.
MDN: Idempotent→Az egyedi API-k fejlesztése a webfejlesztési szolgáltatáshoz is kapcsolódik.
Egyedi webfejlesztés→