脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - go swagger生成接口文档使用教程

go swagger生成接口文档使用教程

2022-11-10 10:59yi个俗人 Golang

这篇文章主要为大家介绍了go swagger生成接口文档使用教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

这篇文章主要介绍了Go语言使用swagger生成接口文档的方法,希望能够对大家的学习或工作具有一定的帮助,需要的朋友可以参考下。

在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效率和开发效率。那如何维护接口文档,历来都是令人头痛的,感觉很浪费精力,而且后续接口文档的维护也十分耗费精力。在很多年以前,也流行用word等工具写接口文档,这里面的问题很多,如格式不统一、后端人员消费精力大、文档的时效性也无法保障。

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

Swagger介绍

Swagger是基于标准的 OpenAPI 规范进行设计的,本质是一种用于描述使用json表示的Restful Api的接口描述语言,只要照着这套规范去编写你的注解或通过扫描代码去生成注解,就能生成统一标准的接口文档和一系列 Swagger 工具。Swagger包括自动文档,代码生成和测试用例生成。

1、安装

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

在macOS中安装 swag需要执行如下命令:

?
1
mv $GOPATH/bin/swag /usr/local/go/bin

2、检测是否安装成功

?
1
2
$ swag -v
swag version v1.8.4

3、安装gin-swagger扩展

?
1
2
3
$ go get -u -v github.com/swaggo/gin-swagger
$ go get -u -v github.com/swaggo/files
$ go get -u -v github.com/alecthomas/template

使用

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

  • 按照swagger要求给接口代码添加声明式注释。
  • 使用swag工具扫描代码自动生成api接口文档数据。
  • 使用gin-swagger渲染在线接口文档页面。

1、添加注释

go-swapper注解规范说明:

注:注解详情可参见官网文档Swagger Documentation

注解 描述
@Summary 摘要
@Produce API 可以产生的 MIME 类型的列表,MIME 类型你可以简单的理解为响应类型,例如:json、xml、html 等等
@Param 参数格式,从左到右分别为:参数名、入参类型、数据类型、是否必填、注释
@Success 响应成功,从左到右分别为:状态码、参数类型、数据类型、注释
@Failure 响应失败,从左到右分别为:状态码、参数类型、数据类型、注释
@Router 路由,从左到右分别为:路由地址,HTTP 方法

示例demo:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package main
import (
    "github.com/gin-gonic/gin"
    "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
    _ "github/mwqnice/swag/docs" // 千万不要忘了导入把你上一步生成的docs
)
type Article struct{
    ID         uint32 `gorm:"primary_key" json:"id"`
    CreatedBy  string `json:"created_by"`
    ModifiedBy string `json:"modified_by"`
    CreatedOn  uint32 `json:"created_on"`
    ModifiedOn uint32 `json:"modified_on"`
    DeletedOn  uint32 `json:"deleted_on"`
    IsDel      uint8  `json:"is_del"`
    Title         string `json:"title"`
    Desc          string `json:"desc"`
    Content       string `json:"content"`
    CoverImageUrl string `json:"cover_image_url"`
    State         uint8  `json:"state"`
}
func NewArticle() Article {
    return Article{}
}
func main()  {
    r := gin.Default()
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    r.Run(":8088")
}
// @Summary 获取单个文章
// @Produce json
// @Param id path int true "文章ID"
// @Success 200 {object} Article "成功"
// @Failure 400 {object} string "请求错误"
// @Failure 500 {object} string "内部错误"
// @Router /api/v1/articles/{id} [get]
func (a Article) Get(c *gin.Context) {
}
// @Summary 获取多个文章
// @Produce json
// @Param name query string false "文章名称"
// @Param tag_id query int false "标签ID"
// @Param state query int false "状态"
// @Param page query int false "页码"
// @Param page_size query int false "每页数量"
// @Success 200 {object} Article "成功"
// @Failure 400 {object} string "请求错误"
// @Failure 500 {object} string "内部错误"
// @Router /api/v1/articles [get]
func (a Article) List(c *gin.Context) {
    return
}
// @Summary 创建文章
// @Produce json
// @Param tag_id body string true "标签ID"
// @Param title body string true "文章标题"
// @Param desc body string false "文章简述"
// @Param cover_image_url body string true "封面图片地址"
// @Param content body string true "文章内容"
// @Param created_by body int true "创建者"
// @Param state body int false "状态"
// @Success 200 {object} Article "成功"
// @Failure 400 {object} string "请求错误"
// @Failure 500 {object} string "内部错误"
// @Router /api/v1/articles [post]
func (a Article) Create(c *gin.Context) {
}
// @Summary 更新文章
// @Produce json
// @Param tag_id body string false "标签ID"
// @Param title body string false "文章标题"
// @Param desc body string false "文章简述"
// @Param cover_image_url body string false "封面图片地址"
// @Param content body string false "文章内容"
// @Param modified_by body string true "修改者"
// @Success 200 {object} Article "成功"
// @Failure 400 {object} string "请求错误"
// @Failure 500 {object} string "内部错误"
// @Router /api/v1/articles/{id} [put]
func (a Article) Update(c *gin.Context) {
    return
}
// @Summary 删除文章
// @Produce  json
// @Param id path int true "文章ID"
// @Success 200 {string} string "成功"
// @Failure 400 {object} string "请求错误"
// @Failure 500 {object} string "内部错误"
// @Router /api/v1/articles/{id} [delete]
func (a Article) Delete(c *gin.Context) {
    return
}

2、生成接口文档数据

格式化swag注解

?
1
$ swag fmt

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

?
1
$ swag init

执行完上述命令后,如果你写的注释格式没问题,此时你的项目根目录下会多出一个docs文件夹。

./docs

├── docs.go

├── swagger.json

└── swagger.yaml

3、引入gin-swagger渲染文档数据

然后在项目代码中注册路由的地方按如下方式引入gin-swagger相关内容:

?
1
2
3
4
5
6
7
8
import (
    "github.com/gin-gonic/gin"
    "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
    _ "github/mwqnice/swag/docs" // 千万不要忘了导入把你上一步生成的docs
)
//添加swagger访问路由
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

启动项目,在浏览器中输入地址:http://127.0.0.1:8088/swagger/index.html

go swagger生成接口文档使用教程

总结

到此这篇关于go语言使用swagger生成接口文档的文章就介绍到这了, 希望可以对你的开发有一定帮助。

更多关于go swagger接口文档的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7126802030944878600

延伸 · 阅读

精彩推荐
  • Golang秒懂Golang匿名函数

    秒懂Golang匿名函数

    所谓匿名函数,就是没有名字的函数,本文重点给大家介绍Golang匿名函数的相关知识,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的...

    温柔的风4912021-03-30
  • GolangGolang 字符串与字节数组互转的实现

    Golang 字符串与字节数组互转的实现

    在Go语言中,我们经常在字符串和切片之间进行转换,本文就详细的介绍一下Golang 字符串与字节数组互转的实现,文中通过示例代码介绍的非常详细,具有...

    头秃猫轻王5362022-09-04
  • GolangGo map定义的方式及修改技巧

    Go map定义的方式及修改技巧

    这篇文章主要给大家介绍了关于Go map定义的方式及修改技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    mb6018ead62188711422021-03-29
  • Golanggo实现redigo的简单操作

    go实现redigo的简单操作

    golang操作redis主要有两个库,go-redis和redigo,今天我们就一起来介绍一下redigo的实现方法,需要的朋友可以参考下 ...

    熔遁丶螺旋手里剑3292020-05-17
  • Golanggolang实现简易的分布式系统方法

    golang实现简易的分布式系统方法

    这篇文章主要介绍了golang实现简易的分布式系统方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    小马哥_Magical6582020-05-20
  • GolangGolang加密解密之RSA(附带php)

    Golang加密解密之RSA(附带php)

    安全总是很重要的,各个语言对于通用的加密算法都会有实现。本文先是对RSA算法进行了简单介绍,后才进行介绍如何用Go实现RSA的加密解密,下面一起来...

    daisy2912020-05-01
  • Golanggolang coroutine 的等待与死锁用法

    golang coroutine 的等待与死锁用法

    这篇文章主要介绍了golang coroutine 的等待与死锁用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yxw20147942021-06-14
  • Golang详解Golang实现http重定向https的方式

    详解Golang实现http重定向https的方式

    这篇文章主要介绍了详解Golang实现http重定向https的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    andy zhang3572020-05-18