【发布时间】:2016-02-26 16:04:36
【问题描述】:
我正在编写一个带有一些端点的 RESTful API,客户端可以向其 PUT 或 POST 分块文件(使用 flow.js),包括元数据中的有效负载摘要。服务器还会计算摘要,如果摘要不匹配,则会抛出错误,在这种情况下,客户端应该尝试重试相同的请求而不做任何更改(至少在达到某个重试限制之前)。
似乎没有一个标准代码符合定义。最好使用什么代码?有什么符合惯例的吗?
注意:为了与此库集成,响应不能是 404、415、500 或 501,因为它们将取消较大的操作而不是重试这部分。
我也不能使用 409,因为它被用来识别尝试上传同一文件的多个副本的尝试,我认为无论如何使用 409 更好。
【问题讨论】:
-
如果摘要不匹配,不变的重复是否会改变结果? - 400 Bad Request 表示需要修改后重新发送。
-
没有官方的状态码告诉客户端重试(虽然 IIS 有一个非标准的449 Retry With)。我认为
400 Bad Request或409 Conflict可能是你最好的选择。或者,只需编写您自己的自定义代码。 -
@RemyLebeau 虽然这些工作它们在客户端指定了一个问题。通常 500 将是正确的响应,因为服务器端存在错误,没有合适的特定消息,但受到限制。所以,正如我在回答中所解释的那样,我会选择 501
-
@MatthewVerstraete IMO 这是一个验证检查问题(客户端发送了一些东西并声称它具有一定的哈希值,而服务器计算出一些不同的东西)。因此,这可能不是服务器的错(除非它使用了错误的哈希函数),而是发送者的错,因此应该在 400-ish 范围内
-
我相信可以公平地说问题不在服务器端,也可能不是客户端。经过一些重试后,400 响应可能是最合适的,但是当服务器想要建议未修改的重试时,似乎应该发送其他内容。我想归根结底是没有传输错误的响应范围,所以它必须嵌入客户端错误中。
标签: rest http-status-codes flow-js