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中定义错误码

 

项目中使用错误码

返回结构

正常的返回结果

有错误时的返回结构

~~~

 

 

posted on 2023-02-09 17:13  江湖乄夜雨  阅读(376)  评论(0编辑  收藏  举报