CREST操作在RESTful服务中

将非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? 还是应该使用自定义HTTP动词,如PURCHASE而不是POST

或者非CRUD操作完全超出REST的范围?


将购买视为RESTful字典中的业务实体或资源。 这就是说,进行购买实际上是在创造一种新的资源。 所以:

POST /api/purchase

将发出新的订单。 详细信息(用户,汽车等)应在发送到此地址的内容中由id(或URI)引用。

订购汽车不仅仅是数据库中的简单INSERT并不重要。 实际上,REST并不是将数据库表作为CRUD操作。 从逻辑的角度来看,您正在创建订单(购买),但服务器端可以根据需要自由地执行尽可能多的处理步骤。

甚至可以进一步滥用HTTP协议。 使用Location标题返回到新创建订单的链接,仔细选择HTTP响应代码以通知用户有关问题(服务器或客户端)等。


根据我的理解,RESTful的方式是,你不需要新的HTTP动词,有一个名词可能意味着你需要做什么。

购买汽车? 那不是那个

POST /api/order

你真正在做的是创建一个订单。 因此,添加另一个订单和发布资源,并在订单过程中放置​​。

考虑资源而不是方法调用。

要完成订单,您可能需要POST / api / order //完成或类似的操作。

链接地址: http://www.djcxy.com/p/45365.html

上一篇: CRUD operations in a RESTful service

下一篇: Adding parameters to rest GET request