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从请求到达、方法路由、状态码决策到统一响应体返回的完整链路。

评分通道API请求与响应流程 客户端 API网关 业务服务 POST/GET/PUT/DELETE 路由 + 认证 方法选择 POST → 创建 GET → 查询 PUT → 更新 / DELETE → 删除 状态码决策 200 / 201 / 400 401 / 403 / 404 / 500 统一响应体 code / message / data / requestId JSON响应 关键原则 • 方法语义化,不滥用 • 状态码精准,不混淆 • 响应体统一,可预测

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可快速关联到具体请求的完整调用链。