Golang使用swagger生成api接口文档

Golang结合Swagger构建API接口文档
本文档介绍如何在Golang项目中利用Swagger自动生成API接口文档。首先,介绍了所需的预备知识,包括Gin、Gorm和MySQL。接着,详细阐述了从添加相关库、创建CRUD项目到安装Swag工具的过程。在代码中添加注释后,通过引入gin-swagger来渲染文档数据,并在HTTP路由注册中包含Swagger API。最后,通过访问测试和生成接口文档,确保文档的完整性和准确性。

Golang使用swagger生成api接口文档

现在大部分应用都是前后端分离的项目,那么,前端和后端交互只有通过api接口文档来实现。swagger可以根据注释来生成api接口文档。

本课程预备知识

  • gin
  • gorm
  • mysql

添加库

go get -u github.com/swaggo/swag/cmd/swag
go get github.com/gin-gonic/gin
go get gorm.io/gorm
go get gorm.io/driver/mysql
go get gorm.io/gorm/logger
go get github.com/swaggo/gin-swagger
go get github.com/swaggo/gin-swagger/swaggerFiles

gin+gorm创建一个crud项目

model.go

package main

import (
	
<think>我们正在使用Beego框架开发Go语言项目,需要离线生成Swagger文档。根据引用内容,我们可以参考其他语言(如Java)中离线生成Swagger文档的插件或方法,但需要找到适用于Go语言Beego框架的解决方案。 已知Beego框架内置了swagger功能,可以通过注释自动生成swagger.json文件,然后利用这个文件生成离线的HTML文档。 步骤: 1. 在代码中编写符合Swagger标准的注释(Beego支持的特殊注释)。 2. 使用Beego的命令行工具生成swagger.json文件。 3. 使用第三方工具将swagger.json转换成离线HTML文档(例如使用swagger-ui的离线版本)。 具体操作: 第一步:编写注释 在Controller的方法上添加注释,例如: ```go // @Title GetUser // @Description get user by uid // @Param uid path int true "The key for staticblock" // @Success 200 {object} models.User // @Failure 403 :uid is empty // @router /user/:uid [get] func (u *UserController) GetUser() { // ... } ``` 第二步:生成swagger.json 安装bee工具(Beego框架的命令行工具): ```bash go get github.com/beego/bee ``` 在项目根目录下执行: ```bash bee generate docs ``` 这会在项目根目录下生成一个`swagger/`目录,里面包含swagger.json文件。 第三步:生成离线HTML文档 我们可以使用swagger-ui的离线版本。具体操作: 1. 下载swagger-ui(可以从https://github.com/swagger-api/swagger-ui 获取)。 2. 将dist目录中的内容复制到项目目录(例如public/swagger-ui)。 3. 修改index.html文件,将url参数指向我们本地的swagger.json文件(相对路径或绝对路径)。 例如,在index.html中找到: ```javascript url: "https://petstore.swagger.io/v2/swagger.json", ``` 替换为: ```javascript url: "swagger.json", // 假设我们将swagger.json放在swagger-ui目录下 ``` 或者使用绝对路径(相对于当前HTML文件的路径)。 然后,直接打开这个HTML文件就可以在浏览器中查看离线文档了。 另外,也可以使用其他工具,比如swagger2markup(但这是Java工具,不适用于Go)或者使用Go语言编写的工具,例如redocly(https://redocly.com/ )也提供了离线生成文档的方式。 但是,如果我们希望使用一个更简单的方法,可以直接使用swagger-ui的dist文件夹,然后修改url指向本地文件即可。 注意:由于浏览器安全限制,直接打开本地HTML文件加载本地swagger.json可能会遇到跨域问题(CORS)。解决方法: 1. 使用本地HTTP服务器(例如Python的SimpleHTTPServer)来运行。 2. 或者修改浏览器安全设置(不推荐)。 另一种避免跨域问题的方法:将swagger.json的内容直接嵌入到HTML文件中。我们可以使用swagger-ui的dist目录中的index.html,然后修改为: 将: ```javascript const ui = SwaggerUIBundle({ url: "https://petstore.swagger.io/v2/swagger.json", ... }) ``` 改为: ```javascript const spec = %s; // 这里%s替换为swagger.json的内容(注意要转义为合法的JavaScript字符串) const ui = SwaggerUIBundle({ spec: spec, ... }) ``` 但这种方法需要将swagger.json的内容内嵌,我们可以写一个小工具来生成这个HTML文件。 不过,最简单的方式还是使用一个本地HTTP服务器。 总结: 1. 使用bee工具生成swagger.json。 2. 下载swagger-ui,修改index.html中的url指向本地swagger.json(相对路径)。 3. 通过本地HTTP服务器打开(例如:`python -m http.server 8000`),然后在浏览器中访问。 这样,我们就实现了离线生成Swagger文档。 另外,也可以考虑使用redoc,它同样提供了离线方案(https://github.com/Redocly/redoc ),使用方法类似。 根据引用[3]中提到的Spring Boot项目生成离线HTML和PDF文档,我们也可以寻找类似工具,但针对Go语言,上述方法已经足够。 因此,针对Go语言Beego框架离线生成Swagger文档的步骤如上所述。 相关问题: 1. 如何解决离线Swagger文档中的CORS问题? 2. Beego框架中如何编写Swagger注释? 3. 除了使用swagger-ui,还有哪些工具可以生成离线的API文档? 4. 如何将Swagger文档导出为PDF格式?</think>### 在Go语言使用Beego框架离线生成Swagger文档 #### 实现步骤: 1. **启用Beego的Swagger支持** 在`main.go`中添加初始化代码: ```go package main import ( _ "yourproject/docs" // 导入生成的docs目录 "github.com/astaxie/beego" ) func main() { if beego.BConfig.RunMode == "dev" { beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" // 离线文档路径 } beego.Run() } ``` 2. **编写API注释规范** 在Controller中使用标准注释(示例): ```go // @Title 用户登录 // @Description 用户登录接口 // @Param username formData string true "用户名" // @Param password formData string true "密码" // @Success 200 {object} models.User // @Failure 401 认证失败 // @router /login [post] func (c *UserController) Login() { // 业务逻辑 } ``` 3. **生成离线文档** 执行命令生成文档: ```bash # 安装bee工具 go get -u github.com/beego/bee/v2 # 生成Swagger JSON bee generate docs # 下载Swagger UI离线包 git clone https://github.com/swagger-api/swagger-ui.git cp -r swagger-ui/dist public/swagger cp docs/swagger.json public/swagger/ ``` 4. **配置离线访问** 修改`public/swagger/index.html`: ```javascript const ui = SwaggerUIBundle({ spec: %s, // 替换为嵌入的JSON数据 dom_id: '#swagger-ui', deepLinking: true }) ``` 使用脚本嵌入数据: ```bash sed -i "s|https://petstore.swagger.io/v2/swagger.json|swagger.json|g" public/swagger/index.html ``` #### 离线访问: 1. 将`public/swagger`目录打包分发 2. 直接打开`index.html`即可查看文档 3. 所有资源均为本地路径(无需网络连接) #### 注意事项: - 需要Beego 1.12.0+ 和 bee 2.0.0+ - JSON路径需使用相对路径`swagger.json` - 若需PDF导出,可使用`wkhtmltopdf`工具转换[^3] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

多课网_老郭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值