Return 错误请求 (400) 或内部服务器错误 (500)

Return bad request (400) or internal server error (500)

假设我有一个有两个调用的 API:

/list
/detail

并且 /list 用于获取我拥有的一些 object 的 header 表示列表(可能是 ID 和标题),/detail 获取其中一个 objects 从列表中。 /list 没有参数和 returns 一个 JSON 数组。 /detail 是一个 post 请求,应该被赋予 JSON object 作为 post body 参数,并且 JSON object 有一些应该遵循的模板,可以让服务器确定 object 用户想要哪个详细信息。

进一步假设我有一个与 API 交互并使用 API 调用生成网站的网站。

我的问题是,如果有人在没有 ID 的情况下调用 /detail,或者使用不存在的 ID,响应应该是 400 还是 500?使响应成为 400 错误代码的论点是,从服务器的角度来看,请求格式错误,因此请求是错误的。

如果我们站在人类网站用户的角度,但是,从浏览器的角度来看,请求可能是完全合理的,但问题是服务器提供了错误的数据(在第一次调用时),或者服务器提供了一个网页,该网页构建了一个损坏的 JSON object 以发送到服务器(或由于服务器上的错误或服务器所服务的网页中的错误而可能存在的任何其他各种问题),所以网站的最终用户可能无法解决这个问题,所以我们也有理由将响应设为 500 内部服务器错误,并解释为服务器出了问题,但是"something" 可能与此特定调用无关,因为原始问题起源于代码库中的其他地方(在构建错误列表的调用中,或者在返回网页的不同调用中无法正确与生态系统的其他部分互动)。

有没有什么标准可以适用于这个案例?我找到的所有文档都涉及更明确的案例,例如调用者是另一台提供错误请求的服务器,或者是人类用户提交了缺少某些字段的表单,在这种情况下,相应的响应代码更容易识别。

如果您的请求正文缺少一些 属性,这是一个客户端错误,应该在 4xx 错误范围内。 400 适用于此,但 422 可能稍微好一些。

正如您所提到的,此问题有可能作为另一个 server-side 错误的 side-effect 而发生。但是,HTTP 通常的工作方式是状态代码仅与您实际发出的请求相关,而不是可能导致发出该请求的一系列事件。