Api自定义code 
                                                    
                        
                    
                    
  
                    
                    Api自定义code
接口自定义 code,msg
一般情况下,我们和前端联调接口的时候,前端只需要判断成功状态 code == successCode 走正向流程, 异常流程只判断 code != successCode, 把后端返回的 msg 直接提示给用户。
这样做的好处就是用户就能知道接下来怎么做,是根据提示操作,完成正向流程,还是直接退出放弃,用户都可以决定,而不用再反馈给客服-运营-产品-技术, 技术再找日志,麻烦的一批。
当只有正向、异常流程情况下,一般只需要 successCode、failCode 就够了。
但是有时候会有多分支流程,满足A条件执行A1流程,满足B条件执行B1流程… , 这个时候就需要自定义code了,前端也就需要用特殊的 code 写不同的逻辑了
定义
标准库 Error 是个接口,且只有一个方法
type error interface {
 Error() string
}
那我们自定义 error 只要实现这一个方式就可以
新建 pkg/appcode/error.go,
type AppError struct {
     Code int `json:"code"` 
     Msg string `json:"msg"`
}
func New(code int, msg string) *AppError {
     return &AppError{code, msg}
}
func (a AppError) Error () string  {
     return fmt.Sprintf("code %d msg:%s", a.Code, a.Msg)
}
这个新建方法没写成 func NewAppError 而写成 func New 就是觉得这么写简洁。 
使用
原来的 api.NewResponse:
func NewResponse(c *gin.Context, err error, data interface{}) {
 res := &Response{Data: data} 
 if err != nil { 
     res.Code = -1 
     res.Message = err.Error() 
 } else { 
     res.Code = SuccessCode 
    res.Message = "success" 
 } 
  c.JSON(http.StatusOK, res)
}
改造一下:
func NewResponse(c *gin.Context, err error, data interface{}) {
   res := &Response{Data: data}
   switch typed := err.(type) {
   case appcode.AppError:
      res.Code = typed.Code
      res.Message = typed.Msg
   default:
      if typed != nil {
         res.Code = -1
           res.Message = err.Error()
      } else {
         res.Code = SuccessCode
          res.Message = "success"
      }
  }
  c.JSON(http.StatusOK, res)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           skyLee 的个人博客
 skyLee 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: