¿Cuál es la forma "RESTful" de agregar operaciones que no son CRUD a un servicio RESTful? Digamos que tengo un servicio que permite el acceso CRUD a registros como este:
GET /api/car/123 <- Returns information for the Car object with ID 123
POST /api/car <- Creates a new car (with properties in the request)
PUT /api/car/123 <- Updates car 123 (with properties in the request)
DELETE /api/car/123 <- Deletes car 123
POST /api/car/123/wheel/ <- Creates a wheel and associates it to car 123
Si quiero cambiar el color del automóvil, simplemente POST /api/car/123
incluiría una variable POST para el nuevo color.
Pero digamos que quiero comprar un automóvil, y esa operación es más complicada que simplemente actualizar la propiedad del "automóvil de propiedad" de un registro de "usuario". ¿Es RESTful simplemente hacer algo como POST /api/car/123/purchase
, donde "comprar" es esencialmente un nombre de método? ¿O debería usar un verbo HTTP personalizado, como en PURCHASE
lugar de POST
?
¿O las operaciones que no son de CRUD están completamente fuera del alcance de REST?
PATCH /api/car/123
y enviar un parámetro de color O usarPUT /api/car/123
y enviar todo el objeto del automóvil. POST inferiría que está creando un automóvil nuevo y probablemente nunca debería incluir una identificación al final de la URL