无法更新的资源的REST响应代码

时间:2016-04-13 10:48:14

标签: web-services rest http-status

我有一个无法更新的资源(事件)。因此,我只允许Post&获得运营。 (我没有选择PUT,因为eventId是在服务器端生成的,并作为响应的一部分返回。)

我已经在输入中组合了三个字段,可用于标识唯一资源。

鉴于此,如果有人发布了两次相同的请求,这就是我期望返回的内容

  • 案例1:如果DB中已存在唯一字段,则完整请求为 与前一个完全相同,那么我们只是忽略这个请求(因为 资源已经存在)。
  • 案例2:如果DB中的唯一字段已经存在,那么其他部分 请求是不同的,然后发送错误响应,说它不是 支撑。

在案例1和案例2中返回的正确答案代码应该是什么?案例2。

谢谢, 哈里什

2 个答案:

答案 0 :(得分:1)

编辑:

既然409或400都不适合你的情况,也许 422 Unprocessable Entity

http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity

或许 409冲突是您正在寻找的。

https://httpstatuses.com/409

如果您想向客户表明失败是最终的'并且没有请求编辑会改变这一点,另一个选项是 400 Bad Request

就个人而言,当请求语法非法时我只使用400 - 这不是这里的情况。

答案 1 :(得分:1)

如果调用是幂等的,意味着案例1,我希望它返回 200 OK ,因为它没有真正失败,这与在执行PUT时使用相同值进行更新相同。

如果呼叫不是幂等的,意味着情况2,那么即使用户实际上不应该重试呼叫,我也希望 409冲突。这是因为根据你所说的,实际上允许用户发送具有相同标识符的请求,前提是所有其他参数也是相同的。

此外,但这只是我的直觉,如果用户尝试使用不同的参数来查看不同类型的响应代码,他可以确定资源的当前状态,即使他可能不允许阅读它。因此,根据应用程序的范围,您可能希望返回相同的响应。