4. 请求与响应规范:HTTP方法选择、状态码语义与统一响应体结构
在评分通道API的设计中,请求与响应规范是保障前后端协作效率、降低集成故障率的基石。本章围绕三个核心维度展开:HTTP方法选择(POST/GET/PUT/DELETE)、状态码语义(200/201/400/401/403/404/500)以及统一响应体结构。遵循这些规范,可使API具备自描述性、可预测性和可监控性。
4.1 HTTP方法选择:语义化操作映射
每个HTTP方法对应一种资源操作语义。评分通道API应严格遵循RESTful原则,避免方法滥用(如用GET执行写操作、用POST执行查询)。
| HTTP方法 | 操作语义 | 评分通道典型场景 | 请求体 | 响应体 |
|---|---|---|---|---|
| POST | 创建资源 / 触发动作 | 提交评分任务、创建评分规则 | 有(JSON) | 201 + 新资源ID |
| GET | 查询资源 | 获取评分结果、查询通道状态 | 无 | 200 + 资源数据 |
| PUT | 全量替换 / 更新资源 | 更新评分配置、重置通道参数 | 有(JSON) | 200 或 204 |
| DELETE | 删除资源 | 删除过期评分任务、移除通道 | 无 | 204 或 200 |
最佳实践:对于幂等性要求高的操作(如重复提交同一评分任务),建议在POST请求中引入幂等键(Idempotency-Key)头部,防止重复创建。
4.2 状态码语义:精准表达处理结果
状态码是API与调用方之间的“信号灯”。评分通道API应覆盖以下关键状态码,避免统一返回200然后在业务体内包装错误。
- 200 OK:GET、PUT请求成功,响应体包含完整资源数据。
- 201 Created:POST创建成功,响应体包含新资源ID及访问路径。
- 400 Bad Request:请求参数校验失败(如评分分数超出范围、缺少必填字段)。
- 401 Unauthorized:缺少认证凭证或凭证已过期。
- 403 Forbidden:认证通过但无权限操作该资源(如非管理员删除通道)。
- 404 Not Found:请求的资源不存在(如查询不存在的评分任务ID)。
- 500 Internal Server Error:服务端未捕获的异常,需结合监控告警处理。
避坑提醒:不要将业务逻辑错误(如“评分规则冲突”)映射为500状态码。500只应代表基础设施或未预期异常,业务错误应使用400系列状态码并附带详细错误码。
4.3 统一响应体结构:可预测的数据契约
所有响应体(无论成功或失败)应遵循统一JSON结构,便于客户端做通用解析和错误处理。
{
"code": 0, // 业务状态码:0=成功,非0=具体错误码
"message": "success", // 人类可读的描述信息
"data": { // 实际业务数据,可为null
"taskId": "task_20240501_001",
"score": 95,
"status": "completed"
},
"requestId": "req_abc123" // 全链路追踪ID,用于日志关联
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
code |
int | 是 | 0表示成功,非0表示业务错误码(如1001=参数缺失,1002=评分超限) |
message |
string | 是 | 成功时为"success",失败时为具体错误描述 |
data |
object/null | 是 | 业务数据载体,失败时通常为null |
requestId |
string | 是 | 全链路追踪ID,用于监控和排障 |
4.4 请求与响应流程总览
下图展示了评分通道API从请求到达、方法路由、状态码决策到统一响应体返回的完整链路。
4.5 错误响应示例与监控要点
以下展示两种典型错误场景下的统一响应体,帮助开发者和监控系统快速定位问题。
场景一:参数校验失败(400 Bad Request)
{
"code": 1001,
"message": "评分分数超出允许范围(0-100)",
"data": null,
"requestId": "req_20240501_002"
}
场景二:认证凭证过期(401 Unauthorized)
{
"code": 2001,
"message": "AccessToken已过期,请重新获取",
"data": null,
"requestId": "req_20240501_003"
}
| 监控指标 | 告警阈值 | 关联状态码 |
|---|---|---|
| 4xx错误率 | > 5% 持续5分钟 | 400, 401, 403, 404 |
| 5xx错误率 | > 1% 持续3分钟 | 500 |
| 平均响应时间 | > 2000ms 持续5分钟 | 所有状态码 |
| requestId缺失率 | > 0% | 所有响应 |
监控集成建议:在API网关层统一捕获
requestId,并将其注入到日志、指标和链路追踪系统中。当出现500错误时,通过requestId可快速关联到具体请求的完整调用链。