2

我正在指定一个带有可以查看、创建、编辑或删除的资源的休息系统。我试图尊重 rest 和 http 方法语义。

如果资源由http://mydomain.org/oid_bar标识,我可以使用以下方法对其进行管理: - PUT 创建或更新此资源 - DELETE 删除此资源 - GET 返回此资源

但是,如果您需要创建一个您还不知道 oid 的新资源,您将如何进行?当您将对象添加到数据库并且主键由数据库自动生成时,这种情况非常常见。就我而言,我的后端是一个数据库。

我想到了一个带有资源http://mydomain.org/next_free_oid的解决方案,它返回下一个空闲 oid 并增加它的值。此资源只会响应 POST 请求。使用返回的 oid,我可以向目标 URL 发送 PUT 请求。

另一种解决方案是向http://mydomain.org/发送 POST 请求。该请求将创建一个具有生成的 oid 的资源并返回该 oid。

先前解决方案的一个变体是将 POST 请求发送到http://mydomain.org/create_object

第三种解决方案是我的首选。但是将 URL 用作服务是否符合 HTTP/REST?

欢迎每条评论。

问候, 米凯尔

4

2 回答 2

3

约定是对http://mydomain.org/的 POST

然后,您应该返回状态代码 201 Created,并将响应的位置标头设置为指向新创建的资源。

我正在尝试找到一些链接来支持自己...

编辑:如果您愿意,您也可以选择返回新创建的资源,但设置位置标头仍然是一个好主意。

试试下面的链接,虽然很难只见树木不见森林:

http://jcalcote.wordpress.com/2008/10/16/put-or-post-the-rest-of-the-story/

我个人建议获取 RESTful Web Services Cookbook,因为它非常简单轻松地解释了事情。

于 2012-11-28T23:05:49.717 回答
0

此外,不要铸造带有动词的 URI,例如http://mydomain.org/create_object- 您的 URI 应该代表一个名词,例如编辑表单,而不是表示“在此处发送数据以执行此操作”的动词。对于您的动词,选择适当的 HTTP 方法。[ RFC2616 ]

于 2012-11-29T11:20:33.493 回答