错误码规范
大约 3 分钟componenterrcodehttpgrpc
错误码的核心特性
sponge 创建的服务提供完善的错误码体系,支持 HTTP 和 gRPC 两种协议,具有以下核心特性:
双协议支持
- 同时支持 HTTP 和 gRPC 错误码体系
- 每种协议都包含系统级和业务级错误码
标准协议转换
- HTTP 系统级错误码根据需要转换为标准 HTTP 状态码
- gRPC 系统级错误码根据需要转换为标准 gRPC 状态码
高级功能
- 支持自定义错误信息重写
- 支持 gRPC 错误码到 HTTP 错误码的智能映射
错误码规范
错误码组成结构
错误码由 6 位数字组成,第一位表示错误类型,第二位到第四位表示错误模块或表格编号,第五位到第六位表示 API 序列号,如下表格所示:
第一位数字 | 第二到第四位数字 | 最后两位数字 |
---|---|---|
1 表示 http 系统级错误码2 表示 http 业务级错误码3 表示 gRPC 系统级错误码4 表示 gRPC 业务级错误码 | 数据表或模块编号, 范围 1~999 | API 序列号, 范围 1~99 |
服务类型 | 系统级错误码范围 | 业务级错误码范围 |
---|---|---|
http | 100000 ~ 199999 | 200000 ~ 299999 |
grpc | 300000 ~ 399999 | 400000 ~ 499999 |
HTTP 服务错误码使用示例
基于 SQL 创建 Web 服务
,错误码使用示例:
import "github.com/go-dev-frame/sponge/pkg/gin/response"
// 返回错误码,其中标准 http 状态码始终为 200
response.Error(c, ecode.InvalidParams)
// 返回错误码,并重写错误信息,其中标准 http 状态码始终为 200
response.Error(c, ecode.InvalidParams.RewriteMsg("custom error message"))
// 将错误代码转换为标准 http 状态代码
response.Out(c, ecode.InvalidParams)
// 将错误代码转换为标准 http 状态代码,并重写错误信息
response.Out(c, ecode.InvalidParams.RewriteMsg("custom error message"))
基于 Protobuf 创建 Web 服务
,错误码使用示例:
// 返回错误码,其中标准 http 状态码始终为 200
return nil, ecode.InvalidParams.Err()
// 返回错误码,并重写错误信息,其中标准 http 状态码始终为 200
return nil, ecode.InvalidParams.Err("custom error message")
// 将错误代码转换为标准 http 状态代码
return nil, ecode.InvalidParams.ErrToHTTP()
// 将错误代码转换为标准 http 状态代码,并重写错误信息
return nil, ecode.InvalidParams.ErrToHTTP("custom error message")
gRPC 服务错误码使用示例
基于 SQL/Protobuf 创建 Web 服务
,错误码使用示例:
// 返回错误码
return nil, ecode.StatusInvalidParams.Err()
// 返回错误码,并重写错误信息
return nil, ecode.StatusInvalidParams.Err("custom error message")
// 将错误代码转换为标准 grpc 状态代码
return nil, ecode.StatusInvalidParams.ToRPCErr()
// 将错误代码转换为标准 grpc 状态代码,并重写错误信息
return nil, ecode.StatusInvalidParams.ToRPCErr("custom error message")
在 gRPC 网关调用 gRPC 服务,错误码使用示例:
// 将错误代码转换为标准 http 状态代码
return nil, ecode.StatusInvalidParams.ErrToHTTP()
// 将错误代码转换为标准 http 状态代码,并重写错误信息
return nil, ecode.StatusInvalidParams.ErrToHTTP("custom error message")