(lo siento, la primera vez que perdí el / edit / y / delete / in (2) ...)
La idea del URI es que es un identificador de un recurso direccionable , en lugar de una invocación de método . Entonces, el URI debe apuntar a un recurso específico. Y si hace referencia al URI, siempre debe obtener el mismo recurso.
Es decir, debe pensar en los URI de la misma manera que piensa en la Clave primaria de una fila en una base de datos. Identifica de manera única algo: Identificador Universal de Recursos.
Entonces, ya sea que use plural o singular, el URI debe ser un identificador en lugar de una invocación . Lo que está tratando de hacer va en el método, a saber: GET (obtener), PUT (crear / actualizar), DELETE (eliminar) o POST (todo lo demás).
Entonces "/ item / delete / 123" interrumpe REST porque no apunta a un recurso, es más una invocación de método.
(Además, semánticamente, debería poder OBTENER un URI, decidir que está desactualizado y luego ELIMINAR el mismo URI, porque es un identificador. Si el URI GET no tiene "/ delete /" y DELETE sí, entonces eso va en contra de la semántica HTTP. Estás transmitiendo 2 o más URI por recurso donde 1 lo hará).
Ahora, el truco es este: no hay una definición real clara de qué es y qué no es un recurso, por lo que la evasión común en REST es definir un "sustantivo de procesamiento" y señalar el URI a eso. Eso es más o menos un juego de palabras, pero satisface la semántica.
Entonces, si, por ejemplo, realmente no puede usar esto por alguna razón:
DELETE /items/123
podría declarar al mundo que tiene un recurso de procesamiento "deletor" y utilizar
POST /items/deletor { id: 123 }
Ahora, eso se parece mucho a RPC (Llamada a procedimiento remoto), pero cae a través del gran vacío de la cláusula de "procesamiento de datos" de la especificación POST nombrada en la especificación HTTP.
Sin embargo, hacerlo es algo excepcional, y si puede usar el PUT común para crear / actualizar, BORRAR para eliminar y POST para agregar, crear y todo lo demás, entonces debería hacerlo , porque es un uso más estándar de HTTP. Pero si tiene un caso complicado como "confirmar" o "publicar" o "redactar", entonces el caso de usar un sustantivo de procesador satisface a los puristas de REST y aún le brinda la semántica que necesita.
PUT
yDELETE
, preferiría agregarlo a la ruta, no diferenciarlo con una cadena de consulta. No es una modificación de cadena de consulta a una operación existente; Es una operación separada.