需要先前操作时的适当HTTP响应代码

时间:2013-12-04 02:01:14

标签: http rest

我正在为系统开发REST API,为了示例,该系统存在UsersMaps。可以Maps下载,评论和投票Users

Users下载Maps时,他们之间会建立关系。现在,当Users想要评论并投票Maps时,我会检查该关系是否存在,如果不存在则返回错误,以便客户知道它已丢失。

在这种情况下,我应该返回哪个HTTP代码,让客户知道之前需要执行的操作?

2 个答案:

答案 0 :(得分:1)

您描述的此错误情况听起来像是描述来自客户端的错误请求。因此它可能属于4xx系列。看看这些选择,409冲突似乎是最好的匹配。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html将其描述如下:

409冲突

由于与资源的当前状态发生冲突,无法完成请求。此代码仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许。响应主体应该包含足够的信息供用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。

当然,单独的HTTP响应代码不足以让客户采取行动。如上所述,响应实体应提供有关问题究竟是什么的详细信息。

答案 1 :(得分:1)

409 Conflict可能是最贴近的。它因此在RFC 2616中定义:

  

由于与当前的冲突,请求无法完成   资源的状态。此代码仅在以下情况下允许   预计用户可能能够解决冲突   重新提交请求。响应主体应该包含足够的

     

用户识别冲突根源的信息。   理想情况下,响应实体将包含足够的信息   用户或用户代理来解决问题;但是,这可能不是   可能而且不是必需的。

有些人使用400 Bad Request,但我不会这样做,因为该错误表示服务器无法理解客户想要做什么。听起来在您的情况下,服务器理解但无法满足请求。

另一个选项是403 Forbidden,但这不如409那么合适,因为它通常用于响应没有足够的权限来查看特定资源(并且规范表明请求不应该重复。)