前言
在正式动工之前,对接口响应结构进行统一封装,好的规范能使项目更易于维护!
目标
- 定义常用的响应状态
- 接口响应结构统一封装
定义常用的响应状态
新增ApiState.go
package ApiState
const (
SUCCESS = 200 // 正常响应
ERROR = 500 // 服务器异常
ERROR_AUTH = 401 // 拒绝访问
)
接口响应结构统一封装
新增ResponseView.go
package ApiState
import (
"fmt"
"github.com/gin-gonic/gin"
)
type ResponseResult struct {
Result bool // 是否成功
Msg string // 错误描述
Code int // 错误码
Data interface{} // 返回数据
}
// 参数错误响应
func ArgErrApiResult(c *gin.Context, argName string) {
c.JSON(SUCCESS, &ResponseResult{
Result: false,
Msg: fmt.Sprintf("参数【%s】有误", argName),
Code: SUCCESS,
Data: nil,
})
}
// 成功响应,带msg形参,msg为空设为success
func ResponseSuccessMsg(c *gin.Context, msg string, data interface{}) {
if msg == "" {
msg = "success"
}
c.JSON(SUCCESS, &ResponseResult{
Result: true,
Msg: msg,
Code: SUCCESS,
Data: data,
})
}
// 成功响应,不带msg形参,默认success
func ResponseSuccess(c *gin.Context, data interface{}) {
c.JSON(SUCCESS, &ResponseResult{
Result: true,
Msg: "success",
Code: SUCCESS,
Data: data,
})
}
// 模板响应
func ResponseHtml(c *gin.Context, path string, data interface{}) {
c.HTML(SUCCESS, path, data)
}
// 普通业务异常
func BusinessErrApiResult(c *gin.Context, msg string) {
c.JSON(SUCCESS, &ResponseResult{
Result: false,
Msg: msg,
Code: SUCCESS,
Data: nil,
})
}
使用
HomeController调整
package HomeControler
import (
"github.com/gin-gonic/gin"
"golang-blog/Model/ViewModel/ApiState"
)
func Index(c *gin.Context) {
ApiState.ResponseSuccess(c, "hello world")
}
func Hi(c *gin.Context) {
// 获取参数name
name := c.Query("name")
// 参数name为空响应参数错误提示
if name == "" {
ApiState.ArgErrApiResult(c, "name")
return
}
ApiState.ResponseSuccess(c, "Hi")
}