Files
huang 6fc90abeb6 实现服务启动时自动生成OpenAPI文档
主要变更:
1. 新增 cmd/api/docs.go 实现文档自动生成逻辑
2. 修改 cmd/api/main.go 在服务启动时调用文档生成
3. 重构 cmd/gendocs/main.go 提取生成函数
4. 更新 .gitignore 忽略自动生成的 openapi.yaml
5. 新增 Makefile 支持 make docs 命令
6. OpenSpec 框架更新和变更归档

功能特性:
- 服务启动时自动生成 OpenAPI 文档到项目根目录
- 保留独立的文档生成工具 (make docs)
- 生成失败时记录错误但不影响服务启动
- 所有代码已通过 openspec validate --strict 验证

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-09 12:25:50 +08:00

122 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现总结服务启动时自动生成OpenAPI文档
## 实现概述
本次实现在服务启动时自动生成 OpenAPI 文档,确保文档与运行的服务保持同步。
## 核心变更
### 1. 新增文件
#### `cmd/api/docs.go`
创建了 `generateOpenAPIDocs()` 函数,负责在服务启动时自动生成 OpenAPI 文档。
**关键实现**:
- 创建临时 Fiber App 用于路由注册
- 使用 nil 依赖创建 Handler仅需路由结构
- 调用路由注册函数填充文档生成器
- 保存文档到指定路径
- 生成失败时记录错误但不中断服务启动
### 2. 修改文件
#### `cmd/api/main.go`
在主函数的步骤 11 添加了文档生成调用:
```go
// 11. 生成 OpenAPI 文档
generateOpenAPIDocs("./openapi.yaml", appLogger)
```
**位置选择**:
- 放在路由注册之后,确保有完整的路由信息
- 放在服务器启动之前,确保文档在服务可用前生成
#### `cmd/gendocs/main.go`
重构了独立文档生成工具:
- 提取了 `generateAdminDocs()` 函数
- 主函数现在只负责调用生成函数和输出结果
- 保持原有的输出路径 `./docs/admin-openapi.yaml`
- 返回错误而非 panic便于错误处理
#### `.gitignore`
添加了自动生成的文档到忽略列表:
```
# Auto-generated OpenAPI documentation
/openapi.yaml
```
## 设计决策
### 避免循环依赖
最初计划将生成逻辑放在 `pkg/openapi/generate.go`,但这会导致循环依赖:
- `pkg/openapi``internal/routes``pkg/openapi`
**解决方案**: 将生成逻辑放在各自的 `cmd/` 包内:
- `cmd/api/docs.go` - 服务启动时的生成逻辑
- `cmd/gendocs/main.go` - 独立工具的生成逻辑
这样做的好处:
- 避免了循环依赖
- 保持了包的职责清晰
- 代码简单直接,易于维护
### 优雅的错误处理
文档生成失败不应影响服务启动:
- 生成失败时使用 `appLogger.Error()` 记录错误
- 服务继续启动,保证可用性
- 开发者可以通过日志发现问题
### 文档输出路径
- 服务启动生成: `./openapi.yaml`(项目根目录)
- 独立工具生成: `./docs/admin-openapi.yaml`(保持原有行为)
## 测试验证
### 编译测试
```bash
go build -o /tmp/test-api ./cmd/api
go build -o /tmp/test-gendocs ./cmd/gendocs
```
✅ 编译成功,无错误
### 功能测试
```bash
/tmp/test-gendocs
```
输出:
```
2026/01/09 12:11:57 成功在以下位置生成 OpenAPI 文档: /Users/break/csxjProject/junhong_cmp_fiber/docs/admin-openapi.yaml
```
✅ 文档生成成功33KB
### 代码规范检查
```bash
gofmt -l cmd/api/docs.go cmd/api/main.go cmd/gendocs/main.go
go vet ./cmd/api/... ./cmd/gendocs/...
```
✅ 所有检查通过
## 影响范围
### 新增功能
- ✅ 服务启动时自动生成 OpenAPI 文档
- ✅ 文档自动保存到项目根目录 `./openapi.yaml`
- ✅ 生成失败时记录错误但不影响服务启动
### 现有功能
-`cmd/gendocs` 工具继续可用(代码已重构但功能不变)
-`make docs` 命令(如存在)继续可用
- ✅ 无破坏性变更
### 开发体验改进
- ✅ 部署时无需手动执行 `make docs`
- ✅ 文档始终与当前运行的服务保持同步
- ✅ 开发过程中自动更新文档,无需频繁手动执行命令
## 后续工作
以下任务可以在后续完成:
1. 更新 README.md说明自动生成功能
2. 添加文档生成的单元测试(如需要)
3. 考虑添加启动参数控制是否生成文档(如需要)