基于golang的swagger超贴心、超详细使用指南【有很多坑】

Swagger 相关的工具集会根据 OpenAPI 规范去生成各式各类的与接口相关联的内容,常见的流程是编写注解 =》调用生成库-》生成标准描述文件 =》生成/导入到对应的 Swagger 工具。

安装

因此接下来第一步,我们要先安装 Go 对应的开源 Swagger 相关联的库,在项目 blog-service 根目录下执行安装命令,如下:

$ go get -u github.com/swaggo/swag/cmd/swag
$ go get -u github.com/swaggo/gin-swagger 
$ go get -u github.com/swaggo/files
$ go get -u github.com/alecthomas/template

验证是否安装成功,如下:

$ swag -v
swag version v1.6.5

此处有坑:go get命令分两步:第一步如同git clone拉取github上的依赖并下载,第二步就是会go install编译,这个swagger包比较特殊,go install编译会编译出可执行文件,然后放在GOBIN。因此GOBIN的目录选择一定要选在可读可写权限目录下,如果你放在只读文件夹下,会安装不了swagger的可执行文件的!!!会报错:access denied提醒权限不够

写入注解

在完成了 Swagger 关联库的安装后,我们需要针对项目里的 API 接口进行注解的编写,以便于后续在进行生成时能够正确的运行,接下来我们将使用到如下注解:

注解	描述
@Summary	摘要
@Produce	API 可以产生的 MIME 类型的列表,MIME 类型你可以简单的理解为响应类型,例如:json、xml、html 等等
@Param	参数格式,从左到右分别为:参数名、入参类型、数据类型、是否必填、注释
@Success	响应成功,从左到右分别为:状态码、参数类型、数据类型、注释
@Failure	响应失败,从左到右分别为:状态码、参数类型、数据类型、注释
@Router	路由,从左到右分别为:路由地址,HTTP 方法
2.4.4.1 API
我们切换到项目目录下的 internal/routers/api/v1 目录,打开 tag.go 文件,写入如下注解:
// @Summary 获取多个标签
// @Produce  json
// @Param name query string false "标签名称" maxlength(100)
// @Param state query int false "状态" Enums(0, 1) default(1)
// @Param page query int false "页码"
// @Param page_size query int false "每页数量"
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags [get]
func (t Tag) List(c *gin.Context) {}

// @Summary 新增标签
// @Produce  json
// @Param name body string true "标签名称" minlength(3) maxlength(100)
// @Param state body int false "状态" Enums(0, 1) default(1)
// @Param created_by body string true "创建者" minlength(3) maxlength(100)
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags [post]
func (t Tag) Create(c *gin.Context) {}

// @Summary 更新标签
// @Produce  json
// @Param id path int true "标签 ID"
// @Param name body string false "标签名称" minlength(3) maxlength(100)
// @Param state body int false "状态" Enums(0, 1) default(1)
// @Param modified_by body string true "修改者" minlength(3) maxlength(100)
// @Success 200 {array} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags/{id} [put]
func (t Tag) Update(c *gin.Context) {}

// @Summary 删除标签
// @Produce  json
// @Param id path int true "标签 ID"
// @Success 200 {string} string "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags/{id} [delete]
func (t Tag) Delete(c *gin.Context) {}

在这里我们只展示了标签模块的接口注解编写,接下来你应当按照注解的含义和参考上述接口注解,完成文章模块接口注解的编写。

main注解

那么接口方法本身有了注解,那针对这个项目,能不能写注解呢,万一有很多个项目,怎么知道它是谁?实际上是可以识别出来的,我们只要针对 main 方法写入如下注解:

// @title 博客系统
// @version 1.0
// @description Go 语言编程之旅:一起用 Go 做项目
// @termsOfService https://github.com/go-programming-tour-book
func main() {
	...
}

生成

在完成了所有的注解编写后,我们回到项目根目录下,执行如下命令:

$ swag init

在执行命令完毕后,会发现在 docs 文件夹生成 docs.goswagger.jsonswagger.yaml 三个文件。

路由

那注解编写完,也通过 swag init 把 Swagger API 所需要的文件都生成了,那接下来我们怎么访问接口文档呢?其实很简单,我们只需要在 routers 中进行默认初始化和注册对应的路由就可以了,打开项目目录下的 internal/routers 目录中的 router.go 文件,新增代码如下:

import (
	...
	_ "github.com/go-programming-tour-book/blog-service/docs"
	//_ 表示执行init函数时调用改包,需要将这个替换为自己本地的docs目录路径。这个路径是github上别人的docs,此处只是用来测试。
	//此处应该这样写:_ "swagger_demo/docs"
	//上面的swagger_demo为本项目名称,docs就是swag init自动生成的目录,用于存放 docs.go、swagger.json、swagger.yaml 三个文件。
	ginSwagger "github.com/swaggo/gin-swagger"
	"github.com/swaggo/gin-swagger/swaggerFiles"
)

func NewRouter() *gin.Engine {
	r := gin.New()
	r.Use(gin.Logger())
	r.Use(gin.Recovery())
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	...
	return r
}

从表面上来看,主要做了两件事,分别是初始化 docs 包和注册一个针对 swagger 的路由,而在初始化 docs 包后,其 swagger.json 将会默认指向当前应用所启动的域名下的 swagger/doc.json 路径,如果有额外需求,可进行手动指定,如下:

url := ginSwagger.URL("http://127.0.0.1:8000/swagger/doc.json")
  r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))

查看接口文档

在完成了上述的设置后,我们重新启动服务端,在浏览器中访问 Swagger 的地址 http://127.0.0.1:8000/swagger/index.html,就可以看到上述图片中的 Swagger 文档展示,其主要分为三个部分,分别是项目主体信息、接口路由信息、模型信息,这三部分共同组成了我们主体内容。

快速上手文档:swag使用指南

官方文档:swagger详细使用指南

ps:上不去的话,挂个梯子

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
Golang Swagger是一种用于创建和管理API文档的工具。通过使用Swagger,我们可以自动化生成API文档,以便开发人员和用户可以更轻松地了解和使用API。在Golang项目中使用Swagger可以帮助我们定义API的路由和参数,并生成与之对应的文档。它可以通过SwaggerUI进行可视化展示,使得API的使用更加直观和便捷。 要在Golang项目中使用Swagger,首先需要安装Go对应的Swagger相关的库。通过使用命令"go get"来安装这些库,如下所示: ``` $ go get -u github.com/swaggo/swag/cmd/swag $ go get -u github.com/swaggo/gin-swagger $ go get -u github.com/swaggo/files $ go get -u github.com/alecthomas/template ``` 安装完这些库之后,我们可以在项目根目录下执行"swag init"命令,用于初始化Swagger相关的配置和文档。接着,我们重新启动服务端,并访问Swagger的地址"http://127.0.0.1:8000/swagger/index.html",就可以看到生成的Swagger文档。这个文档主要分为三个部分:项目主体信息、接口路由信息和模型信息,它们共同组成了API文档的主要内容。 如果你想更深入地了解Golang Swagger的使用,可以参考官方文档提供的详细使用指南。同时,也可以参考示例存储库"golang-swaggerui-example"来学习如何在Golang项目中设置SwaggerUI并编写API文档。 总结起来,Golang Swagger是一种用于创建和管理API文档的工具,通过它我们可以方便地定义和生成API文档,并通过SwaggerUI进行可视化展示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于golangswagger贴心详细使用指南【有很多】](https://blog.csdn.net/asdfadafd/article/details/126081054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [golang-swaggerui-example:GolangSwaggerUI生成示例](https://download.csdn.net/download/weixin_42139871/18681893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【阿冰】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值