(Entschuldigung, mein erstes Mal habe ich das / edit / und / delete / in (2) verpasst ...)
Die Idee des URI ist, dass es sich nicht um einen Methodenaufruf , sondern um einen Bezeichner einer adressierbaren Ressource handelt . Der URI sollte also auf eine bestimmte Ressource verweisen. Und wenn Sie den URI verteidigen, sollten Sie immer die gleiche Ressource erhalten.
Das heißt, Sie sollten URIs genauso betrachten wie den Primärschlüssel einer Zeile in einer Datenbank. Es identifiziert eindeutig etwas: Universal Resource Identifier.
Unabhängig davon, ob Sie den Plural oder den Singular verwenden, sollte der URI eher ein Bezeichner als ein Aufruf sein . Was Sie versuchen zu tun , geht in dem Verfahren, nämlich: GET (get), PUT (create / update), DELETE (löschen) oder POST (alles andere).
"/ Item / delete / 123" unterbricht also REST, weil es nicht auf eine Ressource verweist, sondern eher ein Methodenaufruf ist.
(Nur semantisch gesehen sollten Sie in der Lage sein, einen URI abzurufen, zu entscheiden, dass er veraltet ist, und dann denselben URI zu LÖSCHEN, da es sich um einen Bezeichner handelt. Wenn der GET-URI nicht über "/ delete /" verfügt und DELETE dies tut, dann widerspricht das der HTTP-Semantik. Sie senden 2 oder mehr URIs pro Ressource, wobei 1 ausreicht.)
Nun, der Cheat ist der folgende: Es gibt keine wirklich klare Definition dessen, was eine Ressource ist und was nicht. Daher besteht die übliche Dodge in REST darin, ein "Verarbeitungsnomen" zu definieren und den URI darauf zu verweisen. Das ist so ziemlich ein Wortspiel, aber es befriedigt die Semantik.
Wenn Sie dies beispielsweise aus irgendeinem Grund wirklich nicht verwenden können:
DELETE /items/123
Sie könnten der Welt mitteilen, dass Sie eine "Löscher" -Verarbeitungsressource haben und verwenden
POST /items/deletor { id: 123 }
Das sieht RPC (Remote Procedure Call) sehr ähnlich, aber es fällt durch die große Lücke der "data processing" -Klausel der POST-Spezifikation, die in der HTTP-Spezifikation genannt wird.
Aber das zu tun ist eine Art außergewöhnlich, und wenn Sie können die gemeinsame PUT für erstellen / aktualisieren verwenden, DELETE zum Löschen und POST für Anfügen, erstellen und alles andere, dann Sie sollten , denn es ist eine Standard - Nutzung von HTTP. Wenn Sie jedoch einen kniffligen Fall wie "Festschreiben" oder "Veröffentlichen" oder "Redigieren" haben, erfüllt der Fall für die Verwendung eines Prozessornomens die REST-Puristen und bietet Ihnen dennoch die Semantik, die Sie benötigen.
PUT
undDELETE
würde ich es vorziehen, es dem Pfad hinzuzufügen, ohne es mit einer Abfragezeichenfolge zu unterscheiden. Es handelt sich nicht um eine Änderung der Abfragezeichenfolge an einer vorhandenen Operation. Es ist eine separate Operation.