kratos项目使用错误码介绍
说明
主要是http请求用到,因为http请求基本都是业务方直接调用的,grpc接口的话主要公司内部的服务之间使用,对外的http服务我们规定一下响应的结构以及错误码规范更加合适一些~
项目demo地址
https://gitee.com/huoyingwhw/kratos-err-code
先来看看常见的错误码格式
facebook规范
Facebook API 的错误 Code 设计,始终返回 200 http status code,但是在返回的结构中加上业务处理的错误:
{ "error": { "message": "Syntax error \"Field picture specified more than once. This is only possible before version 2.1\" at character 23: id,name,picture,picture", "type": "OAuthException", "code": 2500, "fbtrace_id": "xxxxxxxxxxx" } }
这个方式的缺点很明显:对于每一次请求,我们都要去解析 HTTP Body,从中解析出错误码和错误信息。实际上,大部分情况下,我们对于成功的请求,要么直接转发,要么直接解析到某个结构体中;对于失败的请求,我们也希望能够更直接地感知到请求失败。这种方式对性能会有一定的影响,对客户端不友好。所以不建议使用这种方式(当然现在也有很多公司选用这种方式,看实际情况了)。
微软的规范
微软 Bing API 的错误设计,会根据错误类型,返回合适的 HTTP Code,❗️并在 Body 中返回详尽的错误信息。
HTTP/1.1 400 Date: Thu, 01 Jun 2017 03:40:55 GMT Content-Length: 276 Connection: keep-alive Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/10.0 X-Content-Type-Options: nosniff
{ "SearchResponse": { "Version": "2.2", "Query": { "SearchTerms": "api error codes" }, "Errors": [ { "Code": 1001, "Message": "Required parameter is missing.", "Parameter": "SearchRequest.AppId", "HelpUrl": "http://msdn.microsoft.com/en-us/library/dd251042.aspx" } ] } }
但是,400这个错误码有着特定的含义(BadRequest:请求有问题),这里建议用一个比较特别的错误码(0 < code <= 600)—— 实际上整个4xx系列错误码在规范上都是客户端的错误,但是像404这样的错误常常也是因为服务端没有配置路由引起的,所以我们就在4xx系列中挑一些没有分配的code,比如450。
kratos官方文档中错误码的说明
https://go-kratos.dev/docs/component/errors/
自己在kratos中实现错误码
http响应返回结构控制
在api中定义错误码
项目中使用错误码
返回结构
正常的返回结果
有错误时的返回结构
~~~