Idempotent
Eine HTTP-Methode ist idempotent, wenn die beabsichtigte Wirkung auf den Server bei einer einzelnen Anfrage dieselbe ist wie die Wirkung bei mehreren identischen Anfragen.
Das bedeutet nicht unbedingt, dass die Anfrage keine einzigartigen Nebeneffekte hat: Zum Beispiel könnte der Server jede Anfrage mit der Zeit, zu der sie eingegangen ist, protokollieren. Idempotenz bezieht sich nur auf die vom Client beabsichtigten Effekte: Beispielsweise beabsichtigt eine POST-Anfrage, Daten an den Server zu senden, oder eine DELETE-Anfrage beabsichtigt, eine Ressource auf dem Server zu löschen.
Alle sicheren Methoden sind idempotent sowie PUT
und DELETE
. Die POST
-Methode ist nicht idempotent.
Um idempotent zu sein, wird nur der Zustand des Servers berücksichtigt. Die von jeder Anfrage zurückgegebene Antwort kann unterschiedlich sein: Zum Beispiel wird der erste Aufruf eines DELETE
wahrscheinlich einen 200
zurückgeben, während nachfolgende wahrscheinlich einen 404
zurückgeben. Eine weitere Folge davon, dass DELETE
idempotent ist, ist, dass Entwickler keine RESTful APIs mit einer Entfernen des letzten Eintrags-Funktionalität unter Verwendung der DELETE
-Methode implementieren sollten.
Beachten Sie, dass die Idempotenz einer Methode nicht vom Server garantiert wird und einige Anwendungen möglicherweise fälschlicherweise die Idempotenzbeschränkung verletzen.
GET /pageX HTTP/1.1
ist idempotent, da es sich um eine sichere (nur lesbare) Methode handelt. Nachfolgende Aufrufe können unterschiedliche Daten an den Client zurückgeben, wenn die Daten auf dem Server in der Zwischenzeit aktualisiert wurden.
POST /add_row HTTP/1.1
ist nicht idempotent; wenn es mehrmals aufgerufen wird, fügt es mehrere Zeilen hinzu:
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1 -> Adds a 2nd row
POST /add_row HTTP/1.1 -> Adds a 3rd row
DELETE /idX/delete HTTP/1.1
ist idempotent, auch wenn der zurückgegebene Statuscode zwischen den Anfragen variieren kann:
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1 -> Returns 404