乐趣区

关于后端:如何设计-API-接口实现统一格式返回

前后端接口交互

咱们都晓得,前端通常会通过后盾提供的接口来获取数据来实现前端页面的渲染,前端能够为 PC 端、M 端、小程序、APP 等。

在这废话就不多说了,这不是重点。

接口返回值约定

返回值标准

  • 设置返回的 HTTP 响应状态码;
  • 产生谬误时,需设置 Response Body 的错误码和形容信息;

正确返回

HTTP 响应状态码,设置成 200,Response Body 构造为返回的数据结构。

谬误返回

HTTP 响应状态码,不要设置成 200!需遵循 RFC 规范。

// Failure 谬误时返回构造
type Failure struct {
    Code    int    `json:"code"`    // 业务码
    Message string `json:"message"` // 形容信息
}

对立定义错误码

错误码标准

  • 对立在一个文件中定义错误码;
  • 错误码长度为 5 位;

第 1 位示意谬误是哪种级别?例如:1 为零碎级谬误,2 为业务模块谬误,可标记 9 种谬误级别。

第 2 位和第 3 位示意谬误是哪个模块?例如:01 为用户模块,02 为订单模块,可标记 99 个模块。

第 4 位和第 5 为示意具体是什么谬误?例如:01 为手机号不非法,02 为验证码输出谬误,可标记 99 个谬误。

Controller 层如何用?

正确返回

res := new(createResponse)
res.Id = 1
ctx.Payload(res)

谬误返回

c.AbortWithError(errno.NewError(
    http.StatusBadRequest,
    code.AdminCreateError,
    code.Text(code.AdminCreateError)).WithErr(err),
)

return 

具体代码实现

错误码

  • 错误码封装:https://github.com/xinliangno…
  • 定义错误码:https://github.com/xinliangno…

Controller

  • https://github.com/xinliangno…

总结

以上代码供大家参考,还有优化的空间,欢送大家应用并提出宝贵意见。

问题思考

  • 1、提供对外接口时,如何进行平安的签名验证?
  • 2、接口的幂等性如何设计?
  • 3、如何对立对返回数据进行敏感数据脱敏?
  • 4、如何设计接口日志,便于接口联调时疾速进行谬误定位?
  • 5、对于接口文档,如何进行主动生成?据说过 swagger 还不晓得如何应用?

如果你对以上问题又纳闷或拿捏不准,快来我的星球交换探讨吧,https://t.zsxq.com/iIUVVnA

退出移动版