You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
4.6 KiB

# Controller API描述规范
## 概述
为了生成准确的路由描述信息,所有Controller方法必须遵循以下注释规范。
## 规范要求
### 1. 必须包含的注释
每个Controller方法必须包含以下Swagger注释:
```go
// MethodName 方法功能描述
// @Summary 简短的中文描述
// @Description 详细的中文描述
// @Tags 标签名称
// @Accept json
// @Produce json
// @Param 参数描述
// @Success 200 {object} response.Response
// @Router /api/path [method]
func (c *Controller) MethodName(ctx *gin.Context) {
// 实现代码
}
```
### 2. 描述规范
#### @Summary 规范
- 必须使用中文
- 简洁明了,不超过20个字符
- 准确描述方法功能
**示例:**
```go
// @Summary 获取用户列表
// @Summary 创建新用户
// @Summary 更新用户信息
// @Summary 删除用户
```
#### @Description 规范
- 必须使用中文
- 详细描述方法功能、参数说明、返回值说明
- 包含业务逻辑说明
**示例:**
```go
// @Description 获取分页用户列表,支持按用户名、状态等条件筛选
// @Description 创建新用户,自动生成用户ID,设置默认密码策略
// @Description 更新用户基本信息,包括用户名、邮箱、状态等
// @Description 删除用户,同时删除用户相关的角色关联
```
### 3. 路径规范
#### 路径命名规范
- 使用RESTful风格
- 资源名使用复数形式
- 路径参数使用`:id`格式
**示例:**
```go
// @Router /api/auth/users [get] // 获取用户列表
// @Router /api/auth/users [post] // 创建用户
// @Router /api/auth/users/:id [get] // 获取用户详情
// @Router /api/auth/users/:id [put] // 更新用户
// @Router /api/auth/users/:id [delete] // 删除用户
```
### 4. 标签规范
#### @Tags 规范
- 使用中文标签
- 按功能模块分组
- 保持一致性
**示例:**
```go
// @Tags 用户管理
// @Tags 角色管理
// @Tags 权限管理
// @Tags 认证管理
```
## 实施步骤
### 阶段1:现有Controller改造
1. 检查所有现有Controller方法
2. 补充缺失的@Summary和@Description注释
3. 统一标签命名
### 阶段2:路由描述生成优化
1. 修改RouteSyncService,优先从Swagger注释提取描述
2. 实现注释解析逻辑
3. 回退机制:注释解析失败时使用原有逻辑
### 阶段3:代码审查规范
1. 新增Controller方法必须包含完整注释
2. 代码审查时检查注释完整性
3. 建立自动化检查工具
## 示例代码
### 完整的Controller方法示例
```go
// ListUsers 获取用户列表
// @Summary 获取用户列表
// @Description 获取分页用户列表,支持按用户名、状态等条件筛选,返回用户基本信息和关联角色
// @Tags 用户管理
// @Accept json
// @Produce json
// @Param page query int false "页码" default(1)
// @Param pageSize query int false "每页数量" default(10)
// @Param username query string false "用户名筛选"
// @Param status query string false "状态筛选"
// @Success 200 {object} response.Response{data=map[string]interface{}} "用户列表"
// @Failure 400 {object} response.Response "请求参数错误"
// @Failure 500 {object} response.Response "服务器内部错误"
// @Router /api/auth/admin/users [get]
func (c *UserController) ListUsers(ctx *gin.Context) {
// 实现代码
}
// CreateUser 创建用户
// @Summary 创建新用户
// @Description 创建新用户,自动生成用户ID,设置默认密码策略,支持批量创建
// @Tags 用户管理
// @Accept json
// @Produce json
// @Param user body model.CreateUserRequest true "用户创建信息"
// @Success 201 {object} response.Response{data=model.User} "创建成功"
// @Failure 400 {object} response.Response "请求参数错误"
// @Failure 409 {object} response.Response "用户已存在"
// @Failure 500 {object} response.Response "服务器内部错误"
// @Router /api/auth/admin/users [post]
func (c *UserController) CreateUser(ctx *gin.Context) {
// 实现代码
}
```
## 检查清单
### 新增方法检查
- [ ] 包含@Summary注释
- [ ] 包含@Description注释
- [ ] 包含@Tags注释
- [ ] 包含@Router注释
- [ ] 描述使用中文
- [ ] 路径符合RESTful规范
### 现有方法检查
- [ ] 补充缺失的注释
- [ ] 统一标签命名
- [ ] 优化描述内容
- [ ] 验证路径正确性
## 工具支持
### 自动化检查脚本
```bash
# 检查Controller注释完整性
go run tools/check_controller_comments.go
# 生成路由描述映射
go run tools/generate_route_descriptions.go
```
### IDE配置
- 配置Go注释模板
- 启用Swagger注释高亮
- 设置注释格式检查