golang gin 使用swagger生成接口文档
有时候一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率。本文将介绍如何使用swagger生成接口文档。
swagger介绍
Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。Swagger包括自动文档,代码生成和测试用例生成。
在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效率和开发效率。可是编写接口文档历来都是令人头痛的,而且后续接口文档的维护也十分耗费精力。
最好是有一种方案能够既满足我们输出文档的需要又能随代码的变更自动更新,而Swagger正是那种能帮我们解决接口文档问题的工具。
这里以gin框架为例,使用gin-swagger库以使用Swagger 2.0自动生成RESTful API文档。
gin-swagger实战
想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤:
- 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。
- 使用swag工具扫描代码自动生成API接口文档数据
- 使用gin-swagger渲染在线接口文档页面
添加注释
在程序入口main函数上以注释的方式写下项目相关介绍信息。
1 | package main |
在你代码中处理请求的接口函数(通常位于controller层)按如下方式写上注释:
1 | // GetPostListHandler2 升级版帖子列表接口 |
生成接口文档数据
编写完注释后,使用以下命令安装swag工具:
1 | go install github.com/swaggo/swag/cmd/swag@latest |
在项目根目录执行以下命令,使用swag工具生成接口文档数据。
1 | swag init -g main.go |
执行完上述命令后,如果你写的注释格式没问题,此时你的项目根目录下会多出一个docs文件夹。
./docs
├── docs.go
├── swagger.json
└── swagger.yaml
引入gin-swagger渲染文档数据
安装依赖包
1 | go get package "github.com/swaggo/files" |
然后在项目代码中注册路由的地方按如下方式引入gin-swagger相关内容:
1 | import ( |
注册swagger api相关路由
1 |
|
把你的项目程序运行起来,打开浏览器访问http://localhost:8080/swagger/index.html 就能看到Swagger 2.0 Api文档了。
gin-swagger同时还提供了DisablingWrapHandler函数,方便我们通过设置某些环境变量来禁用Swagger。例如:
1 | r.GET("/swagger/*any", gs.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE")) |
此时如果将环境变量NAME_OF_ENV_VARIABLE设置为任意值,则/swagger/*any将返回404响应,就像未指定路由时一样。
这对一些生产环境很有必要,在前后端分离的项目中,大多数api只是给自家客户端使用,不需要公众提供api接口,此时如果包括一份完整的swagger文档,可能会为黑产提供帮助。在此情况下最后在开发,测试环境开发swagger文档,而对生产环境应该禁止swagger文档。此时即可用到这一特性。
访问swagger文档
golang gin 使用swagger生成接口文档