对于损坏的有效负载(校验和失败),最合适的HTTP错误代码是什么?

时间:2016-02-26 16:04:36

标签: rest http-status-codes flow-js

我正在编写一个RESTful API,其中包含一些端点,客户端可以将这些端点PUT或POST分块文件(使用flow.js),包括元数据中的有效负载摘要。服务器还会计算摘要,如果摘要不匹配,则会抛出错误,在这种情况下,客户端应尝试重试相同的请求而不做任何更改(至少在达到某个重试限制之前)。

根据定义,所有标准代码似乎都不合适。什么是最好的代码?是否有任何符合惯例?

注意:为了与此库集成,响应不能是404,415,500或501,因为它们将取消较大的操作而不是重试此部分。

我也不能使用409,因为它用于识别上传同一文件的多个副本的尝试,我相信这更好地用于409.

3 个答案:

答案 0 :(得分:2)

我无法接受马修的答案,因为它仍然暗示我不会使用其中一个值 - 而且我也认为5xx错误不适合错误的地方在客户端或传输层。

虽然仍在寻找更好的选择,但我现在提出(并使用)非标准的4xx错误,特别是

  

419校验和失败

正在选择该特定值,因为它接近代码处理与409相似的性质和相似性的错误,这可能是最接近的关系。

几天之后将选择一个anser,为社区就最佳实践方法达成共识提供机会。

答案 1 :(得分:2)

我认为当用户出错的相同数据时更合适的状态代码,如损坏的数据:

400 Bad Request

对我来说,数据损坏,意味着数据传输引起的语法错误,语义正确但语法错误。

422无法处理的实体也可能适用。 https://tools.ietf.org/html/rfc4918#section-11.2

答案 2 :(得分:0)

我不知道这种情况的标准或特定错误编号,但通常我会使用415或500.由于您被限制使用这些选项,我会使用501.技术上501是“不是已实现“但它用于服务器无法识别请求或服务器无法满足请求的情况。您可能会认为校验和错误导致服务器无法满足请求。

如果您想查看所有选项的列表,请查看this wiki page,您可能会找到更喜欢的内容