# OpenAPI 文档增强总结 ## 更新日期 2026-01-15 ## 增强内容 ### 1. 自动认证标记 为所有需要认证的端点自动添加 `security` 标记。 **实现方式**: - 在 `RouteSpec` 中使用 `Auth: true` 字段标记需要认证的端点 - `Register` 函数自动传递 `Auth` 字段到 OpenAPI 生成器 - 生成器自动添加 `security: [BearerAuth: []]` 到操作定义 **示例**: 公开端点(`Auth: false`): ```yaml /api/admin/login: post: summary: 后台登录 # 无 security 字段 ``` 认证端点(`Auth: true`): ```yaml /api/admin/logout: post: summary: 登出 security: - BearerAuth: [] ``` ### 2. 标准错误响应 为所有端点自动添加标准错误响应。 **错误响应规则**: - **所有端点**:400 (请求参数错误), 500 (服务器内部错误) - **认证端点**:额外添加 401 (未认证或认证已过期), 403 (无权访问) **ErrorResponse Schema**: ```yaml ErrorResponse: type: object required: - code - message - timestamp properties: code: type: integer description: 错误码 message: type: string description: 错误消息 timestamp: type: string format: date-time description: 时间戳 ``` **示例**: 公开端点错误响应: ```yaml responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/ModelLoginResponse' "400": description: 请求参数错误 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' "500": description: 服务器内部错误 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' ``` 认证端点错误响应: ```yaml responses: "200": description: OK "400": description: 请求参数错误 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' "401": description: 未认证或认证已过期 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' "403": description: 无权访问 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' "500": description: 服务器内部错误 content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' ``` ### 3. Bearer Token 认证定义 在 OpenAPI 规范中添加 Bearer Token 认证方案定义。 ```yaml components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT ``` ## 修改的文件 ### 核心文件 1. **pkg/openapi/generator.go** - 修改 `AddOperation` 方法,新增 `requiresAuth` 参数 - 新增 `addSecurityRequirement` 方法:为操作添加认证要求 - 新增 `addStandardErrorResponses` 方法:添加标准错误响应 - 新增 `addErrorResponseSchema` 方法:添加错误响应 Schema 定义 - 新增 `ptrString` 辅助函数 2. **internal/routes/registry.go** - 更新 `Register` 函数,传递 `spec.Auth` 到生成器 ### 路由注册文件 更新以下文件中的 `RouteSpec`,为所有端点添加 `Auth` 字段: 1. **internal/routes/admin.go** - 公开端点(login, refresh-token):`Auth: false` - 认证端点(logout, me, password):`Auth: true` 2. **internal/routes/h5.go** - 公开端点(login, refresh-token):`Auth: false` - 认证端点(logout, me, password):`Auth: true` 3. **internal/routes/account.go** - 所有账号管理端点:`Auth: true` (17 个端点) 4. **internal/routes/role.go** - 所有角色管理端点:`Auth: true` (9 个端点) 5. **internal/routes/permission.go** - 所有权限管理端点:`Auth: true` (6 个端点) ### 文档生成脚本 **cmd/gendocs/main.go** - 添加 `AdminAuth` Handler 到 handlers 结构体 - 确保认证端点包含在生成的文档中 ## 验证结果 ### 1. 编译验证 ```bash ✅ go build ./... - 编译通过 ✅ go build ./pkg/openapi/... - OpenAPI 包编译通过 ✅ go build ./internal/routes/... - 路由包编译通过 ``` ### 2. 文档生成验证 ```bash ✅ CONFIG_ENV=dev go run cmd/gendocs/main.go ✅ 文档生成成功:docs/admin-openapi.yaml ✅ 包含所有端点(认证 + 业务端点) ``` ### 3. 内容验证 **Security Scheme**: ```bash ✅ grep "securitySchemes:" docs/admin-openapi.yaml ✅ BearerAuth 定义存在 ``` **ErrorResponse Schema**: ```bash ✅ grep "ErrorResponse:" docs/admin-openapi.yaml ✅ 包含 code, message, timestamp 字段 ✅ Required 字段定义正确 ``` **公开端点(login)**: ```bash ✅ 只有 400, 500 错误响应 ✅ 没有 security 标记 ✅ 没有 401, 403 错误响应 ``` **认证端点(logout)**: ```bash ✅ 有 400, 401, 403, 500 错误响应 ✅ 有 security: [BearerAuth: []] ✅ 错误响应引用 ErrorResponse schema ``` ## 使用方法 ### 1. 注册新端点 在路由注册时,显式设置 `Auth` 字段: ```go // 公开端点 Register(router, doc, basePath, "POST", "/public", handler, RouteSpec{ Summary: "公开端点", Tags: []string{"公开"}, Input: new(RequestModel), Output: new(ResponseModel), Auth: false, // 不需要认证 }) // 认证端点 Register(authGroup, doc, basePath, "GET", "/protected", handler, RouteSpec{ Summary: "受保护端点", Tags: []string{"业务"}, Input: nil, Output: new(ResponseModel), Auth: true, // 需要认证 }) ``` ### 2. 生成文档 ```bash # 开发环境 CONFIG_ENV=dev go run cmd/gendocs/main.go # 生产环境 CONFIG_ENV=prod go run cmd/gendocs/main.go ``` 生成的文档位于 `docs/admin-openapi.yaml`。 ### 3. 查看文档 **方法 1:使用 Swagger UI** ```bash # 访问 https://editor.swagger.io/ # 将 docs/admin-openapi.yaml 内容粘贴到编辑器 ``` **方法 2:使用 Postman** ```bash # File → Import → Upload Files # 选择 docs/admin-openapi.yaml ``` **方法 3:使用 Redoc** ```bash npx @redocly/cli preview-docs docs/admin-openapi.yaml ``` ## 后续优化(可选) 当前已完成的高优先级任务: - ✅ 自动添加 security 标记 - ✅ 自动添加标准错误响应 - ✅ 定义 ErrorResponse schema - ✅ 更新所有路由注册 低优先级增强(可在后续迭代完成): - [ ] 为请求/响应模型添加示例值(example) - [ ] 为字段添加详细的验证规则说明(自动从 validator 标签提取) 这些低优先级功能不影响当前文档的可用性,可以根据需要在后续版本中添加。 ## 影响范围 **破坏性变更**:无 **向后兼容**:是 - 旧代码不需要修改即可工作 - 未设置 `Auth` 字段的 RouteSpec 默认为 `false`(公开端点) **API 变更**:无 - 只影响 OpenAPI 文档生成 - 不影响运行时行为 ## 总结 本次增强为 OpenAPI 文档自动生成系统添加了以下关键功能: 1. **自动认证标记**:通过 `Auth` 字段自动为认证端点添加 `security` 标记 2. **标准错误响应**:自动为所有端点添加统一的错误响应定义 3. **错误响应 Schema**:定义了标准的 `ErrorResponse` 结构 这些增强使得: - 文档更加完整和规范 - API 使用者能清楚了解哪些端点需要认证 - 错误处理文档化,提升 API 可用性 - 减少手动维护文档的工作量 所有高优先级功能已完成并验证通过,可以投入使用。