将非 CRUD 操作添加到 RESTful 服务的“ RESTful”方式是什么?假设我有一个允许 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 的吗? 在 POST /api/car/123/purchase
中,“ buy”本质上是一个方法名?或者我应该使用定制的 HTTP 动词,如 PURCHASE
而不是 POST
?
或者非 CRUD 操作完全超出了 REST 的范围?