当前位置:首页 > 技术文章 > 正文内容

中年大叔学编程-Gin-Swagger生成API接口文档

zonemu1个月前 (09-13)技术文章18

最近简单的学习了一下Golang,并且用Gin开发了两个小应用,一个短域名生成,一个微信小程序。感受到了Golang的代码简洁、部署简单、内存占用少、零停机平滑重启等优势。在开发小程序的时候,需要生成接口文档,这里需要用到Gin-Swagger了,所以简单的就来整理一下。

这里我用的环境是:

  • go version go1.14.6 windows/amd64
  • GoLand 2020.2.1
  • gin v1.6.3
  • swag v1.6.7

这里先用Goland新建一个demo项目吧,在新建的时候,我们最好就要把包的代理地址配置好

这里我们需要安装Gin、swag、gin-swagger、files几个包,可以通过命令的方式

go get -u github.com/gin-gonic/gin
go get -u github.com/swaggo/swag/cmd/swag
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

但是在Goland中,会自动获取复制的连接,然后提醒安装,直接点击相应的按钮即可,非常方便。 这里我们新建一个main.go文件,加入如下代码

import (
	_ "GinDemo/docs"
	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

func main() {
	r := gin.New()

	// use ginSwagger middleware to
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	r.Run()
}

然后进入Terminal中执行swag init

现在,运行项目(默认8080端口)并访问
http://localhost:8080/swagger/index.html

因为现在还没有开发相应的接口,所以什么信息都没有,在开始之前,我们需要先了解一下gin-swagger的注解

  • @Tags 接口分组,相当于归类
  • @Summary 接口的简要描述
  • @Description 接口的详细描述
  • @Id 全局标识符
  • @Version 接口版本号
  • @Accept 发起请求的数据类型
  • @Produce 接口返回的数据类型
  • @Param 请求参数描述
  • @Success 请求成功后返回信息
  • @Failure 请求失败后返回信息
  • @Router 请求的路由路径和请求方式。
  • @contact.name 接口联系人
  • @contact.url 联系人网址
  • @contact.email 联系人邮箱

上面就是一些较为基础的参数说明,当然还有一些更加复杂的,比如@security,@in等,这些以后再说吧,我们就可以在相应的Controller方法上加注解了

// @Tags Demo
// @Id 1
// @Summary 接口Demo
// @Description 接口详细描述信息
// @Produce  json
// @Param id path int true "ID"
// @Success 200 {string} string
// @Failure 400 {string} string
// @Router /api/v1/demo/{id} [get]
// @contact.name 中年大叔学编程
// @contact.email eyiadmin@163.com
func Demo(c *gin.Context)  {
	c.JSON(200,"OK!")
}

在main方法中注册路由

r.GET("/api/v1/demo/:id", controller.Demo)

现在,进入Terminal中再次执行swag init并启动,这时候就可以看到对应的内容了

我们来执行以下看看效果

这样一个API接口文档就有了,而且还方便我们调试。

我只是记录我的学习过程,由于书读得少,可能很多地方表述或者是理解得不对,请轻喷并指正。

相关文章

Linux 发行版介绍 Zenwalk Linux(linux发行版2021)

Zenwalk Linux是基于Slackware的GNU/Linux发行版, 100%兼容Slackware。 致力于精简和快捷的图形桌面及多媒体使用。包含整套编程环境和运行库,还提供了常用服务器套...

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title...

K8s 的 Namespace 到底解决了什么问题?

在 Kubernetes 的世界里,资源调度、服务编排以及自动化运维构成了它强大的基础架构能力。但随着集群规模的扩大和团队协作复杂度的提升,仅靠原始的资源管理手段已经难以支撑多租户或大型项目的管理需求...

基于Docker构建安装Git/GitLab,以及制作springboot工程镜像

今天给大家分享的是《领先的开源自动化服务器Jenkins的应用实战》之基于Docker安装构建Git/GitLab版本控制与代码云存储的场所;使用Git管理项目,springboot工程制作镜像知识体...

我的VIM配置(如何配置vim编辑环境)

写一篇关于VIM配置的文章,记录下自己的VIM配置,力求简洁实用。VIM的配置保存在文件~/.vimrc中(Windows下是C:\Users\yourname \_vimrc)。VIM除了自身可配置...

前端学习又一大里程碑:html5+js写出歌词同步手机播放器

需要完整代码和视频请评论后加前端群470593776领取javascript进阶课题:HTML5迷你音乐播放器学习疲惫了,代码敲累了,听听自己做的的音乐播放器,放松与满足知识点:for循环语句,DOM...