(desculpe, na primeira vez que perdi o / edit / e / delete / no (2) ...)
A idéia do URI é que ele é um identificador de um recurso endereçável , em vez de uma invocação de método . Portanto, o URI deve apontar para um recurso específico. E se você deferir o URI, sempre deverá obter o mesmo recurso.
Ou seja, você deve pensar em URIs da mesma maneira que pensa na Chave Primária de uma linha em um banco de dados. Ele identifica exclusivamente algo: Identificador Universal de Recursos.
Portanto, se você usa plural ou singular, o URI deve ser um identificador e não uma invocação . O que você está tentando fazer está no método, a saber: GET (get), PUT (criar / atualizar), DELETE (excluir) ou POST (tudo o resto).
Portanto, "/ item / delete / 123" interrompe o REST porque não aponta para um recurso, é mais uma invocação de método.
(Além disso, apenas semântica, você deve obter um URI, decidir que está desatualizado e EXCLUIR o mesmo URI - porque é um identificador. Se o GET URI não tiver "/ delete /" e DELETE, isso vai contra a semântica HTTP. Você está transmitindo 2 ou mais URIs por recurso, onde 1 fará.)
Agora, o truque é este: não existe uma definição clara e clara do que é e do que não é um recurso; portanto, o esquivo comum no REST é definir um "substantivo de processamento" e apontar o URI para ele. É praticamente um jogo de palavras, mas satisfaz a semântica.
Portanto, se, por exemplo, você realmente não puder usar isso por algum motivo:
DELETE /items/123
você pode declarar ao mundo que possui um recurso de processamento "deletor" e usar
POST /items/deletor { id: 123 }
Agora, isso se parece muito com o RPC (Remote Procedure Call), mas cai na vasta lacuna da cláusula "processamento de dados" da especificação POST, nomeada na especificação HTTP.
No entanto, fazer isso é excepcional e, se você puder usar o PUT comum para criar / atualizar, DELETE para excluir e POST para anexar, criar e tudo mais, deverá fazê-lo, porque é um uso mais padrão do HTTP. Mas se você tiver um caso complicado como "confirmar" ou "publicar" ou "redigir", o caso para o uso de um nome de processador satisfaz os puristas do REST e ainda fornece a semântica de que você precisa.
PUT
eDELETE
, eu preferiria adicioná-lo ao caminho, sem diferenciá-lo com uma string de consulta. Não é uma modificação de cadeia de consulta para uma operação existente; é uma operação separada.