3、接口调用机制总览:RESTful API设计原则、核验接口的请求-响应模型、同步与异步调用模式
环境一致性基线核验的核心价值在于通过标准化的接口调用,将分散的配置校验行为收敛为可编程、可观测、可复现的自动化流程。本章从接口设计原则、请求-响应模型、调用模式三个维度,构建核验接口的调用机制总览。
3.1 RESTful API 设计原则
核验接口严格遵循 RESTful 架构风格,确保资源定义清晰、操作语义统一、无状态交互可扩展。以下原则贯穿所有核验端点设计:
| 原则 | 核验场景映射 | 示例 |
|---|---|---|
| 资源导向 | 每个核验项(基线、环境、节点)均为独立资源 | /api/v1/baselines/{id} |
| 统一接口 | 使用标准 HTTP 方法表达操作语义 | GET 查询、POST 触发、PUT 更新 |
| 无状态 | 每次请求携带完整上下文,服务端不维护会话 | 请求头携带 X-Correlation-ID |
| 表述自描述 | 响应中包含媒体类型、链接、状态码 | Content-Type: application/json |
| HATEOAS | 响应中嵌入可执行的下游操作链接 | "links": { "retry": "/api/v1/checks/123/retry" } |
设计要点:核验接口的 URL 路径采用
/api/v1/{domain}/{resource}/{id}/{action} 模式,其中 domain 区分基线管理、环境查询、核验执行等上下文,action 仅用于非 CRUD 操作(如 trigger、cancel)。
3.2 核验接口的请求-响应模型
所有核验接口遵循统一的请求-响应契约,包含标准化的请求头、请求体结构、响应状态码与响应体格式。该模型确保客户端与服务端之间的数据交换可预测、可解析。
3.2.1 请求结构
POST /api/v1/environments/{envId}/checks HTTP/1.1
Host: verify.example.com
Authorization: Bearer <>
Content-Type: application/json
Accept: application/json
X-Correlation-ID: 7a3b8c9d-1e2f-4a5b-8c7d-9e0f1a2b3c4d
{
"baselineId": "bl-2025-03-001",
"scope": {
"nodes": ["node-01", "node-02", "node-05"],
"categories": ["kernel", "network", "security"]
},
"mode": "async",
"callbackUrl": "https://callback.example.com/checks/result"
}
| 请求字段 | 类型 | 说明 |
|---|---|---|
baselineId |
string | 目标基线标识符,决定核验的期望值集合 |
scope.nodes |
array[string] | 待核验节点列表,为空时默认全量节点 |
scope.categories |
array[string] | 核验类别过滤,支持 kernel、network、security、storage |
mode |
enum | 调用模式:sync 或 async |
callbackUrl |
string | 异步模式下结果回调地址(可选) |
3.2.2 响应结构
HTTP/1.1 202 Accepted
Content-Type: application/json
X-Correlation-ID: 7a3b8c9d-1e2f-4a5b-8c7d-9e0f1a2b3c4d
Location: /api/v1/checks/ck-20250315-001
{
"checkId": "ck-20250315-001",
"status": "accepted",
"createdAt": "2025-03-15T10:30:00Z",
"estimatedDuration": 45,
"links": {
"self": "/api/v1/checks/ck-20250315-001",
"result": "/api/v1/checks/ck-20250315-001/result",
"cancel": "/api/v1/checks/ck-20250315-001/cancel"
}
}
| 响应字段 | 类型 | 说明 |
|---|---|---|
checkId |
string | 核验任务唯一标识,用于后续查询 |
status |
enum | 任务状态:accepted、running、completed、failed |
estimatedDuration |
int | 预估耗时(秒),客户端可据此设置超时 |
links |
object | HATEOAS 链接,引导客户端执行后续操作 |
状态码约定:同步模式成功返回
200 OK;异步模式任务已接受返回 202 Accepted;资源不存在返回 404 Not Found;请求参数校验失败返回 422 Unprocessable Entity;服务端内部错误返回 500 Internal Server Error。
3.3 同步与异步调用模式
核验接口根据业务场景提供两种调用模式:同步模式适用于轻量级、低延迟的核验场景;异步模式适用于大规模、跨节点、耗时较长的核验任务。两种模式在请求语义、响应行为、错误处理上存在显著差异。
| 对比维度 | 同步模式 (Sync) | 异步模式 (Async) |
|---|---|---|
| 适用场景 | 单节点、单类别快速核验(耗时 < 30s) | 多节点、全类别批量核验(耗时 > 30s) |
| 请求方式 | POST .../checks?mode=sync |
POST .../checks?mode=async |
| 响应状态码 | 200 OK(含完整结果) |
202 Accepted(含任务 ID) |
| 结果获取 | 响应体直接返回核验结果 | 轮询 GET /checks/{id}/result 或等待回调 |
| 超时处理 | 客户端设置请求超时(推荐 60s) | 服务端维护任务超时(默认 600s) |
| 幂等性 | 非幂等,每次触发新核验 | 支持去重,相同 X-Idempotency-Key 返回同一任务 |
3.3.1 同步模式最佳实践
- 超时控制:客户端设置
connectTimeout为 5s,readTimeout为 60s,避免长时间挂起。 - 重试策略:对
5xx状态码采用指数退避重试(初始 1s,最大 30s,最多 3 次)。 - 限流保护:服务端对同步接口实施并发限制(默认 10 并发),超出返回
429 Too Many Requests。
3.3.2 异步模式最佳实践
- 轮询间隔:客户端以
estimatedDuration / 4为初始轮询间隔,最小 5s,最大 60s。 - 幂等去重:客户端在请求头携带
X-Idempotency-Key,服务端在 24 小时内对相同 key 返回同一任务。 - 回调保障:服务端在任务完成后向
callbackUrl发送POST请求,重试 3 次,间隔 10s。
避坑提示:不要在同步模式中传入超过 10 个节点或 3 个核验类别,否则服务端将返回
413 Payload Too Large 并建议切换为异步模式。异步模式必须提供有效的 callbackUrl 或接受默认轮询方式,否则任务完成后结果仅保留 24 小时。