254 lines
5.6 KiB
Markdown
254 lines
5.6 KiB
Markdown
|
|
# TYAPI Server Swagger 文档
|
|||
|
|
|
|||
|
|
## 📖 概述
|
|||
|
|
|
|||
|
|
本项目使用 [Swaggo](https://github.com/swaggo/swag) 自动生成 Swagger/OpenAPI 文档,提供完整的 API 接口文档和在线测试功能。
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 1. 启动服务器
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 开发模式启动
|
|||
|
|
make dev
|
|||
|
|
|
|||
|
|
# 或者直接运行
|
|||
|
|
go run cmd/api/main.go
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 访问文档
|
|||
|
|
|
|||
|
|
启动服务器后,可以通过以下地址访问 API 文档:
|
|||
|
|
|
|||
|
|
- **Swagger UI**: http://localhost:8080/swagger/index.html
|
|||
|
|
- **API 文档信息**: http://localhost:8080/api/docs
|
|||
|
|
- **重定向地址**: http://localhost:8080/docs
|
|||
|
|
|
|||
|
|
## 📝 文档更新
|
|||
|
|
|
|||
|
|
### 自动更新
|
|||
|
|
|
|||
|
|
使用提供的脚本快速更新文档:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# Windows PowerShell
|
|||
|
|
.\scripts\update-docs.ps1
|
|||
|
|
|
|||
|
|
# 更新文档并重启服务器
|
|||
|
|
.\scripts\update-docs.ps1 -Restart
|
|||
|
|
|
|||
|
|
# 查看帮助
|
|||
|
|
.\scripts\update-docs.ps1 -Help
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 手动更新
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用 Makefile
|
|||
|
|
make docs
|
|||
|
|
|
|||
|
|
# 或者直接使用 swag 命令
|
|||
|
|
swag init -g cmd/api/main.go -o docs/swagger --parseDependency --parseInternal
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 开发指南
|
|||
|
|
|
|||
|
|
### 添加新的 API 接口
|
|||
|
|
|
|||
|
|
1. **在 Handler 方法上添加 Swagger 注释**:
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// @Summary 接口简短描述
|
|||
|
|
// @Description 接口详细描述
|
|||
|
|
// @Tags 标签分组
|
|||
|
|
// @Accept json
|
|||
|
|
// @Produce json
|
|||
|
|
// @Security Bearer # 如果需要认证
|
|||
|
|
// @Param request body dto.RequestStruct true "请求参数描述"
|
|||
|
|
// @Param id path string true "路径参数描述"
|
|||
|
|
// @Param page query int false "查询参数描述"
|
|||
|
|
// @Success 200 {object} dto.ResponseStruct "成功响应描述"
|
|||
|
|
// @Failure 400 {object} map[string]interface{} "错误响应描述"
|
|||
|
|
// @Router /api/v1/your-endpoint [post]
|
|||
|
|
func (h *YourHandler) YourMethod(c *gin.Context) {
|
|||
|
|
// Handler实现
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **为 DTO 结构体添加注释和示例**:
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// @Description 请求参数描述
|
|||
|
|
type RequestStruct struct {
|
|||
|
|
Name string `json:"name" example:"张三"`
|
|||
|
|
Age int `json:"age" example:"25"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// @Description 响应参数描述
|
|||
|
|
type ResponseStruct struct {
|
|||
|
|
ID string `json:"id" example:"123e4567-e89b-12d3-a456-426614174000"`
|
|||
|
|
Name string `json:"name" example:"张三"`
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **重新生成文档**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make docs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Swagger 注释语法
|
|||
|
|
|
|||
|
|
#### 基础注释
|
|||
|
|
|
|||
|
|
- `@Summary`: 接口摘要(在文档列表中显示)
|
|||
|
|
- `@Description`: 详细描述(支持多行)
|
|||
|
|
- `@Tags`: 标签分组(用于在 UI 中分组显示)
|
|||
|
|
|
|||
|
|
#### 请求/响应格式
|
|||
|
|
|
|||
|
|
- `@Accept`: 接受的内容类型(json, xml, plain, html, mpfd, x-www-form-urlencoded)
|
|||
|
|
- `@Produce`: 响应的内容类型(json, xml, plain, html)
|
|||
|
|
|
|||
|
|
#### 安全认证
|
|||
|
|
|
|||
|
|
- `@Security Bearer`: JWT 认证
|
|||
|
|
- `@Security ApiKeyAuth`: API Key 认证
|
|||
|
|
|
|||
|
|
#### 参数定义
|
|||
|
|
|
|||
|
|
- `@Param`: 定义请求参数
|
|||
|
|
- 路径参数:`@Param id path string true "用户ID"`
|
|||
|
|
- 查询参数:`@Param page query int false "页码"`
|
|||
|
|
- 请求体:`@Param request body dto.RequestStruct true "请求参数"`
|
|||
|
|
|
|||
|
|
#### 响应定义
|
|||
|
|
|
|||
|
|
- `@Success`: 成功响应
|
|||
|
|
- `@Failure`: 错误响应
|
|||
|
|
|
|||
|
|
## 📋 API 分组
|
|||
|
|
|
|||
|
|
当前文档按以下标签分组:
|
|||
|
|
|
|||
|
|
### 🔐 用户认证
|
|||
|
|
|
|||
|
|
- 用户注册
|
|||
|
|
- 用户登录(密码/短信验证码)
|
|||
|
|
- 发送验证码
|
|||
|
|
|
|||
|
|
### 👤 用户管理
|
|||
|
|
|
|||
|
|
- 获取用户信息
|
|||
|
|
- 修改密码
|
|||
|
|
|
|||
|
|
### 👨💼 管理员认证
|
|||
|
|
|
|||
|
|
- 管理员登录
|
|||
|
|
|
|||
|
|
### 🏢 管理员管理
|
|||
|
|
|
|||
|
|
- 创建管理员
|
|||
|
|
- 更新管理员信息
|
|||
|
|
- 修改管理员密码
|
|||
|
|
- 获取管理员列表
|
|||
|
|
- 获取管理员详情
|
|||
|
|
- 删除管理员
|
|||
|
|
- 获取管理员统计
|
|||
|
|
|
|||
|
|
### 🏢 企业认证
|
|||
|
|
|
|||
|
|
- 创建认证申请
|
|||
|
|
- 上传营业执照
|
|||
|
|
- 获取认证状态
|
|||
|
|
- 获取进度统计
|
|||
|
|
- 提交企业信息
|
|||
|
|
- 发起人脸验证
|
|||
|
|
- 申请合同
|
|||
|
|
- 获取认证详情
|
|||
|
|
- 重试认证步骤
|
|||
|
|
|
|||
|
|
### 💰 钱包管理
|
|||
|
|
|
|||
|
|
- 创建钱包
|
|||
|
|
- 获取钱包信息
|
|||
|
|
- 更新钱包信息
|
|||
|
|
- 钱包充值
|
|||
|
|
- 钱包提现
|
|||
|
|
- 钱包交易
|
|||
|
|
- 获取钱包统计
|
|||
|
|
|
|||
|
|
### 🔑 用户密钥管理
|
|||
|
|
|
|||
|
|
- 创建用户密钥
|
|||
|
|
- 获取用户密钥
|
|||
|
|
- 重新生成访问密钥
|
|||
|
|
- 停用用户密钥
|
|||
|
|
|
|||
|
|
## 🔐 认证说明
|
|||
|
|
|
|||
|
|
### JWT 认证
|
|||
|
|
|
|||
|
|
大部分 API 接口需要 JWT 认证,在 Swagger UI 中:
|
|||
|
|
|
|||
|
|
1. 点击右上角的 "Authorize" 按钮
|
|||
|
|
2. 在 "Bearer" 输入框中输入 JWT Token
|
|||
|
|
3. 点击 "Authorize" 确认
|
|||
|
|
|
|||
|
|
JWT Token 格式:`Bearer <your-jwt-token>`
|
|||
|
|
|
|||
|
|
### 获取 Token
|
|||
|
|
|
|||
|
|
通过以下接口获取 JWT Token:
|
|||
|
|
|
|||
|
|
- **用户登录**: `POST /api/v1/users/login-password`
|
|||
|
|
- **用户短信登录**: `POST /api/v1/users/login-sms`
|
|||
|
|
- **管理员登录**: `POST /api/v1/admin/login`
|
|||
|
|
|
|||
|
|
## 🛠️ 故障排除
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
1. **文档生成失败**
|
|||
|
|
|
|||
|
|
- 检查 Swagger 注释语法是否正确
|
|||
|
|
- 确保所有引用的类型都已定义
|
|||
|
|
- 检查 HTTP 方法是否正确(必须小写)
|
|||
|
|
|
|||
|
|
2. **模型没有正确显示**
|
|||
|
|
|
|||
|
|
- 确保结构体有正确的 `json` 标签
|
|||
|
|
- 确保包被正确解析
|
|||
|
|
- 使用 `--parseDependency --parseInternal` 参数
|
|||
|
|
|
|||
|
|
3. **认证测试失败**
|
|||
|
|
- 确保安全定义正确
|
|||
|
|
- 检查 JWT Token 格式是否正确
|
|||
|
|
- 确认 Token 未过期
|
|||
|
|
|
|||
|
|
### 调试命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 详细输出生成过程
|
|||
|
|
swag init -g cmd/api/main.go -o docs/swagger --parseDependency --parseInternal -v
|
|||
|
|
|
|||
|
|
# 检查 swag 版本
|
|||
|
|
swag version
|
|||
|
|
|
|||
|
|
# 重新安装 swag
|
|||
|
|
go install github.com/swaggo/swag/cmd/swag@latest
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📚 相关资源
|
|||
|
|
|
|||
|
|
- [Swaggo 官方文档](https://github.com/swaggo/swag)
|
|||
|
|
- [Swagger UI 文档](https://swagger.io/tools/swagger-ui/)
|
|||
|
|
- [OpenAPI 规范](https://swagger.io/specification/)
|
|||
|
|
|
|||
|
|
## 🤝 贡献指南
|
|||
|
|
|
|||
|
|
1. 添加新接口时,请同时添加完整的 Swagger 注释
|
|||
|
|
2. 确保所有参数都有合适的 `example` 标签
|
|||
|
|
3. 使用中文描述,符合项目的中文化规范
|
|||
|
|
4. 更新文档后,请运行 `make docs` 重新生成文档
|