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