Estou escrevendo um serviço RESTful para um sistema de gerenciamento de clientes e estou tentando encontrar a melhor prática para atualizar parcialmente os registros. Por exemplo, desejo que o chamador possa ler o registro completo com uma solicitação GET. Mas, para atualizá-lo, apenas certas operações no registro são permitidas, como alterar o status de ENABLED para DISABLED. (Eu tenho cenários mais complexos que isso)
Não quero que o chamador envie o registro inteiro apenas com o campo atualizado por razões de segurança (também parece um exagero).
Existe uma maneira recomendada de construir os URIs? Ao ler os livros REST, as chamadas no estilo RPC parecem desaprovadas.
Se a chamada a seguir retornar o registro completo do cliente com o ID 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
como devo atualizar o status?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Atualização : Para aumentar a pergunta. Como alguém incorpora 'chamadas de lógica de negócios' em uma API REST? Existe uma maneira acordada de fazer isso? Nem todos os métodos são CRUD por natureza. Alguns são mais complexos, como ' sendEmailToCustomer (123) ', ' mergeCustomers (123, 456) ', ' countCustomers () '
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
próprio Roy Fielding: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post onde a idéia básica é: se não houver é um método (comoGET
ouPUT
) ideal para o seu uso operacionalPOST
.