(scusa, la prima volta che ho perso mi sono perso / edit / e / delete / in (2) ...)
L'idea dell'URI è che è un identificatore di una risorsa indirizzabile , piuttosto che un metodo di chiamata . Quindi l'URI dovrebbe puntare a una risorsa specifica. E se si deferenza l'URI, si dovrebbe sempre ottenere la stessa risorsa.
Cioè, 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, se usi il plurale o il singolare, l'URI dovrebbe essere un identificatore piuttosto che un richiamo . Quello che stai provando a fare va nel metodo, ovvero: GET (ottieni), PUT (crea / aggiorna), CANCELLA (elimina) o POST (tutto il resto).
Quindi "/ item / delete / 123" interrompe REST perché non punta a una risorsa, è più un richiamo di metodo.
(Inoltre, solo semanticamente, dovresti essere in grado di OTTENERE un URI, decidere che è obsoleto, e quindi CANCELLARE lo stesso URI - perché è un identificatore. avere "/ delete /" e DELETE fa, quindi va contro la semantica HTTP. Stai trasmettendo 2 o più URI per risorsa dove 1 farà.)
Ora, il trucco è questo: non esiste una definizione chiara e chiara di ciò che è e non è una risorsa, quindi l'espediente comune in REST è definire un "nome di elaborazione" e puntare l'URI su quello. È praticamente un gioco di parole, ma soddisfa la semantica.
Quindi se, ad esempio, non potresti davvero usarlo per qualche motivo:
DELETE /items/123
potresti dichiarare al mondo che hai una risorsa di elaborazione "deletor" e utilizzare
POST /items/deletor { id: 123 }
Ora sembra molto simile a RPC (Remote Procedure Call), ma cade attraverso la vasta scappatoia della clausola "elaborazione dati" della specifica POST indicata nelle specifiche 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 < em> dovrebbe , perché è un uso più standard di HTTP. Ma se hai un caso complicato come "commit" o "publish" o "redact", allora il caso di usare un nome di processore soddisfa i puristi di REST e ti dà ancora la semantica di cui hai bisogno.