HTTP REST如何在最终URL未知时创建新的ressource

时间:2012-11-28 22:58:46

标签: http rest

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

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

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

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

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

之前解决方案的一个变体是向http://mydomain.org/create_object

发送POST请求

第三种解决方案是我最喜欢的解决方案。但它是否与HTTP / REST兼容以使用URL作为服务?

欢迎发表评论。

此致 的Mickaël

2 个答案:

答案 0 :(得分: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,因为它非常简单易懂地解释了这些内容。

答案 1 :(得分:0)

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