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-connectivity
POST /user-service/v1/verification/async/compare-snapshot
POST /data-pipeline/v1/verification/batch/validate-config
POST /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 预检核验与常规核验路径分离,便于权限控制
基线核验接口路径层级结构 /verifications /instant /async /batch /prechecks check-connectivity compare-snapshot validate-config resource-quota /{taskId}/status 路径设计要点 所有路径使用小写字母与连字符;异步核验必须暴露 /{taskId}/status 子资源;预检核验独立为 /prechecks 根路径

4.4 HTTP方法选择

基线核验接口严格遵循CRUD语义,但针对核验场景的特殊性,对HTTP方法的使用做出以下约定:

HTTP方法 使用场景 请求体 响应体 幂等性
POST 提交核验请求(即时/异步/批量/预检) 核验参数JSON 核验结果 或 taskId + 预估耗时 支持幂等令牌
GET 查询异步核验任务状态或结果 无 任务状态 + 结果数据(若已完成) 是
DELETE 取消正在执行的异步核验任务 无 取消确认信息 是
PUT 更新核验模板或基线配置(管理类接口) 完整配置JSON 更新后的配置 是
禁止使用: 基线核验接口不得使用 PATCH 方法进行部分更新,避免因部分更新导致基线状态不一致。所有配置更新必须通过 PUT 提交完整配置。核验结果查询禁止使用 HEAD 方法,因为核验结果需要完整的响应体承载详细数据。

4.5 接口调用规范总览

以下为四种核心核验类型的完整接口定义速查表,涵盖路径、方法、请求与响应结构:

核验类型 HTTP方法 请求路径 请求体示例 响应体关键字段
即时核验 POST /verifications/instant/check-connectivity
{
  "target": "10.0.1.5",
  "port": 3306,
  "timeoutMs": 3000
}
status, latencyMs, errorMessage
异步核验 POST /verifications/async/compare-snapshot
{
  "baselineId": "bl-20250301",
  "targetEnv": "staging"
}
taskId, estimatedDurationMs
异步状态查询 GET /verifications/async/{taskId}/status 无 taskStatus, progress, result
批量核验 POST /verifications/batch/validate-config
{
  "items": [
    {"service": "auth", "configKey": "jwt.secret"},
    {"service": "payment", "configKey": "db.connection"}
  ]
}
results[], failedCount
预检核验 POST /prechecks/resource-quota
{
  "experimentId": "exp-0421",
  "requiredCpu": 4,
  "requiredMemoryGb": 8
}
pass, blockers[]
幂等令牌机制: 所有 POST 核验接口支持可选的 Idempotency-Key 请求头。当客户端传入该头时,服务端在 5 分钟内对相同令牌的重复请求返回首次处理结果,避免因网络重试导致重复核验。令牌格式推荐使用 UUID v4。