Zitiert aus meiner anderen Antwort hier :
In der Vergangenheit war RFC 2616, veröffentlicht 1999, die am häufigsten referenzierte HTTP 1.1-Spezifikation. Leider war die Beschreibung der Idempotenz vage , was Raum für all diese Debatten lässt. Diese Spezifikation wurde jedoch durch RFC 7231 ersetzt. Zitiert aus RFC 7231, Abschnitt 4.2.2 Idempotente Methoden , Hervorhebung von mir:
Eine Anforderungsmethode wird als "idempotent" betrachtet, wenn die beabsichtigte Auswirkung mehrerer identischer Anforderungen mit dieser Methode auf den Server mit der Auswirkung für eine einzelne solche Anforderung identisch ist. Von den durch diese Spezifikation definierten Anforderungsmethoden sind PUT-, DELETE- und sichere Anforderungsmethoden
idempotent .
Es steht also in den Spezifikationen geschrieben, dass es bei der Idempotenz nur um die Auswirkungen auf den Server geht. Das erste LÖSCHEN, das ein 204 zurückgibt, und das nachfolgende LÖSCHEN, das 404 zurückgibt, macht ein derart unterschiedlicher Statuscode das LÖSCHEN NICHT nicht idempotent. Die Verwendung dieses Arguments zur Rechtfertigung einer nachfolgenden Rückgabe ist einfach irrelevant.
OK, es geht also nicht um Idempotenz. Aber dann könnte eine Folgefrage sein, was ist, wenn wir uns immer noch dafür entscheiden, 204 in nachfolgendem LÖSCHEN zu verwenden? Ist es o.k?
Gute Frage. Die Motivation ist verständlich: Dem Kunden zu ermöglichen, sein beabsichtigtes Ergebnis zu erreichen, ohne sich um die Fehlerbehandlung sorgen zu müssen. Ich würde sagen, 204 in nachfolgendem DELETE zurückzugeben, ist eine weitgehend harmlose serverseitige "Notlüge", die die clientseitige Seite nicht sofort erkennen wird. Deshalb gibt es Leute, die das in freier Wildbahn tun, und es funktioniert immer noch. Denken Sie daran, dass eine solche Lüge als semantisch seltsam angesehen werden kann, da "GET / non-exist" 404 zurückgibt, "DELETE / non-exist" jedoch 204 ergibt. Zu diesem Zeitpunkt würde der Kunde herausfinden, dass Ihr Service nicht vollständig den Anforderungen entspricht Abschnitt 6.5.4 404 Nicht gefunden .
Aber dann sollte der von RFC 7231 angedeutete beabsichtigte Weg, dh die Rückgabe von 404 bei nachfolgendem LÖSCHEN, überhaupt kein Problem sein. Viele weitere Entwickler haben sich dafür entschieden. Dies liegt vermutlich daran, dass jeder Client, der HTTP DELETE (oder eine andere HTTP-Methode) implementiert, nicht blind davon ausgehen würde, dass das Ergebnis immer 2xx erfolgreich ist. Sobald der Entwickler über die Fehlerbehandlung nachdenkt, ist 404 Not Found einer der ersten Fehler, die in den Sinn kommen. Zu diesem Zeitpunkt würde er / sie hoffentlich die Schlussfolgerung ziehen, dass es für eine HTTP-DELETE-Operation semantisch sicher ist, einen 404-Fehler zu ignorieren. Problem gelöst.