gin 集成 swagger


前言

一个好的项目工程,必然离不开一个好的 API 文档,如果要自己编写 API 文档,维护起来比较困难,而且难以保证一致性,因此我们要自动生成在线接口文档。

swaggo

swagger 在 java 里面,是一个非常流行的 api 组件,他们维护了 go 版本的 swaggo
可以通过 Swagger 2.0 自动生成RESTful API 文档。

安装

下载代码

# 最新版本
go get -u github.com/swaggo/swag/cmd/swag

# 可以加上版本号
go get -u github.com/swaggo/swag/cmd/swag@v1.8.8

另外还需要下载两个包

# gin-swagger 中间件
go get github.com/swaggo/gin-swagger

# swagger 内置文件
go get github.com/swaggo/gin-swagger/swaggerFiles

安装到 $PATH

$GOPATHbin 目录下面没有 swag 文件,需要 go install

cd $GOPATH/pkg/mod/github.com/swaggo/swag@v1.8.8/cmd/swag
# 安装
go install

$GOROOT/bin 没有加入$PATH 中,需要将其可执行文件移动到 $GOBIN

mv $GOPATH/bin/swag /usr/local/go/bin

检查安装

出现这个情况,说明安装成功了

$ swag -v
swag version v1.8.8

gin 集成 swaggo

编写 api 注释

Swagger 中需要将相应的注释或注解编写到方法上,再利用生成器自动生成说明文件

gin-swagger 给出的范例:

// @Summary Add a new pet to the store
// @Description get string by ID
// @Accept  json
// @Produce  json
// @Param   some_id     path    int     true        "Some ID"
// @Success 200 {string} string	"ok"
// @Failure 400 {object} web.APIError "We need ID!!"
// @Failure 404 {object} web.APIError "Can not find ID"
// @Router /testapi/get-string-by-int/{some_id} [get]

参照 Swagger 的注解规范和范例去编写

// Register
// @Tags 用户管理
// @Summary 用户注册
// @Param username formData string true "username"
// @Param password formData string true "password"
// @Success 200 {string} json "{"code":"200","msg":"success","data":""}"
// @Router /register [post]
func Register(c *gin.Context) {}

路由

在完成了 api 注释的编写后,我们需要针对 swagger 新增初始化动作和对应的路由规则,才可以使用。在 routers/router.go 文件,增加 swagger 的路由:

func Router() *gin.Engine {
	r := gin.Default()
	
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))

	return r
}

生成

在项目目录下,执行 swag init

2022/12/04 15:27:52 Generate swagger docs....
2022/12/04 15:27:52 Generate general API Info, search dir:./
2022/12/04 15:27:52 create docs.go at  docs/docs.go
2022/12/04 15:27:52 create swagger.json at  docs/swagger.json
2022/12/04 15:27:52 create swagger.yaml at  docs/swagger.yaml

执行完成后会在项目根目录下生成 docs 目录,里面就是 api 文档相关的内容

docs/
├── docs.go
└── swagger
    ├── swagger.json
    └── swagger.yaml

可以看一下 json 的内容,其他的也是一样的,只是格式不同
在这里插入图片描述

查看文档

访问地址

http://127.0.0.1:8080/swagger/index.html

在这里插入图片描述

其他信息

main.go 方法上,可以增加一些其他信息,完善项目的信息

// @title Swagger Example API
// @version 1.0
// @description This is a sample server celler server.
// @termsOfService https://github.com/stream108

// @contact.name 一江溪水
// @contact.url https://github.com/stream1080
// @contact.email https://github.com/stream108

// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html

// @host 127.0.0.1:8080
// @BasePath /api/v1


Author: stream
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source stream !
  TOC