Idempotent
metoda HTTP jest idempotent, jeśli identyczne żądanie może być wykonane raz lub kilka razy z rzędu z tym samym efektem, pozostawiając serwer w tym samym stanie. Innymi słowy, metoda idempotentna nie powinna mieć żadnych skutków ubocznych (z wyjątkiem prowadzenia statystyk). Poprawnie zaimplementowane metody GET
HEAD
PUT
I DELETE
są idempotentne, ale nie są POST
. Wszystkie bezpieczne metody są również idempotentne.
aby być idempotentnym, brany jest pod uwagę tylko rzeczywisty stan serwera, kod stanu zwracany przez każde żądanie może się różnić: pierwsze wywołanie DELETE
prawdopodobnie zwróci 200
, podczas gdy kolejne prawdopodobnie zwrócą 404
. Inną implikacją DELETE
jest to, że programiści nie powinni implementować RESTful API z funkcją usuwania ostatniego wpisu przy użyciu metody DELETE
.
zauważ, że idempotencja metody nie jest gwarantowana przez serwer i niektóre aplikacje mogą nieprawidłowo złamać ograniczenie idempotencja.
GET /pageX HTTP/1.1
jest idempotentem. Wywołany kilka razy z rzędu, klient otrzymuje takie same wyniki:
GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1
POST /add_row HTTP/1.1
nie jest idempotentny; jeśli zostanie wywołany kilka razy, doda kilka wierszy:
POST /add_row HTTP/1.1POST /add_row HTTP/1.1 -> Adds a 2nd rowPOST /add_row HTTP/1.1 -> Adds a 3rd row
DELETE /idX/delete HTTP/1.1
jest idempotentny, nawet jeśli zwracany kod statusu może się zmieniać między żądaniami:
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX existsDELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deletedDELETE /idX/delete HTTP/1.1 -> Returns 404