gin框架之用swagger自动生成API文档
- 2020 年 3 月 13 日
- 筆記
这篇文章我们讲解swagger的使用
我们在工作当中经常需要用到接口文档,那么怎么写接口文档呢?又会遇到哪些坑呢?刚开始的时候,我们用word写文档,后来我们用markdown写文档。但是这些方式不利于维护,到后来我们发现,接口改了,文档还是原来的样子,不利于维护。而且每次我们都需要用postman工具进行接口开发测试,及其繁琐麻烦。我在无意当中发现了swagger,从此喜爱上用swagger写文档。他不接可以自动生成文档,而且可以直接用来做接口测试。
首先安装 swagger
go get -u github.com/swaggo/swag/cmd/swag go get -u github.com/swaggo/gin-swagger/swaggerFiles
1、入口文件引入swagger配置
package main import ( "ginLearn.com/controller" _ "ginLearn.com/docs" "github.com/gin-gonic/gin" "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles") // @title Gin swagger// @version 1.0// @description Gin swagger 示例项目 // @contact.name hanyun// @contact.url// @contact.email [email protected] // @license.name Apache 2.0// @license.url http://www.apache.org/licenses/LICENSE-2.0.html// @host localhost:8080func main() { router := gin.Default() router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) router.GET("/api/v1", controller.Index) router.Run()}
值得注意的一点是,已定义记着定义`_ "ginLearn.com/docs"`,要不swagger无法正常的解析页面,因为我是采用gomodule的方式,我定义的`module ginLearn.com`,各位可以把“ginLearn.com”替换为自己定义的。
swagger服务注释解释说明
// @title Gin swagger 展示在web端的title上// @version 1.0 定义接口的版本// @description Gin swagger 示例项目 首页展示// @securityDefinitions.apikey ApiKeyAuth API的认证方式// @in header 发送认证的方式// @name Authorization 后端获取认证值得方式 // @contact.name hanyun 联系人信命// @contact.url 联系人的个人首页地址// @contact.email [email protected] 联系人的邮箱 // @license.name Apache 2.0 文档采用的协议// @license.url http://www.apache.org/licenses/LICENSE-2.0.html 协议地址// @host localhost:8080 文档服务器的地址
2、在具体的方法上添加注释
package controller import ( "ginLearn.com/response" "github.com/gin-gonic/gin") // @Tags 首页// @Id 1// @Summary 获得首页数据// @Description | 项目 | 价格 | 数量 |// @Description | :-------- | --------:| :--: |// @Description | iPhone | 6000 元 | 5 |// @Description | iPad | 3800 元 | 12 |// @Description | iMac | 10000 元 | 234 |// @Produce json// @Security ApiKeyAuth// @Param id path int true "用户id"// @Param token header string true "用户token"// @Param name query string false "用户名"// @Param img formData file false "文件"// @Success 200 object response.Result "成功"// @Failure 400 object response.Result "失败"// @Router /api/v1/{id} [get]func Index(c *gin.Context) { c.JSON(4000, response.Result{})}

swagger接口注释解释说明
@Summary 是对该接口的一个描述@Id 是一个全局标识符,所有的接口文档中 Id 不能标注@Tags 是对接口的标注,同一个 tag 为一组,这样方便我们整理接口@Security ApiKeyAuth 表示这是一个需要认证才可以调用的接口,对应// @securityDefinitions.apikey ApiKeyAuth@Version 表明该接口的版本@Accept 表示该该请求的请求类型@Param 表示参数 分别有以下参数 参数名词 参数类型 数据类型 是否必须 注释 属性(可选参数),参数之间用空格隔开。@Success 表示请求成功后返回,它有以下参数 请求返回状态码,参数类型,数据类型,注释@Failure 请求失败后返回,参数同上@Router 该函数定义了请求路由并且包含路由的请求方式。
有时候我们写文档需要markdown表格,swagger的注释也支持markdown语法
// @Description | 项目 | 价格 | 数量 |// @Description | :-------- | --------:| :--: |// @Description | iPhone | 6000 元 | 5 |// @Description | iPad | 3800 元 | 12 |// @Description | iMac | 10000 元 | 234 |