(scusate, la prima volta che ho perso il / edit / e / delete / in (2) ...)
L'idea dell'URI è che si tratta di un identificatore di una risorsa indirizzabile , piuttosto che di una chiamata al metodo . Quindi l'URI dovrebbe puntare a una risorsa specifica. E se rinvii l'URI, dovresti sempre ottenere la stessa risorsa.
Ossia, dovresti pensare agli URI nello stesso modo in cui pensi alla Chiave primaria di una riga in un database. Identifica in modo univoco qualcosa: Universal Resource Identifier.
Quindi, indipendentemente dal fatto che tu usi il plurale o il singolare, l'URI dovrebbe essere un identificatore anziché un'invocazione . Quello che stai cercando di fare va nel metodo, vale a dire: GET (get), PUT (create / update), DELETE (delete) o POST (tutto il resto).
Quindi "/ item / delete / 123" interrompe REST perché non punta a una risorsa, è più una chiamata al metodo.
(Inoltre, solo semanticamente, dovresti essere in grado di OTTENERE un URI, decidere che è obsoleto e quindi ELIMINARE lo stesso URI, perché è un identificatore. Se l'URI GET non ha "/ delete /" e DELETE sì, allora questo va contro la semantica HTTP. Stai trasmettendo 2 o più URI per risorsa dove 1 farà.)
Ora, il trucco è questo: non esiste una vera definizione chiara di ciò che è e non è una risorsa, quindi la schivata comune in REST è definire un "sostantivo di elaborazione" e puntare l'URI a quello. È praticamente un gioco di parole, ma soddisfa la semantica.
Quindi se, per esempio, non potessi davvero usarlo per qualche motivo:
DELETE /items/123
potresti dichiarare al mondo che hai una "elaborazione" di risorse di elaborazione e utilizzo
POST /items/deletor { id: 123 }
Ora, assomiglia molto a RPC (Remote Procedure Call), ma cade attraverso l'enorme lacuna della clausola di "elaborazione dei dati" della specifica POST denominata nella specifica HTTP.
Tuttavia, farlo è un po 'eccezionale, e se puoi usare il PUT comune per creare / aggiornare, DELETE per eliminare e POST per aggiungere, creare e tutto il resto, allora dovresti , perché è un uso più standard di HTTP. Ma se hai un caso complicato come "commit" o "publishing" o "redact", allora il caso di usare un nome di processore soddisfa i puristi REST e ti dà ancora la semantica di cui hai bisogno.
PUT
eDELETE
, preferirei aggiungerlo al percorso, non differenziarlo con una stringa di query. Non è una modifica della stringa di query a un'operazione esistente; è un'operazione separata.