HTTP unterscheidet zwei Eigenschaften:
Die Idempotenz wird durch die Spezifikation wie folgt definiert:
Methoden können auch die Eigenschaft " Idempotenz " haben, da (abgesehen von Fehler- oder Ablaufproblemen) die Nebenwirkungen von N> 0 identischen Anforderungen dieselben sind wie für eine einzelne Anforderung. Die Methoden GET, HEAD, PUTund DELETEdiese Eigenschaft teilen. Außerdem sollten die Methoden OPTIONSund TRACE NICHT Nebenwirkungen haben und sind daher von Natur aus idempotent.
Und Sicherheit:
Insbesondere wurde die Konvention festgelegt, dass die GETund HEADMethoden NICHT die Bedeutung haben sollten, eine andere Aktion als das Abrufen zu ergreifen. Diese Methoden sollten als " sicher " angesehen werden. Auf diese Weise kann Benutzeragenten andere Methoden zur Darstellung, wie POST, PUTund DELETEin einer besonderen Art und Weise, so dass der Anwender der Tatsache bewusst gemacht wird , dass eine möglicherweise gefährliche Aktion angefordert wird.
Natürlich kann nicht sichergestellt werden, dass der Server durch die Ausführung einer GETAnforderung keine Nebenwirkungen erzeugt . In der Tat betrachten einige dynamische Ressourcen dies als eine Funktion. Der wichtige Unterschied besteht darin, dass der Benutzer die Nebenwirkungen nicht angefordert hat und daher nicht für sie zur Rechenschaft gezogen werden kann.
Beachten Sie, dass Sicherheit Idempotenz impliziert: Wenn eine Methode keine Nebenwirkungen hat, führt die mehrfache Durchführung zu derselben Nebenwirkung wie die einmalige Durchführung, nämlich zu keiner.
Dadurch werden die Methoden in drei Kategorien eingeteilt:
- Safe (und damit auch idempotent):
GET, HEAD, OPTION,TRACE
- idempotent aber nicht unbedingt sicher :
PUT,DELETE
- weder idempotent noch sicher:
POST
PUT darf keine Nebenwirkungen haben.
Das ist falsch. PUTist idempotent aber nicht sicher. Der springende Punkt der PUTist , eine Nebenwirkung haben, und zwar auf eine Ressource zu aktualisieren. Was Idempotenz bedeutet, ist, dass das mehrmalige Aktualisieren derselben Ressource mit demselben Inhalt den gleichen Effekt haben sollte wie das nur einmalige Aktualisieren.
Beachten Sie den letzten Absatz im Abschnitt über Sicherheit [Schwerpunkt Mine]:
Natürlich kann nicht sichergestellt werden, dass der Server durch die Ausführung einer GETAnforderung keine Nebenwirkungen erzeugt . In der Tat betrachten einige dynamische Ressourcen dies als eine Funktion. Der wichtige Unterschied besteht darin, dass der Benutzer die Nebenwirkungen nicht angefordert hat und daher nicht für sie zur Rechenschaft gezogen werden kann .
Obwohl dieser Satz über GETund Sicherheit spricht , können wir davon ausgehen, dass die Autoren auch beabsichtigten, dieselbe Argumentation auf PUTund Idempotenz anzuwenden . IOW: PUTsollte nur einen vom Benutzer sichtbaren Nebeneffekt haben, nämlich das Aktualisieren der genannten Ressource. Es kann andere Nebenwirkungen haben, aber der Benutzer kann nicht dafür verantwortlich gemacht werden.
Zum Beispiel bedeutet die Tatsache, dass PUTes idempotent ist, dass ich es so oft wiederholen kann, wie ich möchte: Die Spezifikation garantiert, dass die mehrfache Ausführung genau die gleiche ist wie die einmalige Ausführung. Es ist absolut gültig, einen Rückstand alter Revisionen als Nebeneffekt dieser mehrfachen PUTAnforderungen zu erstellen . Wenn sich Ihre Datenbank jedoch aufgrund mehrerer Wiederholungsversuche mit einem Rückstand alter Revisionen füllt, ist dies nicht mein Problem, sondern Ihr Problem.
IOW: Sie dürfen so viele Nebenwirkungen haben, wie Sie möchten, aber
- Es muss für den Benutzer so aussehen, als ob seine Anforderungen idempotent wären
- Sie sind für diese Nebenwirkungen verantwortlich, nicht der Benutzer