Estoy escribiendo un servicio RESTful para un sistema de gestión de clientes y estoy tratando de encontrar la mejor práctica para actualizar registros parcialmente. Por ejemplo, quiero que la persona que llama pueda leer el registro completo con una solicitud GET. Pero para actualizarlo solo se permiten ciertas operaciones en el registro, como cambiar el estado de ENABLED a DISABLED. (Tengo escenarios más complejos que esto)
No quiero que la persona que llama envíe el registro completo solo con el campo actualizado por razones de seguridad (también parece excesivo).
¿Hay alguna forma recomendada de construir los URI? Al leer los libros REST, las llamadas de estilo RPC parecen estar mal vistas.
Si la siguiente llamada devuelve el registro completo del cliente para el cliente con la identificación 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
¿Cómo debo actualizar el estado?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Actualización : para aumentar la pregunta. ¿Cómo se incorporan las 'llamadas de lógica de negocios' en una API REST? ¿Hay una forma acordada de hacer esto? No todos los métodos son CRUDOS por naturaleza. Algunos son más complejos, como ' sendEmailToCustomer (123) ', ' mergeCustomers (123, 456) ', ' countCustomers () '
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
propio Roy Fielding: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post donde la idea básica es: si no hay Es un método (comoGET
oPUT
) ideal para su uso operativoPOST
.