这是一个理论问题。 我相信我知道答案,但我收到了相反的答案,所以我想我会在这里问。
在W3C网站上,它说:
客户端错误4xx 4xx类状态代码适用于客户端的情况 似乎有错误。
它也说
服务器错误5xx 响应状态代码以数字" 5"开头表明案件 服务器知道它有错误或无法执行 执行请求。
我认为这意味着如果请求在语法上是正确的,但在逻辑上是错误的,例如尝试在特定属性上创建具有无效值的对象,那么我的API应该抛出5xx错误,因为服务器DID了解请求,但发现它无效。 另一方面,我被告知它应该是4xx错误(特别是400 Bad Request),因为逻辑错误是在客户端,因为它首先发送了一个无效值。
那么,我应该报告什么错误代码?
答案 0 :(得分:2)
在您的示例中,4xx错误更合适,因为请求启动器是问题的根源。更具体地说,“422 Unprocessable Entity”错误是合适的,因为RFC 4918表示:
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此a 415(不支持的媒体类型)状态代码不合适),和 请求实体的语法是正确的(因此是400(错误请求) 状态代码不合适但是无法处理包含的内容 指令。
由于各种原因,一些API设计人员试图将自己限制为将使用的一组3-5个状态代码。一般来说,这样做是为了简化API用户的工作,这听起来不错,但有时候这种理念会产生更大的影响。
例如,如果我向某个API发送请求以添加新评论,我会期望授予一些内容,例如(但不限于):
我有时会得到什么?
听起来很混乱?对我来说确实如此。