golang组件swagger生成接口文档的方法
导读:本文共3268.5字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: swagger介绍Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。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函数上以注释的方式写下项目相关介绍信息。
packagemain//@title这里写标题//@version1.0//@description这里写描述信息//@termsOfServicehttp://swagger.io/terms///@contact.name这里写联系人信息//@contact.urlhttp://www.swagger.io/support//@contact.emailsupport@swagger.io//@license.nameApache2.0//@license.urlhttp://www.apache.org/licenses/LICENSE-2.0.html//@host这里写接口服务的host//@BasePath这里写basepathfuncmain(){ r:=gin.New() //liwenzhou.com... r.Run()}
在你代码中处理请求的接口函数(通常位于controller层)按如下方式写上注释:
//GetPostListHandler2升级版帖子列表接口//@Summary升级版帖子列表接口//@Description可按社区按时间或分数排序查询帖子列表接口//@Tags帖子相关接口//@Acceptapplication/json//@Produceapplication/json//@ParamAuthorizationheaderstringfalse"Bearer用户令牌"//@Paramobjectquerymodels.ParamPostListfalse"查询参数"//@SecurityApiKeyAuth//@Success200{object}_ResponsePostList//@Router/posts2[get]funcGetPostListHandler2(c*gin.Context){ //GET请求参数(querystring):/api/v1/posts2?page=1&size=10&order=time //初始化结构体时指定初始参数 p:=&models.ParamPostList{ Page:1, Size:10, Order:models.OrderTime, } iferr:=c.ShouldBindQuery(p);err!=nil{ zap.L().Error("GetPostListHandler2withinvalidparams",zap.Error(err)) ResponseError(c,CodeInvalidParam) return } data,err:=logic.GetPostListNew(p) //获取数据 iferr!=nil{ zap.L().Error("logic.GetPostList()failed",zap.Error(err)) ResponseError(c,CodeServerBusy) return } ResponseSuccess(c,data) //返回响应}
上面注释中参数类型使用了object
,models.ParamPostList
具体定义如下:
//bluebell/models/params.go//ParamPostList获取帖子列表querystring参数typeParamPostListstruct{ CommunityIDint64`json:"community_id"form:"community_id"`//可以为空 Pageint64`json:"page"form:"page"example:"1"`//页码 Sizeint64`json:"size"form:"size"example:"10"`//每页数据量 Orderstring`json:"order"form:"order"example:"score"`//排序依据}
响应数据类型也使用的object
,我个人习惯在controller层专门定义一个docs_models.go
文件来存储文档中使用的响应数据model。
//bluebell/controller/docs_models.go//_ResponsePostList帖子列表接口响应数据type_ResponsePostListstruct{ CodeResCode`json:"code"`//业务响应状态码 Messagestring`json:"message"`//提示信息 Data[]*models.ApiPostDetail`json:"data"`//数据}
第二步:生成接口文档数据
编写完注释后,使用以下命令安装swag工具:
goget-ugithub.com/swaggo/swag/cmd/swag
在项目根目录执行以下命令,使用swag工具生成接口文档数据。
swaginit
执行完上述命令后,如果你写的注释格式没问题,此时你的项目根目录下会多出一个docs
文件夹。
./docs├──docs.go├──swagger.json└──swagger.yaml
第三步:引入gin-swagger渲染文档数据
然后在项目代码中注册路由的地方按如下方式引入gin-swagger
相关内容:
import( //liwenzhou.com... _"bluebell/docs"//千万不要忘了导入把你上一步生成的docs gs"github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" "github.com/gin-gonic/gin")
注册swagger api相关路由
r.GET("/swagger/*any",gs.WrapHandler(swaggerFiles.Handler))
把你的项目程序运行起来,打开浏览器访问http://localhost:8080/swagger/index.html就能看到Swagger 2.0 Api文档了。
gin-swagger
同时还提供了DisablingWrapHandler
函数,方便我们通过设置某些环境变量来禁用Swagger。例如:
r.GET("/swagger/*any",gs.DisablingWrapHandler(swaggerFiles.Handler,"NAME_OF_ENV_VARIABLE"))
此时如果将环境变量NAME_OF_ENV_VARIABLE设置为任意值,则/swagger/*any将返回404响应,就像未指定路由时一样。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
golang组件swagger生成接口文档的方法的详细内容,希望对您有所帮助,信息来源于网络。