swagger (GO) API文档工具入门
时间:2022-07-23
本文章向大家介绍swagger (GO) API文档工具入门,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- swaggo
- swagger
安装 swag 命令
go get -u github.com/swaggo/swag/cmd/swag
编写注释
- 服务基础信息
// @title swagger使用例子
// @version 1.0
// @description swagger 入门使用例子
func main(){
r := gin.Default()
r.GET("/check", connectCheck)
...
}
- api信息
type Response struct{
Code uint32 `json:"code"`
Message uint32 `json:"message"`
Data interface{} `json:"data"`
}
type ResponseError struct{
Code uint32 `json:"code"`
Message uint32 `json:"message"`
}
// @summary 服务连接校验 --> 接口简介
// @Description 服务初始连接测试 --> 接口描述
// @Accept json --> 接收类型
// @Produce json --> 返回类型
// Success 200 {object} Response --> 成功后返回数据结构
// Failure 400 {object} ResponseError --> 失败后返回数据结构
// Failure 404 {object} ResponseError
// Failure 500 {object} ResponseError
// @Router /check [get] --> 路由地址及请求方法
func connectCheck(c *gin.Context){
res := Response{ Code: 1001, Message: "OK", Data: "connect success !!!"}
c.JSON(http.StatusOK, res)
}
生成文档
// 根目录执行
swag init
配置文档路由
import (
...
_ "go-server/docs" // 这里需要引入本地已生成文档
ginSwagger "github.com/swaggo/gin-swagger"
swaggerFiles "github.com/swaggo/files"
)
func main(){
...
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.Run(":8080")
}
启动服务并访问
go run main.go
// 当前文档路径: localhost:swagger/index.html
API 注释定义
- summary 简介 // @Summary 简介
- accept 可使用的MIME类型 // @Accept json
- produce 可生成的MIME类型,既响应返回类型 // @Produce json // @Produce png 可设置多条
- param 参数 格式: [
参数名称
参数类型
数据类型
是否必须
备注
限制属性
] 空格分割 @Params userId query string true "用户id" minlength(3) maxlength(100) @Params status query integer false "状态:0 1" Enums(0, 1) defualt(0)- 参数可用类型 [param type]
- query
- path
- header
- body
- formDate
- 数据可用类型 [data type]
- string(string)
- integer(int, uint, uint32, uint64)
- boolean(bool)
- user defined struct
- 可配置属性
- defualt * 参数默认值
- maximum number 最大值
- mininum number 最小值
- maxLength integer 最大长度
- minLength integer 最小长度
- enums [*] 枚举类型
- format string
- collectionFormat string query数组分割模式
- 参数可用类型 [param type]
- security 安全性
- success 成功响应 格式: [
状态码
{数据类型}
数据类型
备注
] @Success 200 {object} Response "返回空对象" - failure 失败响应 格式: [
状态码
{数据类型}
数据类型
备注
] @Failure 400 {object} ResponseError - header 请求头字段 格式: [
状态码
{数据类型}
数据类型
备注
] // @Header 200 {string} Token "qwerty" - router 路由路径 // @Router /user/{userId} [get]
- x-name 扩展字段 type Account struct { ID string `json:"id" extensions:"x-nullable,x-abc=def"` // 扩展字段必须以"x-"开头 }
结构体描述
- example 例子
type User struct{
ID int `json:"id" example:"232323"`
Name string `json:"name" example:"Coco" `
}
- 限制属性 type User struct{ ID int `json:"id" minLength:"3" maxLength:"100"` }
- swaggerignore 排除字段 type Account struct { ID string `json:"id"` Name string `json:"name"` Ignored int `swaggerignore:"true"` // 排除Ignored字段 }
- 重命名 type Resp struct { Code int }//@name Response 必须放在结构体末尾
注意事项
- 多字段定义时不能跨字段 // @Accept json // @Produce json // @param id query string false "用户id" default("") minlength(3) maxlength(100) // @Produce json 这里将报错
- 修改定义后需要重新执行,生成命令并重启服务
- 路由配置时,引入文档
- CTF---隐写术入门第二题 小苹果
- 隐含层权重参数的初始化方式的对比实验
- BZOJ4868: [Shoi2017]期末考试
- namespace用法
- 全站缓存时代
- 洛谷P1962 斐波那契数列(矩阵快速幂)
- 负载均衡https转发会让服务器误判
- 凯撒加密之一个神奇的Python的API
- 10分钟搞懂TensorBoard用法
- 【最新TensorFlow1.4.0教程02】利用Eager Execution 自定义操作和梯度 (可在 GPU 运行)
- 清北集训Day1T3 LYK loves jumping(期望DP)
- C#进阶系列——WebApi 接口参数不再困惑:传参详解上
- MySQL之多表查询
- 万能pb_ds头文件—bits/extc++.h
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法