5.7 KiB
5.7 KiB
API 开发规范
设计原则
遵循系统设计理念,通过代码结构和命名体现设计思路:
- 分层架构:明确职责边界,保持高内聚低耦合
- 代码即文档:通过良好的命名和结构让代码自己说话
- 渐进式复杂度:从简单到复杂的实现路径
- 失败快速原则:早期验证,明确错误
目录结构规范
分层架构
internal/
├── models/ # 数据模型层:结构体定义、验证规则
├── service/ # 业务逻辑层:核心业务规则实现
├── repository/ # 数据访问层:数据库、缓存操作
└── api/handlers/ # HTTP处理层:请求处理、响应格式化
职责边界
每层专注单一职责,避免跨层调用:
- Models:数据结构定义,输入验证规则,响应格式规范
- Service:业务规则实现,数据处理逻辑,跨模块协调
- Repository:数据持久化,查询优化,事务管理
- Handler:HTTP协议处理,参数绑定,错误响应
文件组织规范
模块化设计
按业务领域组织文件,体现清晰的模块边界:
models/
├── auth.go # 认证领域:登录、Token、权限
├── customer.go # 客户领域:客户信息、关系管理
├── license.go # 授权领域:许可证、授权码
└── common.go # 通用结构:响应格式、分页
service/
├── interfaces.go # 接口契约:定义服务边界
├── auth_service.go
├── customer_service.go
└── license_service.go
api/handlers/
├── auth_handler.go
├── customer_handler.go
└── license_handler.go
代码组织模式
模型层设计要点
- 请求结构体:清晰的字段验证规则,语义化的字段命名
- 响应结构体:统一的数据格式,合理的字段层次
- 验证标签使用:利用 binding 标签进行输入验证
- 文档标签:通过 json 标签明确 API 契约
服务层设计要点
- 接口优先:先定义契约,后实现逻辑
- 依赖注入:通过构造函数注入依赖
- 错误处理:明确的错误类型和信息
- 业务封装:核心逻辑集中在服务层
处理器层设计要点
- 职责单一:只处理 HTTP 协议相关逻辑
- 参数绑定:统一使用框架提供的绑定机制
- 错误响应:使用统一的错误处理函数
- 文档注解:完整的 Swagger 注解信息
REST API 设计
路由设计原则
遵循 RESTful 风格,资源导向的 URL 设计:
- 使用名词表示资源,动词通过 HTTP 方法体现
- 嵌套路由体现资源关系
- 版本控制通过路径前缀实现
- 统一的路径命名约定
响应格式标准化
成功响应:统一的数据结构,包含状态码、消息、数据 错误响应:详细的错误信息,包含错误码、消息、时间戳 分页响应:包含分页元信息的数据结构
HTTP 状态码使用策略
遵循设计理念,大部分业务错误返回 200,通过响应体区分状态:
- 200:成功(包括业务逻辑失败)
- 400:请求格式错误
- 401:身份认证失败
- 403:权限不足
- 404:资源不存在
- 500:服务器内部错误
API 文档规范
Swagger 注解要求
完整的接口文档注解,包含所有必要信息:
- Summary:简洁的接口描述
- Description:详细的功能说明
- Tags:合理的分组标签
- Parameters:完整的参数说明
- Responses:所有可能的响应状态
- Security:认证要求说明
文档分组策略
按业务领域组织接口文档:
- 认证管理:登录、登出、Token 刷新
- 客户管理:客户信息 CRUD 操作
- 授权管理:许可证、授权码管理
- 系统监控:健康检测、系统信息
错误处理体系
错误码设计
采用六位数字业务错误码,体现模块化设计:
- 前2位:模块代码(10=认证,20=客户,30=授权,90=系统)
- 后4位:连续错误号,无需分层
- 直接映射:错误码到错误信息的直接对应关系
错误响应策略
失败快速原则:早期验证,明确提示 统一处理:使用 NewErrorResponse 函数统一创建错误响应 分层错误:Service 层返回业务错误,Handler 层转换为 HTTP 响应
开发工作流
API 开发步骤
遵循分层架构,自下而上的开发顺序:
- 模型设计:定义请求响应结构,明确数据契约
- 接口定义:在 interfaces.go 中声明服务契约
- 业务实现:在 service 层实现核心逻辑
- 处理器编写:在 handlers 层处理 HTTP 协议
- 路由注册:在 router.go 中注册 API 路由
- 文档完善:添加完整的 Swagger 注解
- 文档生成:更新 API 文档
质量检查要点
架构层面:
- 分层职责是否清晰
- 依赖关系是否合理
- 接口设计是否完整
实现层面:
- 错误处理是否完整
- 输入验证是否充分
- 响应格式是否统一
文档层面:
- Swagger 注解是否完整
- 接口描述是否清晰
- 错误码是否正确
实施准则
整洁代码
- 命名语义化:函数、变量名体现其用途
- 函数职责单一:每个函数专注一个职责
- 避免深层嵌套:使用早期返回减少复杂度
可维护性
- 接口优先设计:先定义契约再实现
- 依赖注入模式:便于测试和扩展
- 统一错误处理:减少重复代码
渐进式复杂度
- 基础功能优先:先实现核心功能
- 逐步增强:根据需求添加高级特性
- 配置驱动:通过配置控制功能开关