gin 生成api文档_gin-swagger 生成RESTful风格OpenAPI文档

📜什么是swagger

Swagger 是一个 API 生成工具,可以生成文档。 Swagger 是通过编写 yaml 和 json 来实现文档化。并且可以进行测试等工作。

通过 swagger 可以方便的生成接口文档,方便前端进行查看和测试。

🔧安装 swagger

在我们的项目中集成 swagger,以后项目的接口文档便可以自动生成

安装之前建议开启go mod,使用goproxy下载

首先得安装swagger

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

验证是否安装成功$ swag -v

swag version v1.6.7复制代码

🍔集成 swagger

安装 gin-swagger$ go get -u github.com/swaggo/gin-swagger

$ go get -u github.com/swaggo/gin-swagger/swaggerFiles复制代码

gin路由配置

router中添加路由,这个路由是对 swagger 的访问地址来进行添加的

url := ginSwagger.URL("http://localhost:8080/swagger/doc.json")

router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))

其中 url 定义了 swagger 的 doc.json 路径,我们可以直接访问该 json 来进行查看。

文档配置

接下来就是完善文档:

在 main.go 中 main 方法上添加注释。

package main

import (

_ "GinHello/docs" //此处导入的是swag init 生成docs文件所在路径

"GinHello/initRouter" //导入路由

)

// @title Gin swagger

// @version 1.0

// @description Gin swagger 示例项目

// @contact.name ganlei

// @contact.url https://juejin.im/user/1943592291283309

// @contact.email ganlei@uniontech.com

// @license.name Apache 2.0

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

// @host localhost:9090

func main() {

// 省略其他代码

}

复制代码

上述的注释基本都是很好理解的,不做过多解释。

主要的项目介绍注释就是这些,接下来进行我们的接口方法注释。

在我们的 handler 中添加注释

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 的注解规范和范例去编写

参考的注解请参见官方文档。以确保获取最新的 swag 语法

其中文档中没有说明的地方这里说明一下,关于 Param 的参数类型有以下几种

query 形如 \user?username=Jack&age=18

body 需要将数据放到 body 中进行请求

path 形如 \user\1

不同的参数类型对应的不同请求,请对应使用。我们对路径传参形如 /user/:name 的接口,最后的 name 通过 {} 包裹。

通常@Success、@Failure返回结果可以包装成一个结构体model.Result

package model

type Result struct {

Result bool `json:"result" example:"请求结果true或者false"`

Code int `json:"code" example:"000"`

Data interface{} `json:"data" `

}

复制代码我们在对 Result 中的 tag 会有 example ,这个仍旧是 swagger 的标签,用来给该结构体一个示例。

生成swagger对应的文件

当我们完成了所有的代码注释时,在控制台中重新执行 swag init,它会根据我们的注释生成 docs.go 及其对应的 json 和 yaml 文件。

需注意swag init指令需在项目根目录下执行,这样swag可以扫描整个项目中的swagger注释

通过指令:

swag init -h

可以查看相关帮助,如果main.go函数不在项目根目录的话,可以使用以下指令:

swag init -g ./../main.go - o ./docs复制代码

这里用的是相对路径,相对你的项目根目录main.go所在位置

补充说明

main.go文件中的main上方注释,有一个@BasePath,通常在使用域名解析时,以这种形式/api/v1访问api接口

如果有遇到跨域问题,可以在Router中加上处理函数

//Cors ...允许跨域设置func Cors() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Access-Control-Allow-Origin", "*") c.Header("Access-Control-Allow-Credentials", "false") c.Next() }}复制代码

验证

启动我们的项目,访问 hppt://localhost:9090/swagger/index.html就可以查看我们的文档,效果如下

✍总结

通过本章节的学习,将我们的项目和文档相结合起来,反正要写注释,现在是一举两得,即完成了代码注释,也完成了项目文档。

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

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

相关文章

antlr 教程_ANTLR教程– Hello Word

antlr 教程Antlr代表另一种语言识别工具。 该工具能够为任何计算机语言生成编译器或解释器。 除了明显的用途(例如需要解析一种真正的“大型”编程语言,例如Java,PHP或SQL)外,它还可以帮助执行更小,更常见的…

VBA操作word生成sql语句

项目开始一般都是用word保存下数据库的文档 但是从表单一个一个的建表实在是很困难乏味,查查资料 1、可以生成一个html或者xml,检索结构生成sql。但是这个方式也蛮麻烦 2、查到vba可以操作word读取表格。所以采用这种方式写了一个小程序。这样就可以直接…

jQuery实现禁用和只读

jQuery实现禁用和只读<td class"tdTitle"><i class"required">*</i>用户ID</td><td class"tdCont"><input class"inputText noNull param" id"yhid" notNull"用户ID" name"…

idea 单独引入jar_Intellij IDEA 添加jar包的三种方式

一.直接复制&#xff1a;(不推荐)方法&#xff1a;直接将硬盘上的jar包复制粘贴到项目的lib目录下即可。注意&#xff1a;1.对于导入的eclipse项目&#xff0c;该方式添加的jar包没有任何反应&#xff0c;用make编译项目会报错2.对于在idea中创建的项目&#xff0c;该方式添加j…

Java中使用ArrayList的10个示例–教程

Java中的ArrayList是HashMap之后最常用的集合类。 Java ArrayList表示一个可自动调整大小的数组&#xff0c;并用于代替数组。 由于创建数组后我们无法修改数组的大小&#xff0c;因此我们更喜欢在Java中使用ArrayList&#xff0c;一旦数组满了&#xff0c;它就会自动调整大小。…

[SoapUI] How to create a random UUID in each Request's Headers

${java.util.UUID.randomUUID()} is OK 转载于:https://www.cnblogs.com/MasterMonkInTemple/p/7159589.html

service层拼接XML

service层拼接XML1.xml文件样式 <?xml version"1.0" encoding"UTF-8"?> <rows><userdata name"totalnumber">21</userdata><row id"1"><cell>1</cell><cell>案号</cell><…

蓝桥杯评分标准_蓝桥杯比赛要求

七、奖项设置及评选办法7.1省赛1.参赛选手奖省赛每个组别设置一、二、三等奖&#xff0c;比例分别为10%、20%、30%&#xff0c;总比例为实际参赛人数的60%&#xff0c;零分卷不得奖。省赛一等奖选手获得直接进入全国总决赛资格。所有获奖选手均可获得由工业和信息化部人才交流中…

Node.js 国产 MVC 框架 ThinkJS 开发 config 篇

原创&#xff1a;荆秀网 网页即时推送 https://xxuyou.com | 转载请注明出处 链接&#xff1a;https://blog.xxuyou.com/nodejs-thinkjs-study-config/ 本系列教程以 ThinkJS v2.x 版本&#xff08;官网&#xff09;为例进行介绍&#xff0c;教程以实际操作为主。 按模块定义配…

td 首行缩进_工作中常用的CSS整理

一、文本样式1. 文字超出部分显示省略号单行文本的溢出显示省略号(一定要有宽度)p{width:200rpx;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}多行文本溢出显示省略号p {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow…

sql分条件查询总数

sql分条件查询总数<select id"getTotalCount" resultType"java.lang.Integer">SELECT COUNT(1) FROM T_USER<where><if test"yhbm ! null">YHBM #{yhbm} ORDER BY PXH ASC</if><if test"yh ! null">YH…

java 接口 安全加密_Java中的安全加密

java 接口 安全加密上一次我写关于密码学的文章时 &#xff0c;我概述了Apache Shiro加密API&#xff0c;并展示了如何使用其两个对称密码。 我还写道&#xff1a;“您不需要在应用程序中加密和解密敏感数据的更多功能。” 我了解了更多有关密码的知识&#xff0c;发现您需要了…

设置Tomcat管理员用户名和密码

http://dove19900520.iteye.com/blog/1774980 今天tomcat出点问题&#xff0c;然后我就想进入tomcat manager看看&#xff0c;结果怎么输入密码都不行&#xff0c;后来网上查了查才找到配置管理员用户名和密码的正确方式&#xff0c;在此记录一下&#xff1a; 要想配置管理员用…

qgraphicsitem 复制副本_QGraphicsItem:调用paint函数时

I am creating an animation with QGraphicsView, QGraphicsScene and QGraphicsItem. Can someone explain me when the paint function is called? Although I does not change variables of the item, the paint function is called every ≈100 ms. Can I stop that, so i…

怎么把两个div一左一右放

怎么把两个div一左一右放1.代码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>Title</title> </head> <body> <div style"width:150px;height:50px;margin:0;…

为Java + STANDARD值引入Cucumber

作为软件开发人员&#xff0c;我们都有最喜欢的工具来使我们成功。 许多人在上手时就很适合这份工作&#xff0c;但很快就不见了。 其他人则需要太多的设置和培训才能“将脚趾浸入水中”&#xff0c;只是为了找出自己是否是正确的工具即可。 Cucumber JVM是一个测试框架&#…

一个逼格很低的appium自动化测试框架

Github地址: https://github.com/wuranxu 使用说明 1. 安装配置Mongo数据库 下载地址 mongo是用来存放元素定位的&#xff0c;截图如下: 通过case_id区分每个case的元素定位 里面提供了value, method和text字段&#xff0c;分别作用是定位的值&#xff0c;定位的方法和要输入的…

手机长曝光怎么设置_挑战黑暗:怎样用手机拍出漂亮的长曝光照片?

无数个血淋淋的教训告诉我们&#xff1a;用手机&#xff0c;玩夜拍真的不靠谱。在光线不足的情况下&#xff0c;手机那比指甲盖还小的传感器会产生可怕的噪点&#xff0c;不管你眼睛看到的夜景有多美&#xff0c;用手机拍出来&#xff0c;效果都会变得一团糟。难道夜晚真的是手…

Port already in use: 1099;

Port already in use: 1099;1.使用命令:netstat -aon|findstr 1099 找出占用1099端口的进程; 2.关闭占用该端口的进程:taskkill -f -pid 9336;

一款好用且免费的语句分析工具Plan Explorer

在调优过程中的查询语句优化阶段&#xff0c;分析语句的执行计划是必经之路&#xff0c;一款好的执行计划分析工具确实可以帮助我们事半功倍 小贴士&#xff1a;Plan Explorer是将Plan Explorer 专业版与免费版整合在一起发布的全新、完全免费版。微软的数据库专家和开发人员也…