REST API:我们什么时候应该使用不同于流行的 HTTP 状态码?

REST API: When should we use different HTTP status code other than popular ones?

我们 API returns 支持客户详细信息,即 /api/customers/{customerid}/。我们有以下场景:

  1. 如果传递的 customerid 是非整数或 <=0 或大于我们数据库中的 Maximum(customerid),我们将发回 BadRequest,即 HTTP 状态代码 400。
  2. 如果对此 API 的请求来自我们已阻止的任何 IP,我们将发回 HTTP 状态代码 403(禁止访问)。
  3. 如果 customerid 被删除:我们发回 404。

我在想为什么我们真的需要思考并拥有所有这些不同的 HTTP 状态代码?我们在这里需要做的就是在客户端显示一条适当的消息,我们可以通过为上述所有情况返回 HTTP 状态代码 400 轻松地做到这一点,并且为所有上述 3 种情况提供不同的字符串消息。

这适用于我的情况,但我想知道除了 200、400 和 500 之外,我们什么时候不可避免地需要这些特殊状态代码?

when would we inevitably need these special status codes other 200, 400 and 500?

使用更专业的代码的要点是它允许通用客户端(如网络浏览器)和中间组件(缓存)智能地运行;他们可以这样做是因为状态代码(如 header 字段中的元数据)具有标准化定义。

401 Unauthorized 是一个简单的示例 - 您的服务器告诉浏览器需要一些身份凭证,并且浏览器知道它可以使用用户提供的身份信息重复请求。

到处都使用 200/400/500 并没有错误;这样做会错过中间人更充分地参与消息交换的机会。

这类似于对每个请求使用 POST:你 可以 做到这一点,但这样做你就放弃了 safe/idempotent 语义;如果没有这些提示,当通信偏离正常路径时,您会限制中间组件可以提供多少帮助。