前言

制定规范的错误状态码,可以方便前后端人员直接的定位问题,并给用户解释。

返回信息

在客户端发送请求之后,服务端会进行响应,一般是由三部分组成:

HTTP 状态码

status.go

  1. // http 状态码,根据不同情况返回不同的状态码,比如:
  2. // http.StatusInternalServerError 500
  3. // http.StatusUnauthorized 401
  4. // http.StatusBadRequest 400
  5. // ...

Response Header

  1. // json 格式
  2. Content-Type:"application/json; charset=utf-8"
  3. // 链路 ID,便于问题定位
  4. Trace-Id:"a91bd86c16376238e7b4"

Response Body

response.go

参数 类型 说明
code int 错误码
message string 描述信息

返回信息定义

错误码需在 status 包中进行定义。

业务码规则

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。

示例

  1. package status
  2. type Failure struct {
  3. Code int `json:"code"`
  4. Message string `json:"message"`
  5. }
  6. const (
  7. // error status code
  8. UserParamErrorCode = 201011
  9. UserCreateErrorCode = 201012
  10. UserLoginErrorCode = 201013
  11. UserTokenErrorCode = 201014
  12. UserOtherErrorCode = 201010
  13. )
  14. var codeText = map[int]string{
  15. UserParamErrorCode: "User request parameter is wrong, please try again",
  16. UserCreateErrorCode: "User creation failed. Please try again",
  17. UserLoginErrorCode: "User login failed, please login again",
  18. UserTokenErrorCode: "Your account is private. Access token been expired",
  19. UserOtherErrorCode: "An unknown error has occurred",
  20. }
  21. func GetStatusMessage(code int) string {
  22. return statusMessage[code]
  23. }

错误返回

错误返回是指当发生错误时,在 controller 层对用户的错误返回,比如用户提交的参数信息有误。

  1. // 参数信息有误 设置 Err。
  2. c.AbortWithError(errno.NewError(
  3. http.StatusBadRequest,
  4. code.ParamBindError,
  5. code.GetStatusMessage(code.UserParamErrorCode)).WithErr(err),
  6. )
  7. return
  8. // WithErr 会被收集到日志中。