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 path
func 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)// 返回响应
}

上面注释中参数类型使用了objectmodels.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"  // 千万不要忘了导入把你上一步生成的docsgs "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响应,就像未指定路由时一样。

参考文章:

https://www.fansimao.com/937539.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT ui界面修改后不更新

ui界面修改后不更新 在ui界面重新修改布局后,debug模式下发现ui界面没有更新 尝试1:qmake rebuild发现ui界面都没有更新 尝试2: 删除build-XXXX-Desktop_Qt_5_12_6_MSVC2017_64bit-Debug 重新qmake rebuild 界面没有更新 尝试3&…

新能源、新智造、新技术、新未来2024上海国际氢能产业展览会7月魔都开展!

氢能作为一种来源丰富、绿色低碳、应用广泛的二次能源,是实现可再生能源大规模消纳,电网大规模调峰和跨季节、跨地域储能的重要途径,对构建我国新型电力系统和实现碳达峰碳中和目标具有重要意义。 为落实国家关于发展氢能产业的决策部署&…

某顺cookie逆向

目标网站:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 这个网站是对cookie进行反爬虫的,可以看到cookie中有一个加密参数v 二、分析参数 可以使用hook方法,来hook住cookie中v生成的位置,可以直接在控制台中输入hook函数 (function () {use strict;v…

编译原理2.3习题 语法制导分析[C++]

图源:文心一言 编译原理习题整理~🥝🥝 作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡 第1版:自…

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引,却又惋惜于无法将其永久保存?现在,有了我们【媒体梦工厂】,这一遗憾将成为过去,这个软件可以提取视频中的某一帧保存为图片,为你留住那些稍纵即逝的美好。 所需工…

LVDS 两通道总线驱动器——MS2652D

产品简述 MS2652D 是一款低功耗、高数据传输率的两通道 CMOS 差分 LVDS 信号总线驱动芯片,其支持的数据接收率超过 155.5 Mbps (77.7 MHz) 。 MS2652D 将接 TTL/CMOS 输入信号,转换成低压 (425mV) 的差分输出信 号。芯片驱动器还支持三态输出…

PageHelper学习使用

基于mybatis源码和PageHelper源码进行的测试 版本 mybatis3.5.0&#xff0c;pageHelper6.0.0 测试用例 依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version> &…

怎么实现抖音引导到微信小程序丨数灵通教你

抖音是一款热门的社交媒体应用&#xff0c;许多用户希望能够通过抖音跳转到微信小程序&#xff0c;以实现更多的引流和推广效果。以下是关于抖音跳转到微信小程序的科普信息&#xff1a; 1.优势和用途&#xff1a;通过抖音跳转到微信小程序可以带来多个优势和用途&#xff1a; …

Redis核心技术与实战【学习笔记】 - 1.Redis为什么高性能

作为键值数据库&#xff0c;Redis 的应用非常广泛&#xff0c;如果你是后端工程师&#xff0c;我猜你出去面试&#xff0c;八成都会被问到与它相关的性能问题。比如说&#xff0c;为了保证数据的可靠性&#xff0c;Redis 需要在磁盘上读写 AOF 和 RDB&#xff0c;但在高并发场景…

CSS3基础知识总结

目录 一、CSS3 边框 1.border-radius&#xff1a;圆角边框 2.box-shadow&#xff1a;添加阴影 3.border-image&#xff1a;图片边框 二、CSS3 渐变 1.线性渐变(Linear Gradients) a.由上到下&#xff08;默认&#xff09; b.从左到右 c.对角 d.使用角度 2.径向渐变(…

在 EggJS 中实现 Redis 上锁

配置环境 下载 Redis Windows 访问 https://github.com/microsoftarchive/redis/releases 选择版本进行下载 - 勾选 [配置到环境变量] - 无脑下一步并安装 命令行执行&#xff1a;redis-cli -v 查看已安装的 Redis 版本&#xff0c;能成功查看就表示安装成功啦~ Mac brew i…

【项目日记(四)】第一层: 线程缓存的具体实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

PHP“引用”漏洞

今日例题&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); include("flag.php"); class just4fun { var $enter; var $secret; } if (isset($_GET[pass])) { $pass $_GET[pass]; $passstr_replace(*,\*,$pass); } $o unser…

Redis(秒杀活动、持久化之RDB、AOF)

目录 秒杀活动 一、测压工具jmete的使用 二、java实现秒杀活动 1、myseckillcontroller 2、先启动pos请求添加商品&#xff0c;再启动jmeter进行压测 Redis持久化 一 、Redis持久化之RDB 1.RDB是什么 2. 备份是如何执行的 3.Fork 4. RDB持久化流程 5. dump.rdb文件 6…

自定义错误页面在Spring Boot中的实现

引言 在SpringBoot中&#xff0c;常用的异常处理有两种&#xff1a;一种是 BasicErrorController&#xff0c;另一种是 ControllerAdvice。BasicErrorController 用于处理非Controller抛出的异常&#xff0c;而ControllerAdvice 用于处理Controller抛出的异常&#xff0c;对于…

安全基础~通用漏洞2

文章目录 知识补充盲注Boolean盲注延时盲注报错注入二次注入 知识补充 盲注常用 if(条件,5,0) #条件成立 返回5 反之 返回0 left(database(),1)&#xff0c;database() #left(a,b)从左侧截取a的前b位 盲注 盲注就是在注入过程中&#xff0c;获取的数据不能回显至前端页面。 …

图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解

【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解前言EfficientNet_V2讲解自适应正则化的渐进学习(Progressive Learning with adaptive Regul…

计算机毕业设计 | SpringBoot+vue养老院管理系统 社区老人健康管理(附源码)

1&#xff0c;绪论 对于目前的中国来讲&#xff0c;人口老龄化日益严重&#xff0c;目前最新统计数据表明&#xff0c;60岁以上老人所占的人口比例已达到接近20%。这给我们国家带来了严重的养老压力&#xff0c;同时也严重削弱了我们人力大国的人力优势。对于这些老年人来讲&a…

行测-判断:4.逻辑判断

行测-判断&#xff1a;4.逻辑判断 1. 翻译推理&#xff08;命题&#xff0c;长句-> 短句&#xff09; 解题思维&#xff1a; 先翻译再推理 1.1 前 ➡ 后 典型关联词&#xff1a; 如果。。那么。。 注意Keywords&#xff1a; 只要&#xff0c;就&#xff0c;如果 逆否等价…

IaC基础设施即代码:使用Terraform 连接huaweicloud华为云 并创建后端OBS

目录 一、实验 1.环境 2.huaweicloud华为云创建用户 3.Windows使用Terraform 连接 huaweicloud 4.Windows给Terraform项目添加huaweicloud华为云OBS &#xff08;实现代码与资源分离&#xff09; 二、问题 1. Windows terraform 初始化失败 2.Terraform 初始化后端资源失…