首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RESTful服务中的非CRUD操作

RESTful服务中的非CRUD操作
EN

Stack Overflow用户
提问于 2011-07-28 03:33:38
回答 3查看 30.2K关注 0票数 110

向RESTful服务添加非CRUD操作的"RESTful“方式是什么?假设我有一个服务,它允许这样的CRUD访问记录:

代码语言:javascript
复制
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的范围?

EN

回答 3

Stack Overflow用户

发布于 2011-07-28 03:41:24

据我所知,RESTful的方式是你不需要新的超文本传输协议动词,在某个地方有一个名词可以表示你需要做的事情。

买车?那不是吗?

代码语言:javascript
复制
POST /api/order
票数 15
EN

Stack Overflow用户

发布于 2011-07-28 03:40:36

您真正要做的是创建一个订单。因此,在订购过程中,为order和post添加另一个资源,并将其放入其中。

从资源的角度考虑,而不是方法调用。

要最终确定订单,您可能需要发布/api/ order //complete或类似的内容。

票数 5
EN

Stack Overflow用户

发布于 2015-06-19 20:02:30

我觉得REST API在很多方面都有帮助,而不仅仅是提供语义。所以不能仅仅因为一些调用在RPC操作风格中看起来更有意义就选择RPC风格。谷歌地图api就是一个例子,它可以在两个地方之间找到方向。看起来像这样:http://maps.googleapis.com/maps/api/directions/json?origin=Jakkur&destination=Hebbal

他们可以将其称为"findDirections“(动词),并将其视为一个操作。相反,他们将“方向”(名词)作为一种资源,并将查找方向视为对方向资源的查询(尽管在内部可能没有真正的资源称为方向,它可以由业务逻辑实现以基于参数查找方向)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6850187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档