JSON:用于避免重复内容创建的API HTTP状态代码

时间:2017-06-29 22:19:33

标签: api duplicates json-api http-response-codes ruby-on-rails-5

假设我有一个支持创建新消息的端点。我避免在后端创建两次相同的消息,以防用户尝试按两次按钮(或者前端应用程序行为奇怪)。

目前,对于重复操作,我的服务器正在响应303,请参阅指向先前创建的资源URL的其他操作。但我看到我也可以使用302找到。哪一个看起来更合适?

请注意,重复避免策略可能更复杂(例如,对于约会,我们会检查POSTed约会是否在现有约会的一小时内)

3 个答案:

答案 0 :(得分:1)

当客户端需要采取其他操作(例如重定向)来完成请求时,通常会使用3XX系列状态代码。更一般地说,状态代码会向客户回复他们需要采取的操作或向他们提供有关请求的必要信息。

一般来说,这些"坏"如果请求(例如由于重复而导致重复请求失败),您将使用400状态代码进行响应,以向客户端指示其请求存在问题且未处理。您可以使用响应来更准确地传达问题。

另外要考虑的是,如果请求只是"火灾和忘记"从客户端开始,只要您处理了重复的情况,并且不再需要客户端的行为,则可以接受发送200响应。这告诉客户"请求已被接收并妥善处理,您无需再做任何事情。"然而,这有点具有欺骗性,因为它不会向客户端指示错误或允许任何修改的行为。

答案 1 :(得分:1)

我建议使用HTTP状态码409:冲突。

答案 2 :(得分:0)

JSON:API specification定义:

  

服务器必须在处理POST请求以创建具有已经存在的客户端生成的ID的资源的请求时,返回409冲突。