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 客户端可能无法理解的自定义。
我正在尝试简化 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 客户端可能无法理解的自定义。