4. API 设计原则:RESTful 风格、资源命名规范、版本控制策略、幂等性与安全性要求
平台工程变更风险评估任务编排的 API 设计,必须遵循一套严谨且可落地的设计原则。本章围绕 RESTful 风格、资源命名规范、版本控制策略、幂等性与安全性五大核心维度展开,确保 API 接口具备良好的可读性、可维护性、扩展性与生产级可靠性。
4.1 RESTful 风格与资源建模
变更风险评估任务编排本质上是资源操作的集合。RESTful 风格要求将业务实体抽象为资源,并通过 HTTP 方法表达操作语义。核心资源包括:AssessmentTask(评估任务)、RiskRule(风险规则)、ExecutionPlan(执行计划)、AuditLog(审计日志)。
关键约束:禁止在 URL 中使用动词(如
/createTask),应通过 HTTP 方法表达操作。例如:POST /tasks 表示创建,DELETE /tasks/{id} 表示删除。
4.2 资源命名规范
资源命名采用全小写 + 连字符(kebab-case)风格,路径层级清晰表达从属关系。集合资源使用复数名词,单例资源使用单数。
| 类别 | 示例路径 | 说明 |
|---|---|---|
| 集合资源 | /api/v1/tasks |
评估任务列表 |
| 单例资源 | /api/v1/tasks/{taskId} |
指定评估任务详情 |
| 子资源 | /api/v1/tasks/{taskId}/steps |
任务下的步骤集合 |
| 动作资源 | /api/v1/tasks/{taskId}/cancel |
取消任务(POST) |
| 查询参数 | /api/v1/tasks?status=running&page=1 |
按状态分页查询 |
命名避坑指南:
- 避免使用下划线(
task_id)或驼峰(taskId)作为路径段。 - 避免在路径中暴露数据库主键,优先使用业务 UUID。
- 避免过深的嵌套(超过 3 层),考虑使用查询参数扁平化。
4.3 版本控制策略
API 版本控制采用 URL 路径前缀方式,版本号以 v 开头、整数递增。该策略对客户端最直观,便于缓存和路由。
# 版本控制示例
GET /api/v1/tasks # 当前稳定版
GET /api/v2/tasks # 下一迭代版(可能包含破坏性变更)
GET /api/v1/tasks?fields=id,name,status # 字段筛选(向后兼容)
版本生命周期管理遵循以下规则:
- v1:当前稳定版,至少维护 6 个月。
- v2:新功能迭代版,与 v1 并行运行。
- 废弃策略:在 v2 发布时标记 v1 为
deprecated,响应头携带Sunset: Sat, 01 Nov 2025 00:00:00 GMT。
注意:避免使用
v1.2 或 v1-beta 等语义版本号作为路径前缀。API 版本控制只反映兼容性边界,不反映内部迭代次数。
4.4 幂等性要求
变更风险评估任务编排涉及多次重试与补偿操作,幂等性是保障数据一致性的核心机制。以下表格列出关键操作的幂等性设计策略:
| HTTP 方法 | 幂等性 | 实现方式 | 示例场景 |
|---|---|---|---|
| GET | 天然幂等 | 无副作用查询 | 查询任务状态 |
| PUT | 天然幂等 | 全量替换资源 | 更新任务配置 |
| DELETE | 天然幂等 | 删除后再次删除返回 404 | 删除已取消的任务 |
| POST | 非幂等(需改造) | 客户端传入 Idempotency-Key 请求头 |
创建评估任务、触发执行 |
| PATCH | 非幂等(需改造) | 条件更新 + 版本号乐观锁 | 部分更新任务字段 |
幂等性关键实现细节:
- 服务端根据
Idempotency-Key缓存请求结果,有效期至少 24 小时。 - 重复请求返回首次操作的响应结果(状态码、响应体一致),不重复执行。
- 幂等键应包含客户端标识 + 时间戳 + 随机数,保证全局唯一。
// 幂等请求示例
POST /api/v1/tasks
Content-Type: application/json
Idempotency-Key: client-abc-2025-04-01-7a8b9c
{
"name": "变更风险评估-部署批次A",
"riskRules": ["rule-001", "rule-002"]
}
4.5 安全性要求
API 安全体系覆盖认证、授权、传输加密、审计与防篡改五个层面。变更风险评估任务编排涉及生产环境变更,安全要求高于普通业务 API。
安全实现要点:
- 认证:服务间调用使用 mTLS + 短期 JWT;外部客户端使用 OAuth 2.0 Client Credentials 流程。
- 授权:每个 API 端点绑定最小权限 scope,例如
task:read、task:write、task:execute。 - 防重放:请求头携带
X-Timestamp(Unix 毫秒)和X-Nonce,服务端窗口允许 ±5 分钟。 - 审计:所有变更操作记录
who、what、when、result,写入不可篡改的审计日志存储。
安全设计红线:
- 禁止在 URL 参数中传递明文 或密钥。
- 禁止返回堆栈跟踪或数据库错误详情到客户端。
- 所有敏感操作(执行、取消、删除)必须二次确认或携带
X-Confirm: true头。
4.6 设计原则总结矩阵
| 原则 | 核心要求 | 违反后果 | 优先级 |
|---|---|---|---|
| RESTful 风格 | 资源路径 + HTTP 方法表达语义 | 接口混乱,客户端难以理解 | P0 |
| 资源命名规范 | kebab-case、复数名词、扁平嵌套 | 路径歧义,解析困难 | P1 |
| 版本控制 | URL 路径前缀 v1/v2,废弃有通知 | 破坏性变更导致客户端故障 | P0 |
| 幂等性 | Idempotency-Key + 结果缓存 | 重复执行导致数据不一致 | P0 |
| 安全性 | TLS + OAuth + 签名 + 审计 | 数据泄露、未授权操作 | P0 |