REST API 中可能出现的 HTTP 状态代码的完整间隔是多少?

What are the complete intervals of HTTP Status Codes that might occur in REST API?

我正在尝试简化 REST API 的 HTTP 状态代码的处理。

我想知道在REST中有可能出现下列状态码区间中的哪些API?

 -Informational responses (100–199)

 -Successful responses (200–299)

 -Redirects (300–399)

 -Client errors (400–499)

 -Server errors (500–599)

目前仅按以下方式处理 3 个 HTTP 状态码区间。

是否需要处理剩余的 2 个间隔,即 Informational responses (100–199)Redirects (300–399)

我真的很困惑,并试图找到正确的解决方案来处理服务器端和客户端的 http 状态代码。

服务器端

switch(Math.floor(statusCode/100)){
    case 2: 
        err.status = 'OK'
        break;
    case 4: 
        err.status = 'CLIENT ERROR';
        break;     
    case 5: 
        err.status = 'SERVER ERROR';
        
}


res.status(statusCode).json({
    status: status,            
    message: message   
    data: data
});

客户端

const res = axios.get('https://www.example.com/things);

if(res.data.status == 'OK'){
    showThings(res.data.data);
    console.log('Request successfully processed.');

} else if(res.data.status == 'CLIENT ERROR') {
    console.log('Request failed due to client error');

} else if(res.data.status == 'SERVER ERROR') {  
    console.log('Request failed due to server error.');
}

一个 API 可以 return 它希望的任何状态代码。你是否必须处理它是你的系统和 API 之间的契约的问题:理想情况下,一个有据可查的 API 将列出它可以 return 所有可能的状态代码,消除猜测。

不过,在大多数真实情况下,您可以假设 200-299 范围内的任何事情都“成功”,而其他任何事情都没有。您对 4xx 和 5xx 的区分是正确的。 3xx 有点奇怪,因为 301/302 意味着您可能只需要遵循重定向,有时 304 Not Modified 仍然意味着操作成功,但这取决于 API 的实现。 REST API.

中不应出现 1xx

最后,请记住,虽然每个状态代码都有其含义,但它们的意义仅限于 API 赋予它们的含义。我见过许多生产 API 甚至 return 200 秒的错误响应,而不是将错误状态下推到正文有效负载中。在泛化错误处理时要小心,以仍然允许调用者访问像这样的边缘情况的原始响应。

IANA 是负责管理所有标准化 HTTP operations, link-relations and status-codes 的实体。

因此,目前 IANA 注册了以下状态代码:

1XX

  • 100 继续
  • 101 种切换协议
  • 102 处理中
  • 103 个早期提示

2XX

  • 200 行
  • 201 人创建
  • 202 已接受
  • 203 Non-Authoritative 信息
  • 204 无内容
  • 205 重置内容
  • 206 部分内容
  • 207 Multi-Status
  • 208 已报告
  • 使用 226 个 IM

3XX

  • 300多项选择
  • 301 永久移动
  • 302 个找到
  • 303 见其他
  • 304 未修改
  • 305 见代理
  • 307 临时重定向
  • 308 永久重定向

4XX

  • 400 错误请求
  • 401 未经授权
  • 402 需要付款
  • 403 禁止
  • 404 不喜欢
  • 405 方法不允许
  • 406 不可接受
  • 407 需要代理身份验证
  • 408 请求超时
  • 409 冲突
  • 410 走了
  • 411 长度要求
  • 412 前提条件失败
  • 413 负载太大
  • 414 URI 太长
  • 415 不支持的媒体类型
  • 416 范围不可满足
  • 417 期望失败
  • 421 错误的请求
  • 422 个无法处理的实体
  • 423 已锁定
  • 424 依赖失败
  • 425 太早了
  • 426 需要升级
  • 428 需要先决条件
  • 429 个请求太多
  • 431 请求 Header 字段太大
  • 451 因法律原因不可用

5XX

  • 500 内部服务器错误
  • 501 未实施
  • 502 错误网关
  • 503 服务不可用
  • 504 网关超时
  • 505 不支持 HTTP 版本
  • 506 变体也在协商
  • 507 存储空间不足
  • 检测到 508 个环路
  • 510 未扩展
  • 需要 511 网络身份验证

您可能收到的任何其他状态代码都是 non-standardized 通用 HTTP 客户端可能无法理解的自定义。