我有一个无法更新的资源(事件)。因此,我只允许Post&获得运营。 (我没有选择PUT,因为eventId是在服务器端生成的,并作为响应的一部分返回。)
我已经在输入中组合了三个字段,可用于标识唯一资源。
鉴于此,如果有人发布了两次相同的请求,这就是我期望返回的内容
在案例1和案例2中返回的正确答案代码应该是什么?案例2。
谢谢, 哈里什
答案 0 :(得分:1)
编辑:
既然409或400都不适合你的情况,也许 422 Unprocessable Entity
http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity
或许 409冲突是您正在寻找的。 p>
如果您想向客户表明失败是最终的'并且没有请求编辑会改变这一点,另一个选项是 400 Bad Request 。
就个人而言,当请求语法非法时我只使用400 - 这不是这里的情况。
答案 1 :(得分:1)
如果调用是幂等的,意味着案例1,我希望它返回 200 OK ,因为它没有真正失败,这与在执行PUT时使用相同值进行更新相同。
如果呼叫不是幂等的,意味着情况2,那么即使用户实际上不应该重试呼叫,我也希望 409冲突。这是因为根据你所说的,实际上允许用户发送具有相同标识符的请求,前提是所有其他参数也是相同的。
此外,但这只是我的直觉,如果用户尝试使用不同的参数来查看不同类型的响应代码,他可以确定资源的当前状态,即使他可能不允许阅读它。因此,根据应用程序的范围,您可能希望返回相同的响应。