前言
制定规范的错误状态码,可以方便前后端人员直接的定位问题,并给用户解释。
返回信息
在客户端发送请求之后,服务端会进行响应,一般是由三部分组成:
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 status
type Failure struct {
Code int `json:"code"`
Message string `json:"message"`
}
const (
// error status code
UserParamErrorCode = 201011
UserCreateErrorCode = 201012
UserLoginErrorCode = 201013
UserTokenErrorCode = 201014
UserOtherErrorCode = 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 会被收集到日志中。