安装swagger
go install github.com/swaggo/swag/cmd/swag@latest
验证swag版本
swag -v
写入注解
| 注解 | 描述 |
|---|---|
| @Summary | 摘要 |
| @Produce | API 可以产生的 MIME 类型的列表,MIME 类型你可以简单的理解为响应类型,例如:json、xml、html 等等 |
| @Param | 参数格式,从左到右分别为:参数名、入参类型、数据类型、是否必填、注释 |
| @Success | 响应成功,从左到右分别为:状态码、参数类型、数据类型、注释 |
| @Failure | 响应失败,从左到右分别为:状态码、参数类型、数据类型、注释 |
| @Router | 路由,从左到右分别为:路由地址,HTTP 方法 |
// @Summary 获取多个标签
// @Produce json
// @Param name query string false "标签名称" maxlength(100)
// @Param state query int false "状态" Enums(0, 1) default(1)
// @Param page query int false "页码"
// @Param page_size query int false "每页数量"
// @Param Authorization header string true "Bearer Token"
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags [get]
func (t Tag) List(c *gin.Context) {
param := service.TagListRequest{}
response := app.NewResponse(c)
valid, errs := app.BindAndValid(c, ¶m)
if !valid {
global.Logger.Errorf(c, "app.BindAndValid errs: %v", errs)
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
return
}
svc := service.New(c.Request.Context())
pager := app.Pager{Page: app.GetPage(c), PageSize: app.GetPageSize(c)}
totalRows, err := svc.CountTag(&service.CountTagRequest{Name: param.Name, State: param.State})
if err != nil {
global.Logger.Errorf(c, "svc.CountTag err: %v", err)
response.ToErrorResponse(errcode.ErrorCountTagFail)
return
}
tags, err := svc.GetTagList(¶m, &pager)
if err != nil {
global.Logger.Errorf(c, "svc.GetTagList err: %v", err)
response.ToErrorResponse(errcode.ErrorGetTagListFail)
return
}
response.ToResponseList(tags, totalRows)
return
}
生成swagger
在完成接口注释后,回到项目根目录,执行:
swag init
在执行完命令后,根目录docs文件夹下会生成docs.go,swagger.json,swagger.yaml三个文件.
路由配置
在routers中进行默认初始化和注册对应路由,在router.go中配置如下代码:
import (
...
_ "github.com/go-programming-tour-book/blog-service/docs"
swaggerfiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
func NewRouter() *gin.Engine {
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
// 设置 Swagger文档地址
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler,))
...
return r
}
重启服务后,本地就可以看到swagger文档地址 http://127.0.0.1:8000/swagger/index.html