前言
制定规范的错误状态码,可以方便前后端人员直接的定位问题,并给用户解释。
返回信息
在客户端发送请求之后,服务端会进行响应,一般是由三部分组成:
HTTP 状态码
// http 状态码,根据不同情况返回不同的状态码,比如:// http.StatusInternalServerError 500// http.StatusUnauthorized 401// http.StatusBadRequest 400// ...
Response Header
// json 格式Content-Type:"application/json; charset=utf-8"// 链路 ID,便于问题定位Trace-Id:"a91bd86c16376238e7b4"
Response Body
| 参数 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 |
| message | string | 描述信息 |
返回信息定义
业务码规则
| 201 | 01 | 0 | 01 |
|---|---|---|---|
| HTTP Status Code | 模块顺序 | 0: error 1: success | 具体业务码 |
- HTTP Status Code:由 http status code 组成
- 模块级别:2 位数进行表示,比如 01 为用户模块;02 为订单模块。
- 异常级别:1 位数进行表示,0 为异常信息,1 为预期信息。
- 具体业务码: 2 位数进行表示, 比如 001。
示例
package statustype Failure struct {Code int `json:"code"`Message string `json:"message"`}const (// error status codeUserParamErrorCode = 201011UserCreateErrorCode = 201012UserLoginErrorCode = 201013UserTokenErrorCode = 201014UserOtherErrorCode = 201010)var codeText = map[int]string{UserParamErrorCode: "User request parameter is wrong, please try again",UserCreateErrorCode: "User creation failed. Please try again",UserLoginErrorCode: "User login failed, please login again",UserTokenErrorCode: "Your account is private. Access token been expired",UserOtherErrorCode: "An unknown error has occurred",}func GetStatusMessage(code int) string {return statusMessage[code]}
错误返回
错误返回是指当发生错误时,在 controller 层对用户的错误返回,比如用户提交的参数信息有误。
// 参数信息有误 设置 Err。c.AbortWithError(errno.NewError(http.StatusBadRequest,code.ParamBindError,code.GetStatusMessage(code.UserParamErrorCode)).WithErr(err),)return// WithErr 会被收集到日志中。
