安装swagger
go get -v -u github.com/swaggo/swag/cmd/swag cd $GOPATH/src/github.com/swaggo/swag/cmd/swag go install #将其可执行文件移动到 $GOBIN 下 swag -v
安装 gin-swagger
go get -v -u github.com/swaggo/gin-swagger go get -v -u github.com/swaggo/gin-swagger/swaggerFiles
编写API注释
#我们可以参照 Swagger 的注解规范和范例去编写 // @Summary 新增文章标签 // @Produce json // @Param name query string true "Name" // @Param state query int false "State" // @Param created_by query int false "CreatedBy" // @Success 200 {string} json "{"code":200,"data":{},"msg":"ok"}" // @Router /api/v1/tags [post] func AddTag(c *gin.Context) {} // @Summary 修改文章标签 // @Produce json // @Param id param int true "ID" // @Param name query string true "ID" // @Param state query int false "State" // @Param modified_by query string true "ModifiedBy" // @Success 200 {string} json "{"code":200,"data":{},"msg":"ok"}" // @Router /api/v1/tags/{id} [put] func EditTag(c *gin.Context) {}
编写说明
服务信息
// @title swagger使用例子 // @version 1.0 // @description swagger 入门使用例子 func main(){ r := gin.Default() r.GET("/check", connectCheck) ... }
api信息
type Response struct{ Code uint32 `json:"code"` Message uint32 `json:"message"` Data interface{} `json:"data"` } type ResponseError struct{ Code uint32 `json:"code"` Message uint32 `json:"message"` } // @summary 服务连接校验 --> 接口简介 // @Description 服务初始连接测试 --> 接口描述 // @Accept json --> 接收类型 // @Produce json --> 返回类型 // Success 200 {object} Response --> 成功后返回数据结构 // Failure 400 {object} ResponseError --> 失败后返回数据结构 // Failure 404 {object} ResponseError // Failure 500 {object} ResponseError // @Router /check [get] --> 路由地址及请求方法 func connectCheck(c *gin.Context){ res := Response{ Code: 1001, Message: "OK", Data: "connect success !!!"} c.JSON(http.StatusOK, res) }
API 注释定义
#summary 简介 // @Summary 简介 #accept 可使用的MIME类型 // @Accept json #produce 可生成的MIME类型,既响应返回类型 // @Produce json // @Produce png 可设置多条 #header 请求头字段 格式: [ 状态码 {数据类型} 数据类型 备注 ] // @Header 200 {string} Token "qwerty" #param 参数 格式: [ 参数名称 参数类型 数据类型 是否必须 备注 限制属性 ] 空格分割 // @Params userId query string true "用户id" minlength(3) maxlength(100) // @Params status query integer false "状态:0 1" Enums(0, 1) defualt(0) #success 成功响应 格式: [ 状态码 {数据类型} 数据类型 备注 ] // @Success 200 {object} Response "返回空对象" #failure 失败响应 格式: [ 状态码 {数据类型} 数据类型 备注 ] // @Failure 400 {object} ResponseError #router 路由路径 // @Router /user/{userId} [get] #参数可用类型 [param type] query path header body formDate 值可以是 formData、query、path、body、header,formData 表示是 post 请求的数据,query 表示带在 url 之后的参数,path 表示请求路径上得参数,例如上面例子里面的 key,body 表示是一个 raw 数据请求,header 表示带在 header 信息中得参数 #数据可用类型 [data type] string(string) integer(int, uint, uint32, uint64) boolean(bool) user defined struct #可配置属性 defualt * 参数默认值 maximum number 最大值 mininum number 最小值 maxLength integer 最大长度 minLength integer 最小长度 enums [*] 枚举类型 format string collectionFormat string query数组分割模式
生成
我们进入到 gin-blog 的项目根目录中,执行初始化命令
swag init
添加路由
在docs目录下新建route.go文件
package docs import ( "github.com/gin-gonic/gin" "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" ) func Routers(e *gin.Engine) { e.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) }
将路由添加到系统路由中
检查中间件
检查中间件是否进行鉴权操作,如果有的话设置跳过鉴权
将请求中的.html .js .css文件设置跳过
这里给一个我自己用的方法
重启服务查看
重启服务查看结果
http://域名:端口/swagger/index.html