bybence
Kapcsolat
← ByBence Academy

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→
További Academy-leckék →