Http API何时应该抛出4xx状态码(错误),何时抛出5xx状态码?

Http API何时应该抛出4xx状态码(错误),何时抛出5xx状态码?,http,error-handling,http-status-codes,http-status-code-400,Http,Error Handling,Http Status Codes,Http Status Code 400,这是一个理论问题。 我相信我知道答案,但我收到了相互矛盾的答案,所以我想我应该在这里提问 在W3C网站上,它说: 客户端错误4xx 4xx类状态代码适用于以下情况: 似乎犯了错误 它还说 服务器错误5xx 以数字“5”开头的响应状态代码表示 服务器知道它出错或无法执行的操作 执行请求 我认为这意味着,如果一个请求在语法上是正确的,但在逻辑上是错误的,例如试图在特定属性上创建一个具有无效值的对象,那么我的API应该抛出一个5xx错误,因为服务器确实理解该请求,但发现它是无效的。 另一方面,我被告知

这是一个理论问题。 我相信我知道答案,但我收到了相互矛盾的答案,所以我想我应该在这里提问

在W3C网站上,它说:

客户端错误4xx 4xx类状态代码适用于以下情况: 似乎犯了错误

它还说

服务器错误5xx 以数字“5”开头的响应状态代码表示 服务器知道它出错或无法执行的操作 执行请求

我认为这意味着,如果一个请求在语法上是正确的,但在逻辑上是错误的,例如试图在特定属性上创建一个具有无效值的对象,那么我的API应该抛出一个5xx错误,因为服务器确实理解该请求,但发现它是无效的。 另一方面,我被告知应该是4xx错误(特别是400个错误请求),因为逻辑错误在客户端,因为它首先发送了一个无效值


那么,我应该报告什么错误代码呢?

5xx错误将在服务器端出现。例如,当您使用服务器不理解的方法或协议发出请求时,当代理未响应时,等等。每短:当服务器无法完成请求时

在您的示例中,4xx错误更合适,因为请求启动器是问题的根源。更具体地说,“422不可处理实体”错误是合适的,因为as声明:

422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此 415(不支持的媒体类型)状态代码不合适),并且 请求实体的语法正确(因此是400(错误请求) 状态代码不合适),但无法处理包含的 指示

出于各种原因,一些API设计人员试图将自己限制为一组将要使用的3-5状态代码。一般来说,这样做是为了简化API用户的工作,这听起来不错,但有时这种理念会有更大的影响

例如,如果我向某个API发送添加新注释的请求,我希望能够获得一些许可,例如(但不限于):

  • 请求为POST,如果不是,则返回405状态
  • 如果添加了评论,我将返回201回复,并在正文中链接到我的新评论
我有时会得到什么

  • 如果请求方法不是POST,我将得到一个400错误
  • 如果请求是POST,我将返回200状态,有时没有链接到我的新评论

听起来很困惑?对我来说确实如此。

我一直认为4xx错误可以由用户修复,而5xx必须由管理部门修复(例如服务器端异常),因此发送不正确的请求应该在4xx范围内。@zero298我不认为这是官方的区别。。。但这是一种有趣的方式,谢谢。对
http-status-code-500
标签的描述是“请不要使用此标签。它对您的问题进行分类毫无意义。”。在使用标签说明回答问题之前,请先阅读标签说明。