如何正确使用 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状态码和业务状态码,以提供清晰、一致和易理解的接口响应。

相关推荐
会编程的土豆3 小时前
网络基础核心笔记(HTTP、TCP、前后端通信)
网络·笔记·http
新酱爱学习3 小时前
手搓 10 个 Skill 踩出来的坑,我做成了一套工程化工具链
前端·人工智能·agent
怕浪猫4 小时前
Electron 开发实战(八):多媒体处理全解|音视频播放、录屏、FFmpeg 实战
前端·javascript·electron
恋猫de小郭4 小时前
一个 Linux 调度器优化,让 Android 多耗 20% 的电,传音工程师如何发现问题?
android·前端·ios
我是一颗柠檬4 小时前
【Redis】哨兵机制Day10
数据库·redis·后端·缓存
kyriewen114 小时前
开源|Image Harvest v1.0.5:AI 智能标签 + Eagle 导出,设计师和开发者的图片工作流神器
前端·javascript·人工智能
学编程的小程4 小时前
配置范式演进:XML、JavaConfig 与 Spring Boot
xml·spring boot·后端
步十人4 小时前
【Vue】认识单文件组件与模板语法
前端·javascript·vue.js
AIFQuant4 小时前
贵金属投资 APP 开发:实时报价、图表、提醒与交易数据全链路
开发语言·前端·websocket·金融·web app
爱吃羊的老虎4 小时前
【JAVA】python转java:Spring Boot 如何处理 Web 请求
java·前端·spring boot·http