Go Engineering - Foundation - API Doc
It has been 775 days since the last update, the content of the article may be outdated.
Swagger
- Swagger 是一套围绕 OpenAPI 规范构建的开源工具,可以设计、构建、编写和使用 REST API
- Swagger 工具
- Swagger Editor
- 基于浏览器的编辑器,可以在其中编写 OpenAPI 规范,并实时预览 API 文档
- Swagger UI
- 将 OpenAPI 规范呈现为交互式的 API 文档,并可以在浏览器中尝试 API 调用
- Swagger Codegen
- 根据 OpenAPI 规范,生成服务器存根和客户端代码库
- Swagger Editor
Swagger vs OpenAPI
- OpenAPI 是一个 API 规范,前身也叫 Swagger 规范
- 通过定义一种用来描述 API 格式或者 API 定义的语言,来规范 RESTful 服务开发过程
- 目前最新的 OpenAPI 规范是 OpenAPI 3.0 (即 Swagger 2.0)
- OpenAPI 规范定义了一个 API 必须包含的基本信息
- 描述、路径和操作、输入输出参数、验证方法等
- OpenAPI 是一个 API 规范,而 Swagger 是实现规范的工具
go-swagger
特性
基于代码注释自动生成 Swagger 文档,减少编写文档的时间,提高开发效率,并保证文档的及时性和准确性
- 对比 swag,支持代码和注释分开编写
- 根据 Swagger 定义文件生成服务端代码 – 不够优雅,建议自行实现
- 根据 Swagger 定义文件生成客户端代码 – 即 Go SDK
- 校验 Swagger 定义文件是否正确
- 启动一个 HTTP 服务器,可以通过浏览器访问 API 文档
- 根据 Swagger 文档定义的参数生成 Go Model 结构体定义
命令行工具
image-20220430232204334
注释语法
947262c5175f6f518ff677063af293b3
解析注释
swagger generate
找到main
函数,遍历所有源码文件解释相关注释,自动生成swagger.yaml
或者swagger.json
实践
API 接口
保持了功能代码的简洁,这里并没有定义文档,而是定义在另一个 Go 包中
go
1 | package main |
Required: true,生成的 Swagger 文档会声明该字段为必须字段
go
1 | // Package api defines the user model. |
image-20220501003822179
编写 API 文档
为了保持代码简洁,在另一个 Go 包中(docs)编写带有 go-swagger 注释的 API 文档,需要在 main.go 中导入 docs 包
通过导入 docs 包,可以使 go-swagger 在递归解析 main 包(入口)的依赖包时,可以找到 docs 包,并解析包的注释
go
1 | _ "github.com/marmotedu/gopractise-demo/swagger/docs" |
Package docs 后面的
awesome.
为 HTTP 服务名;Documentation of our awesome API.
为 API 描述
go
1 | // Package docs awesome. |
生成 Swagger API 文档
plaintext
1 | $ swagger generate spec -o swagger.yaml |
image-20220501004514214
启动 HTTP 服务
plaintext
1 | $ swagger serve --no-open -F=swagger --port 36666 swagger.yaml |
image-20220501004854354
9a9fb7a31d418d8e4dc13b19cefa832c
格式转换
plaintext
1 | $ swagger generate spec -i ./swagger.yaml -o ./swagger.json |
接口文档定义
swagger:route 后的格式: HTTP 方法、URL、Tag,相同 Tag 会被分组在一起
go
1 | package docs |
image-20220501001350339
其它功能
对比 Swagger 文档
plaintext
1 | $ swagger diff -d change.log swagger.new.yaml swagger.old.yaml |
生成服务端代码
先定义 Swagger 接口文档,再基于 Swagger 文档生成服务端代码
plaintext
1 | $ mkdir go-user |
生成客户端代码
API 接口的 Go SDK
plaintext
1 | $ swagger generate client -f ../swagger.yaml -A go-user |
校验 Swagger 文档是否合法
plaintext
1 | $ swagger validate swagger.yaml |
合并 Swagger 文档
plaintext
1 | $ swagger mixin swagger_part1.yaml swagger_part2.yaml |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.