"RESTful"方式如何向RESTful服务添加非CRUD操作?假设我有一个允许对记录进行CRUD访问的服务,类似于这样:
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
如果我想改变汽车的颜色,我只需要POST /api/car/123
并包含一个新颜色的POST变量。但是假设我想购买一辆车,而这个操作比简单更新“用户”记录的“拥有的车辆”属性要复杂得多。那么是否以这种方式
POST /api/car/123/purchase
符合RESTful规范,其中“purchase”实际上是一个方法名称?还是应该使用自定义HTTP动词,例如使用PURCHASE
代替POST
?或者非CRUD操作完全超出了REST的范畴?
PATCH /api/car/123
并发送一个颜色参数,或者使用PUT /api/car/123
并发送整个汽车对象。使用POST会暗示你正在创建一辆新汽车,并且通常不应该在URL末尾包含ID。 - RonnyKnoxville