03-swagger和接口文档
@
目录
1. swag 安装
-
github地址: https://github.com/swaggo/gin-swagger
-
安装:按github官方文档操作即可
2. main函数注释
- 简单示例
// @title crow-logger // @version 1.0 // @termsOfService http://10.10.xxx.65 // @contact.name 刘炜 // @contact.url http://10.10.xxx.65 // @contact.email liuwei-cto@xxx.com.cn // @BasePath /
- 以后这些信息会出现在swagger页面头
- 官方完整示例
// @title Swagger Example API // @version 1.0 // @description This is a sample server celler server. // @termsOfService http://swagger.io/terms/ // @contact.name API Support // @contact.url http://www.swagger.io/support // @contact.email support@swagger.io // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host localhost:8080 // @BasePath /api/v1 // @securityDefinitions.basic BasicAuth // @securityDefinitions.apikey ApiKeyAuth // @in header // @name Authorization // @description Description for what is this security definition being used // @securitydefinitions.oauth2.application OAuth2Application // @tokenUrl https://example.com/oauth/token // @scope.write Grants write access // @scope.admin Grants read and write access to administrative information // @securitydefinitions.oauth2.implicit OAuth2Implicit // @authorizationUrl https://example.com/oauth/authorize // @scope.write Grants write access // @scope.admin Grants read and write access to administrative information // @securitydefinitions.oauth2.password OAuth2Password // @tokenUrl https://example.com/oauth/token // @scope.read Grants read access // @scope.write Grants write access // @scope.admin Grants read and write access to administrative information // @securitydefinitions.oauth2.accessCode OAuth2AccessCode // @tokenUrl https://example.com/oauth/token // @authorizationUrl https://example.com/oauth/authorize // @scope.admin Grants read and write access to administrative information
- 官方说明
注释 | 说明 | 示例 |
---|---|---|
title | 必填 应用程序的名称。 | // @title Swagger Example API |
version | 必填 提供应用程序API的版本。 | // @version 1.0 |
description | 应用程序的简短描述。 | // @description This is a sample server celler server. |
tag.name | 标签的名称。 | // @tag.name This is the name of the tag |
tag.description | 标签的描述。 | // @tag.description Cool Description |
tag.docs.url | 标签的外部文档的URL。 | // @tag.docs.url https://example.com |
tag.docs.description | 标签的外部文档说明。 | // @tag.docs.description Best example documentation |
termsOfService | API的服务条款。 | // @termsOfService http://swagger.io/terms/ |
contact.name | 公开的API的联系信息。 | // @contact.name API Support |
contact.url | 联系信息的URL。 必须采用网址格式。 | // @contact.url http://www.swagger.io/support |
contact.email | 联系人/组织的电子邮件地址。 必须采用电子邮件地址的格式。 | // @contact.email support@swagger.io |
license.name | 必填 用于API的许可证名称。 | // @license.name Apache 2.0 |
license.url | 用于API的许可证的URL。 必须采用网址格式。 | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html |
host | 运行API的主机(主机名或IP地址)。 | // @host localhost:8080 |
BasePath | 运行API的基本路径。 | // @BasePath /api/v1 |
accept | API 可以使用的 MIME 类型列表。 请注意,Accept 仅影响具有请求正文的操作,例如 POST、PUT 和 PATCH。 值必须如“Mime类型”中所述。 | // @accept json |
produce | API可以生成的MIME类型的列表。值必须如“Mime类型”中所述。 | // @produce json |
query.collection.format | 请求URI query里数组参数的默认格式:csv,multi,pipes,tsv,ssv。 如果未设置,则默认为csv。 | // @query.collection.format multi |
schemes | 用空格分隔的请求的传输协议。 | // @schemes http https |
x-name | 扩展的键必须以x-开头,并且只能使用json值 | // @x-example-key |
3. 路由设置
- 示例
在gin路由中添加一条路由配置:
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
- 完整示例
注意:
_ "crow-logger/docs"
这条必须引用,不然访问swagger的时候回找不到docs文件。
- 后边
swagger init
的时候会将生成的文件放入项目根下docs
目录。- crow-logger 是我的项目名,你需要替换成自己的。
import ( _ "crow-logger/docs" "github.com/gin-gonic/gin" ginSwagger "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" ) func ServerWebsocket() { r := gin.Default() r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) groupV1 := r.Group("/api/v1") { groupV1.GET("/ping", Ping) groupV1.GET("/version", Version) } deployment := r.Group("/api/v1/logger") { deployment.GET("/",GetLog) deployment.GET("/file",DownLog) } r.Run(":1911") }
4. 接口的注释
4.1 GET
- query模式
- 代码
// SelectPrjs 获取项目信息 // @Summary 获取项目信息 // @Description 获取项目信息 // @Tags 项目管理 // @Param prj_id query string false "项目Id" // @Param prj_nbr query string false "项目编号" // @Param prj_nm query string false "项目名称" // @Param page_num query string false "页数" // @Param page_size query string false "每页行数" // @Success 200 {object} response.Response{data=apimodels.ProjectListResponse} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/projects [get] // @Security Bearer
说明:
// @Param prj_id query string false "项目Id"
prj_id
: 要传入的变量名query
:传入变量的模式(本例是query模式)string
:传入变量值的类型(本例是字串)false
:是否必填(本例非必须)项目Id
:变量说明
- swagger显示
- 附:postman调用
- path 模式
- 代码
// SelectPrj 获取指定项目信息 // @Summary 获取指定项目信息 // @Description 获取指定项目信息 // @Tags 项目管理 // @Param uuid path string true "项目id" // @Success 200 {object} response.Response{data=models.PjmProject} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/projects/{uuid} [get] // @Security Bearer
说明:
@Param uuid path string true "项目id"
uuid
: 要传入的变量名path
:传入变量的模式(本例是path模式)string
:传入变量值的类型(本例是字串)true
:是否必填(本例非必须)项目Id
:变量说明
- swagger显示
- 附:postman调用
4.2 POST
- body模式
- 代码
// AddProject 创建项目 // @Summary 创建项目 // @Description 创建项目 // @Tags 项目管理 // @Accept application/json // @Product application/json // @Param data body ProjectInput true "项目编号,项目缩写" // @Success 200 {object} response.Response{data=string} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/projects [post] // @Security Bearer
说明:
// @Param data body ProjectInput true "项目编号,项目缩写""
data
: 用body模式传入,变量名是data
body
:传入变量的模式(本例是body模式)ProjectInput
:传入变量值的类型(本例是自定义的一个结构体)true
:是否必填(本例必须)项目编号,项目缩写
:传入json的说明
- swagger显示
- 附:postman调用
- formData模式
同PUT,见下文 PUT 的 formData 模式
4.3 PUT
- body模式
- 代码
// UpdateProject 从数据中台更新项目信息 // @Summary 从数据中台更新项目信息 // @Description 从数据中台更新项目信息 // @Tags 项目管理 // @Accept application/json // @Product application/json // @Param data body models.PjmProject true "prj_nbr必填" // @Success 200 {object} response.Response{data=string} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/projects [put] // @Security Bearer
说明:
和POST相同,参加上文
-
swagger显示
-
附:postman调用
- formData模式
- 代码
// AutoModifyIp 自动修改smartX服务器IP // @Summary 自动修改smartX服务器IP // @Description 自动修改smartX服务器IP // @Tags 服务器管理 // @Accept application/x-www-form-urlencoded // @Product application/json // @Param uuid formData string true "服务器UUID" // @Success 200 {object} response.Response{data=string} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/my_server/smart_x_ip [put] // @Security Bearer
-
swagger 显示
-
附:postman调用
4.4 DELETE
- query
- 代码
// DeleteProject 删除项目 // @Summary 删除项目 // @Description 删除项目 // @Tags 项目管理 // @Param prj_id query string true "项目Id" // @Success 200 {object} response.Response{data=string} "{"code": 200, "data": [...]}" // @Router /api/v1/projects [delete] // @Security Bearer
说明:
说明参考上文 GET
- swagger 显示
- 附: postman调用
- Path
- 代码
// DeleteServer 删除指定服务器 // @Summary 删除指定服务器 // @Description 删除指定服务器 // @Tags 服务器管理 // @Param uuid path string true "服务器uuid" // @Param project_num formData string true "项目编号" // @Success 200 {object} response.Response{data=string} "{"code": 200, "data": [...]}" // @Router /api/v1/my_server/{uuid} [delete] // @Security Bearer
说明:
参照GET的path,本例除了path还包含了一个formData
- swagger显示
- 附:postman调用
4.5 Header
- 代码
// @Param DevopsToken header string false "token"
说明:
DevopsToken
:header 的keyheader
: 指明类型时headerstring
: value类型false
:是否必须"tocken"
:说明
- 完整示例
// GetMyServiceForBub 获取服务信息 // @Summary 获取服务信息 // @Description 获取服务信息 // @Tags Public // @Param project_num query string false "项目编号" // @Param DevopsToken header string false "token" // @Success 200 {object} response.Response{data=[]service.GetServiceResponse} "{"code": 200, "data": [...]}" // @Failure 500 {object} response.Response{msg=string} "{"requestId": "string","code": 500,"msg": "string","status": "error","data": null}" // @Router /api/v1/pub/service/list [get] // @Security Bearer
- swagger显示
这里填上之后会从header传入,相当于:
5. 初始化
swag init --parseDependency
--parseDependency
:使用外部依赖
之后正常编辑即可。
6. 访问
分类:
go语言开发 / gin框架实战
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?