¿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/123incluirí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 PURCHASElugar de POST?
¿O las operaciones que no son de CRUD están completamente fuera del alcance de REST?
PATCH /api/car/123y enviar un parámetro de color O usarPUT /api/car/123y 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