原文:赵侠客
一、前言目前大多互联网应用后端输出数据协议都是使用HTTP协议+JSON数据格式,HTTP协议里定义了一系列的状态码用来表明请求的状态,如常用的200表示请求正常,404表示请求的资源不存在。由于这些状态数量是有限的,无法完整的表达蜜桃成人网站入口业务中的各种状态,所以一般会在返回的JSON中增加业务状态码,如请求参数不对、用户状态禁用、用户名密码错误等。首先要搞清楚HTTP状态码和蜜桃成人网站入口业务状态的关系, 蜜桃成人网站入口看一个简单的HTTP协议报文:
GET http://localhost/test?id=2HTTP/1.1 200 Content-Type: application/jsonTransfer-Encoding: chunkedDate: Mon, 11 Mar 2024 06:42:39 GMTKeep-Alive: timeout=60Connection: keep-alive{ "code": "OK", "message": "OK", "data": { "id": 2, "userName": "test3@8531.cn" }}上面是一个简单的返回JSON数据的GET请求,其中响应头中的HTTP/1.1 200表明HTTP状态码是200,响应Body中的"code": "OK",是蜜桃成人网站入口业务里定义的状态码。
HTTP状态码HTTP 状态码是由 HTTP 协议定义的,用于表示 Web 服务器对请求的响应状态,每一个状态码都有特定的含义。虽然开发者可以自定义 HTTP 状态码,但并不推荐这样做,因为这可能会引起混淆或者与将来的 HTTP 规范相冲突。HTTP 状态码的值是三位数字,其中第一位数字表示响应类别,目前有以下五个类别:
1xx:表示请求已被接收,需要继续处理;2xx:表示请求已成功被服务器接收、理解、并接受;3xx:重定向,需要客户端采取进一步的操作才能完成请求;4xx:客户端错误,表示请求包含语法错误或者无法完成请求;5xx:服务器错误,服务器在处理请求的过程中发生了错误。HTTP状态码有非常多的作用:
服务器通知客户端:状态码用于指示网页请求的处理结果,帮助客户端了解发生了什么事件;便于程序处理:三位数字的状态码便于自动化程序和脚本解析和处理响应结果;便于用户理解:状态消息(状态码后面的文本)为用户提供关于响应的额外信息,帮助用户理解发生了什么问题;指导后续操作:例如,301状态码表示资源已永久移动到新地址,客户端应使用新地址重新发送请求;便于监控报警:通过监控分析nginx的接口请求日志,可以监控到服务异常从而发送报警消息。 业务状态码业务状态码是在 HTTP 状态码之上,由应用程序自身定义的,以反映特定业务逻辑的状态。这些状态码可以针对不同的操作不同的条件提供更详细更具体的信息,以便客户端能够更好地理解和处理业务流程,根据不同的状态码采取相应的处理措施。业务状态码的主要作用有:
方便与前端开发对接:前端在请求接口时通过判断非正常业务状态码,可以给用户对应的提示;方便对业务更进一步的监控:比如用户名密码错误用USER_PASSWORD_ERROR,可以分析日志,监控用户登录错误的请求,这个监控是HTTP状态码无法实现的;提升用户操作体验:良好的错误提示可以大大提升用户体验,有些系统用户操作失败全部提示“系统异常”,如果是“用户名不存在”、“用户密码错误”等提示用户体验就非常好了。 HTTP状态码和业务状态码的关系业务状态码应该是包含的HTTP状态码,在实际项目开发中很多开发者定义了很多业务状态码,但是所有接口请求都是返回http状态码为200,这是很不好的,应该是当HTTP状态码中能表达业务请求的状态时应该返回对应的HTTP状态码,HTTP状态码无法表达业务状态时才自定义业务状态码。蜜桃成人网站入口参考《Google API Design Guide (谷歌API设计指南)中文版》看看大厂业务状态码是如何定义的:下面是一个表格,其中包含google.rpc.Code中定义的所有gRPC错误代码及其原因的简短说明:
HTTPRPC描述200OK没有错误400INVALID_ARGUMENT客户端指定了无效的参数。 检查错误消息和错误详细信息以获取