向RESTful服务添加非CRUD操作的"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的范围?
发布于 2011-07-28 03:41:24
据我所知,RESTful的方式是你不需要新的超文本传输协议动词,在某个地方有一个名词可以表示你需要做的事情。
买车?那不是吗?
POST /api/order
发布于 2011-07-28 03:40:36
您真正要做的是创建一个订单。因此,在订购过程中,为order和post添加另一个资源,并将其放入其中。
从资源的角度考虑,而不是方法调用。
要最终确定订单,您可能需要发布/api/ order //complete或类似的内容。
发布于 2015-06-19 20:02:30
我觉得REST API在很多方面都有帮助,而不仅仅是提供语义。所以不能仅仅因为一些调用在RPC操作风格中看起来更有意义就选择RPC风格。谷歌地图api就是一个例子,它可以在两个地方之间找到方向。看起来像这样:http://maps.googleapis.com/maps/api/directions/json?origin=Jakkur&destination=Hebbal
他们可以将其称为"findDirections“(动词),并将其视为一个操作。相反,他们将“方向”(名词)作为一种资源,并将查找方向视为对方向资源的查询(尽管在内部可能没有真正的资源称为方向,它可以由业务逻辑实现以基于参数查找方向)。
https://stackoverflow.com/questions/6850187
复制相似问题