如何正确使用 WEB 接口的 HTTP 状态码和业务状态码?

当设计和开发 Web 接口时,必然会和 HTTP 状态码与业务状态码这两个概念打交道。很多同学可能没有注意过这两个概念或者两者的区别,做得稀里糊涂,接下来详细讲解下二者的定义、区别和使用方法。

HTTP 状态码

HTTP 状态码是由 HTTP 协议定义的,用于表示 Web 服务器对请求的响应状态,每一个状态码都有特定的含义。虽然开发者可以自定义 HTTP 状态码,但并不推荐这样做,因为这可能会引起混淆或者与将来的 HTTP 规范相冲突。HTTP 状态码的值是三位数字,其中第一位数字表示响应类别,目前有以下五个类别:

  • 1xx:表示请求已被接收,需要继续处理。
  • 2xx:表示请求已成功被服务器接收、理解、并接受。
  • 3xx:重定向,需要客户端采取进一步的操作才能完成请求。
  • 4xx:客户端错误,表示请求包含语法错误或者无法完成请求。
  • 5xx:服务器错误,服务器在处理请求的过程中发生了错误。

HTTP 状态码是一种标准的约定,用于表示请求的处理情况。客户端在接收到这些状态码后,可以根据不同的状态码采取相应的处理措施。如果需要表达更具体的状态信息,通常的做法是在 HTTP 响应 body 中返回业务状态码,而不是自定义 HTTP 状态码。业务状态码是由应用或服务自己定义的,可以根据实际的业务需求进行定义,比如表示用户不存在、商品库存不足、支付失败等状态。

业务状态码

业务状态码是在 HTTP 状态码之上,由应用程序自身定义的,以反映特定业务逻辑的状态。这些状态码可以针对不同的操作不同的条件提供更详细更具体的信息,以便客户端能够更好地理解和处理业务流程,根据不同的状态码采取相应的处理措施。

业务状态码通常定义在响应的数据(Response Body)中,与其他响应数据一起返回给客户端。拿登录接口举个例子,登录成功后,使用 HTTP 状态码200,业务状态码1(也可以约定其他的值)来表示,响应数据格式如下:

复制代码
 {"code":1, "data":null,"msg":""}

如果账号或者密码不正确,使用 HTTP 状态码200,业务状态码1001(业务状态码可以根据自己或团队整体情况而定)来表示,响应数据格式如下:

复制代码
 {"code":1001, "data":null,"msg":"账号或密码错误"}

业务状态码是需要根据具体应用程序的需求和上下文定义的,可以根据业务逻辑和操作类型自定义状态码的值。另外,针对同一个应用来说,业务状态码类型要保持一致,统一使用整型或统一使用字符串,建议统一使用整型。

小结

HTTP 状态码用于表示 Web 服务器对请求的处理情况,是 HTTP 协议规定的一种标准表示方式。而业务状态码是为了满足应用程序特定的业务逻辑需求,提供更具体和细粒度的响应状态。在设计接口时,我们应根据情况综合考虑使用HTTP状态码和业务状态码,以提供清晰、一致和易理解的接口响应。

相关推荐
少寒1 分钟前
深入理解JavaScript Promise:异步编程的基石
前端·javascript
tecwlcvi3234 分钟前
安卓版谷歌地图,Google地图高清版,谷歌地球,谷歌翻译,谷歌(Chrome)浏览器,手机版Edge,浏览器等安卓版浏览器下载
前端·chrome·edge
czlczl200209254 分钟前
SpringBoot中web请求路径匹配的两种风格
java·前端·spring boot
bigdata-rookie7 分钟前
Scala 泛型
开发语言·后端·scala
开心猴爷8 分钟前
HTTPS Everywhere 时代的抓包挑战,从加密流量解析到底层数据流捕获的全流程方案
后端
2022.11.7始学前端11 分钟前
n8n第四节 表单触发器:让问卷提交自动触发企微消息推送
java·前端·数据库·n8n
m0_7400437312 分钟前
Axios 请求示例 res.data.data
前端·javascript·vue.js
程序员小寒13 分钟前
超详细的 EventLoop 解读及模拟实现
前端·javascript
卓码软件测评15 分钟前
【第三方CNAS软件测试机构:Gatling中的资源监控_实时收集服务器CPU、内存、磁盘I/O和网络指标】
后端·测试工具·测试用例·scala·压力测试
冴羽15 分钟前
太好看了!3 个动漫变真人 Nano Banana Pro 提示词
前端·人工智能·aigc