API 控制器规范
资源控制器
应该 优先采用 REST 风格:资源化路径 + 标准 HTTP 动词(GET/POST/PUT/DELETE)。管理端与前台 必须 分控制器类,不得混用鉴权与路径前缀。
放置与命名
ecshopx-<domain>/.../api/
├── admin/v1/ # 管理后台,如 @RequestMapping("/api/v1/goods")
└── front/v1/ # H5 / 小程序,如 @RequestMapping("/api/v1/h5app/wxapp/goods")| 项 | 规范 | 示例 |
|---|---|---|
| 类名 | 资源名 + Controller | ItemsController |
| 开放 API | 集中在 ecshopx-openapi | openapi.thirdapi.v1 / v2 |
路径前缀遵循 路由与 API 分组 约定。
单数还是复数?
URL 路径与资源集合 推荐 使用复数形式(与历史 API 对齐时以仓库既有路由为准)。类名以业务资源语义命名,如 ItemsController(商品条目集合)。
职责边界
控制器 只 做:
- 解析请求(
@RequestParam、@PathVariable、@RequestBody); - 触发鉴权(
@AdminAuth、@FrontAuth等); - 调用
service,返回ApiResult或@DingoResponse包装结果。
禁止:
| 禁止项 | 说明 |
|---|---|
| 复杂 SQL / 直接注入 Mapper | 经 Service → Repository/Mapper |
| 跨模块注入对方 Mapper | 使用 Port 或 dispatch |
| 长事务与多步补偿 | 下沉 Service / Orchestrator |
| 私有「工具方法」堆积 | 提取到 Service 或独立组件 |
代码体量与注释
- 单方法 应该 ≤ 约 80 行;复杂逻辑下沉 Service;
- 方法名 应该 自解释,不必 为每个路由方法写 JavaDoc;
- 复杂业务规则(为何如此处理)可以 在方法内或 Service 写简短注释;
- 禁止 遗留未使用的 public 方法;禁止 大段注释掉的死代码。
响应与异常
- 必须 使用项目统一响应与全局异常处理(
@DingoResponse、模块ExceptionAdvice); - 不要 在 Controller 内
try/catch吞掉异常后返回随意 JSON,除非有明确降级产品需求。
