Qual é a maneira "RESTful" de adicionar operações não CRUD a um serviço RESTful? Digamos que eu tenha um serviço que permite o acesso 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
Se eu quiser mudar a cor do carro, eu simplesmente POST /api/car/123
incluiria uma variável POST para a nova cor.
Mas digamos que eu queira comprar um carro e essa operação seja mais complicada do que simplesmente atualizar a propriedade de "carro de propriedade" de um registro do "usuário". É RESTful simplesmente fazer algo como POST /api/car/123/purchase
, onde "compra" é essencialmente um nome de método? Ou devo usar um verbo HTTP personalizado, como em PURCHASE
vez dePOST
?
Ou as operações não CRUD estão completamente fora do escopo do REST?
PATCH /api/car/123
e enviar um parâmetro de cor OU usarPUT /api/car/123
e enviar o objeto carro inteiro. O POST inferiria que você está criando um novo carro e provavelmente nunca deveria incluir um id no final do URL