c++ api文档_Go语言使用swagger生成接口文档

swagger介绍

Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。Swagger包括自动文档,代码生成和测试用例生成。

在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效率和开发效率。可是编写接口文档历来都是令人头痛的,而且后续接口文档的维护也十分耗费精力。

最好是有一种方案能够既满足我们输出文档的需要又能随代码的变更自动更新,而Swagger正是那种能帮我们解决接口文档问题的工具。

这里以gin框架为例,使用gin-swagger库以使用Swagger 2.0自动生成RESTful API文档。

gin-swagger实战

想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤:

  1. 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。
  2. 使用swag工具扫描代码自动生成API接口文档数据
  3. 使用gin-swagger渲染在线接口文档页面

第一步:添加注释

在程序入口main函数上以注释的方式写下项目相关介绍信息。

package main// @title 这里写标题// @version 1.0// @description 这里写描述信息// @termsOfService http://swagger.io/terms/// @contact.name 这里写联系人信息// @contact.url http://www.swagger.io/support// @contact.email support@swagger.io// @license.name Apache 2.0// @license.url http://www.apache.org/licenses/LICENSE-2.0.html// @host 这里写接口服务的host// @BasePath 这里写base pathfunc main() { r := gin.New() // liwenzhou.com ... r.Run()}

在你代码中处理请求的接口函数(通常位于controller层)按如下方式写上注释:

// GetPostListHandler2 升级版帖子列表接口// @Summary 升级版帖子列表接口// @Description 可按社区按时间或分数排序查询帖子列表接口// @Tags 帖子相关接口// @Accept application/json// @Produce application/json// @Param Authorization header string false "Bearer 用户令牌"// @Param object query models.ParamPostList false "查询参数"// @Security ApiKeyAuth// @Success 200 {object} _ResponsePostList// @Router /posts2 [get]func GetPostListHandler2(c *gin.Context) { // GET请求参数(query string):/api/v1/posts2?page=1&size=10&order=time // 初始化结构体时指定初始参数 p := &models.ParamPostList{  Page:  1,  Size:  10,  Order: models.OrderTime, } if err := c.ShouldBindQuery(p); err != nil {  zap.L().Error("GetPostListHandler2 with invalid params", zap.Error(err))  ResponseError(c, CodeInvalidParam)  return } data, err := logic.GetPostListNew(p) // 获取数据 if err != 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 获取帖子列表query string参数type ParamPostList struct { CommunityID int64  `json:"community_id" form:"community_id"`   // 可以为空 Page        int64  `json:"page" form:"page" example:"1"`       // 页码 Size        int64  `json:"size" form:"size" example:"10"`      // 每页数据量 Order       string `json:"order" form:"order" example:"score"` // 排序依据}

响应数据类型也使用的object,我个人习惯在controller层专门定义一个docs_models.go文件来存储文档中使用的响应数据model。

// bluebell/controller/docs_models.go// _ResponsePostList 帖子列表接口响应数据type _ResponsePostList struct { Code    ResCode                 `json:"code"`    // 业务响应状态码 Message string                  `json:"message"` // 提示信息 Data    []*models.ApiPostDetail `json:"data"`    // 数据}

第二步:生成接口文档数据

编写完注释后,使用以下命令安装swag工具:

go get -u github.com/swaggo/swag/cmd/swag

在项目根目录执行以下命令,使用swag工具生成接口文档数据。

swag init

执行完上述命令后,如果你写的注释格式没问题,此时你的项目根目录下会多出一个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文档了。

9f76b68185cfc115bbd6100ae010fa3c.png

gin_swagger文档

gin-swagger同时还提供了DisablingWrapHandler函数,方便我们通过设置某些环境变量来禁用Swagger。例如:

r.GET("/swagger/*any", gs.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE"))

此时如果将环境变量NAME_OF_ENV_VARIABLE设置为任意值,则/swagger/*any将返回404响应,就像未指定路由时一样。


本文首发于我的个人博客:liwenzhou.com

更多更详细的go web开发实战视频课程,欢迎点击博客右上角图片了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值