4. 基线核验接口总览:核验接口分类、接口命名规范、接口路径设计、HTTP方法选择
基线核验接口是混沌工程平台与受测系统之间的契约边界。本章从接口分类、命名规范、路径设计、HTTP方法选择四个维度,建立一套可被模板驱动、可被自动化工具解析的接口调用规范。所有设计均遵循RESTful最佳实践,并针对混沌工程场景的特殊性(如异步核验、幂等重试、状态轮询)进行了定制化扩展。
4.1 核验接口分类
根据核验的触发时机与数据流向,基线核验接口划分为以下四大类:
| 分类 | 用途 | 典型场景 | 幂等要求 |
|---|---|---|---|
| 即时核验 | 同步返回核验结果,适用于短耗时、低延迟的检查项 | 端口连通性、进程存活、配置项比对 | 是 |
| 异步核验 | 提交核验任务后返回任务ID,通过轮询或回调获取最终结果 | 全量数据一致性校验、长时压力测试后的状态恢复 | 提交侧幂等 |
| 批量核验 | 一次请求核验多个基线项,减少网络开销 | 微服务集群批量健康检查、多区域基线快照对比 | 整体幂等 |
| 预检核验 | 在混沌实验执行前,验证基线环境是否满足实验前置条件 | 资源配额检查、依赖服务可用性、安全策略放行 | 是 |
设计要点: 异步核验接口必须返回
taskId 和 estimatedDuration(预估耗时,单位毫秒),以便调用方合理设置轮询超时与退避策略。预检核验失败时,应返回明确的阻断原因列表,而非仅返回布尔值。
4.2 接口命名规范
所有基线核验接口遵循统一的命名模板,确保可读性与自动化解析能力。命名模板如下:
/{domain}/{version}/verification/{category}/{action}
各段位的取值规则:
- {domain}:受测系统或模块的领域名称,使用小写字母与连字符,例如
payment、user-service、data-pipeline。 - {version}:接口版本号,固定格式
v{n},例如v1、v2。 - {category}:核验分类缩写,映射关系如下:
instant— 即时核验async— 异步核验batch— 批量核验precheck— 预检核验
- {action}:具体核验动作,使用动词或动名词,例如
check-connectivity、compare-snapshot、validate-config。
命名示例:
POST /payment/v1/verification/instant/check-connectivityPOST /user-service/v1/verification/async/compare-snapshotPOST /data-pipeline/v1/verification/batch/validate-configPOST /gateway/v1/verification/precheck/resource-quota
4.3 接口路径设计
路径设计遵循资源导向与动作分离原则。核验本身被视为一种资源操作,路径中不嵌入查询参数用于核心业务逻辑。以下为路径设计规范对照表:
| 设计原则 | 正确示例 | 错误示例 | 说明 |
|---|---|---|---|
| 资源路径使用名词复数 | /verifications/instant |
/verification/instant |
统一使用复数形式,保持RESTful一致性 |
| 动作通过HTTP方法表达 | POST /verifications/instant |
GET /verifications/instant/run |
避免在路径中使用动词 |
| 异步任务路径分层 | /verifications/async/{taskId}/status |
/verifications/async-status?taskId=xxx |
任务状态作为子资源,使用路径参数 |
| 批量操作使用子资源 | /verifications/batch |
/verifications?batch=true |
批量核验作为独立子资源,不依赖查询参数 |
| 预检核验独立路径 | /prechecks/resource-quota |
/verifications/precheck?type=resource |
预检核验与常规核验路径分离,便于权限控制 |
4.4 HTTP方法选择
基线核验接口严格遵循CRUD语义,但针对核验场景的特殊性,对HTTP方法的使用做出以下约定:
| HTTP方法 | 使用场景 | 请求体 | 响应体 | 幂等性 |
|---|---|---|---|---|
| POST | 提交核验请求(即时/异步/批量/预检) | 核验参数JSON | 核验结果 或 taskId + 预估耗时 | 支持幂等令牌 |
| GET | 查询异步核验任务状态或结果 | 无 | 任务状态 + 结果数据(若已完成) | 是 |
| DELETE | 取消正在执行的异步核验任务 | 无 | 取消确认信息 | 是 |
| PUT | 更新核验模板或基线配置(管理类接口) | 完整配置JSON | 更新后的配置 | 是 |
禁止使用: 基线核验接口不得使用
PATCH 方法进行部分更新,避免因部分更新导致基线状态不一致。所有配置更新必须通过 PUT 提交完整配置。核验结果查询禁止使用 HEAD 方法,因为核验结果需要完整的响应体承载详细数据。
4.5 接口调用规范总览
以下为四种核心核验类型的完整接口定义速查表,涵盖路径、方法、请求与响应结构:
| 核验类型 | HTTP方法 | 请求路径 | 请求体示例 | 响应体关键字段 |
|---|---|---|---|---|
| 即时核验 | POST | /verifications/instant/check-connectivity |
|
status, latencyMs, errorMessage |
| 异步核验 | POST | /verifications/async/compare-snapshot |
|
taskId, estimatedDurationMs |
| 异步状态查询 | GET | /verifications/async/{taskId}/status |
无 | taskStatus, progress, result |
| 批量核验 | POST | /verifications/batch/validate-config |
|
results[], failedCount |
| 预检核验 | POST | /prechecks/resource-quota |
|
pass, blockers[] |
幂等令牌机制: 所有
POST 核验接口支持可选的 Idempotency-Key 请求头。当客户端传入该头时,服务端在 5 分钟内对相同令牌的重复请求返回首次处理结果,避免因网络重试导致重复核验。令牌格式推荐使用 UUID v4。