0

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

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

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

  • 案例1:如果数据库中已经存在唯一字段并且完整的请求与前一个完全相同,那么我们忽略这个请求(因为资源已经存在)。
  • 情况 2:如果 DB 中已经存在唯一字段但请求的其他部分不同,则发送错误响应,说明不支持。

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

谢谢, 哈里什

4

2 回答 2

1

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

如果调用不是幂等的,即案例 2,那么即使用户实际上不应该重试调用,我也会期望409 冲突。那是因为正如您所说,只要所有其他参数也相同,用户实际上可以发送具有相同标识符的请求。

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

于 2016-04-13T15:20:44.487 回答
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 - 这不是这里的情况。

于 2016-04-13T10:54:03.620 回答