使用OneToMany响应资源上的Create操作的正确HTTP状态代码是什么

时间:2012-01-26 12:20:30

标签: http rest httpresponse

我有一些简单的用例:用户有一组权限;当我创建用户资源时,我不想创建权限;所以,如果一个有新权限的新用户来自客户端,我想回答一下:

  

我无法创建用户资源,因为它包含权限   不存在。

此时,客户端可以先在权限上创建,然后将其添加到用户并创建该权限。

问题是 HTTP响应使用的错误状态代码:

  • 412 - 前提条件失败
  • 424 - 依赖失败

我也考虑过(但似乎不适合用例):

  • 400 - 错误请求
  • 422 - 无法处理的实体

2 个答案:

答案 0 :(得分:1)

409听起来不错;客户端可以单独请求解决冲突,在这种情况下操作会成功。 (您可以使用具有自定义链接关系的链接来标识操作与之冲突的资源)

答案 1 :(得分:0)

422和424具有特定的WebDAV含义。所以他们不适用。

412是关于客户端请求的预先存在的。所以它也不适用。

也许可以使用409冲突。

编辑: 409冲突是指客户端要求服务器将服务器资源置于不可能或不一致的状态。所以我认为这适用于你的作品。只要客户端上不存在引用的权限,就无法创建引用它们的用户。

修改:查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html