3. 信用评分API基础:RESTful API设计原则与常见端点

在开始回放验证之前,必须理解信用评分API的底层设计哲学与接口契约。本章将聚焦RESTful架构在评分场景下的落地方式,并拆解申请评分、行为评分等核心端点的请求/响应结构。

3.1 RESTful API设计原则在评分场景中的映射

信用评分API遵循REST(Representational State Transfer)风格,将评分模型封装为资源,通过标准HTTP方法进行操作。以下表格对比了通用REST原则与评分API的具体实现:

REST原则 评分API实现 示例
资源导向 将“评分申请”视为资源,而非RPC调用 POST /v1/credit-scores/applications
无状态 每次请求携带完整上下文(如客户ID、产品类型) 请求体包含 customer_id、product_code
统一接口 使用标准HTTP动词 + JSON格式 GET 查询评分记录,POST 发起评分
可缓存 评分结果支持短时缓存(如TTL=5分钟) 响应头 Cache-Control: max-age=300
分层系统 网关层、评分引擎层、数据源层分离 API Gateway → 评分服务 → 特征数据库
回放验证要点: 无状态原则意味着回放时不能依赖会话保持。每次回放请求必须独立构造完整的请求体,包括时间戳、客户标识等上下文字段。

3.2 常见信用评分API端点详解

信用评分API通常按业务阶段划分为三大类:申请评分、行为评分和催收评分。本课程重点覆盖前两类。

3.2.1 申请评分端点(Application Scoring)

申请评分用于新客户准入决策,通常在客户提交贷款申请时调用。典型端点设计如下:

POST /v1/credit-scores/applications
Content-Type: application/json

{
  "request_id": "REQ-20250321-001",
  "customer": {
    "customer_id": "CUST-10086",
    "id_type": "ID_CARD",
    "id_number": "110101199001011234"
  },
  "product": {
    "product_code": "PERSONAL_LOAN",
    "loan_amount": 50000,
    "loan_term_months": 12
  },
  "extra_features": {
    "channel": "ONLINE_APP",
    "device_fingerprint": "FP-abc123"
  }
}

响应示例:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "request_id": "REQ-20250321-001",
  "score": 725,
  "decision": "APPROVE",
  "reason_codes": ["R01", "R03"],
  "score_card_version": "v2.3.1",
  "timestamp": "2025-03-21T10:30:00Z"
}

申请评分端点的关键字段说明:

字段 类型 说明 回放验证关注点
request_id string 幂等键,防止重复评分 相同request_id应返回相同结果
score integer 评分值,范围300-850 与历史回放记录精确匹配
decision string 决策结果:APPROVE/REJECT/REVIEW 决策逻辑是否与回放一致
reason_codes array 拒绝或降额原因码 原因码顺序和内容需一致

3.2.2 行为评分端点(Behavior Scoring)

行为评分用于存量客户的风险动态监控,基于还款、消费、查询等行为数据定期更新评分。典型端点设计:

POST /v1/credit-scores/behaviors
Content-Type: application/json

{
  "request_id": "BEH-20250321-001",
  "customer_id": "CUST-10086",
  "observation_date": "2025-03-20",
  "behavior_data": {
    "total_repayment_amount": 12000,
    "overdue_days_max": 0,
    "credit_utilization_rate": 0.35,
    "recent_inquiry_count_30d": 2
  }
}

响应示例:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "request_id": "BEH-20250321-001",
  "behavior_score": 680,
  "score_trend": "STABLE",
  "risk_level": "LOW",
  "next_review_date": "2025-04-20",
  "timestamp": "2025-03-21T12:00:00Z"
}
申请评分 vs 行为评分核心差异:
  • 数据来源:申请评分依赖外部征信+申请表;行为评分依赖内部交易流水。
  • 更新频率:申请评分一次性;行为评分按月/按周周期性更新。
  • 回放策略:申请评分回放需固定时间点;行为评分回放需对齐观察日期。

3.3 评分API的通用架构模式

下图展示了信用评分API的典型分层架构,回放验证工具需要模拟客户端请求,穿透网关直达评分引擎:

信用评分API分层架构 客户端 / 回放工具 API 网关 评分引擎(Score Engine) 数据源 征信接口 内部交易库 黑名单库 回放验证位置:客户端 → API网关,模拟真实请求链路,不修改下游数据源

3.4 端点版本管理与幂等性设计

信用评分API必须支持版本演进,同时保证回放验证时历史版本可追溯。常见版本策略:

  • URI版本控制: /v1/credit-scores/applications → /v2/credit-scores/applications
  • 请求头版本控制: Accept: application/vnd.credit-score.v2+json
  • 幂等性保障: 使用 request_id 作为幂等键,相同ID重复请求返回首次结果
回放验证陷阱: 如果API版本升级导致评分逻辑变化,回放时需明确指定版本号。未指定版本的回放请求可能被路由到最新版,造成结果偏差。

3.5 端点参数对比速查表

以下表格汇总了申请评分与行为评分端点的参数差异,便于回放脚本编写时快速对照:

参数维度 申请评分 行为评分
请求路径 /v1/credit-scores/applications /v1/credit-scores/behaviors
核心标识 customer_id + product_code customer_id + observation_date
特征来源 征信报告、申请表 内部交易流水、还款记录
评分频率 一次性(申请时) 周期性(月/周)
响应决策 APPROVE / REJECT / REVIEW 风险等级 + 趋势标记
缓存策略 短缓存(5-15分钟) 长缓存(1-7天)

3.6 回放验证的端点适配策略

在回放验证中,需要将历史录制的请求重新发送到目标端点。以下是适配策略的步骤列表:

  1. 端点映射: 将录制时的端点路径映射到当前测试环境的对应路径(如 /v1/credit-scores/applications → /test/v1/credit-scores/applications)。
  2. 请求体清洗: 移除时间敏感字段(如 timestamp)或替换为回放时的固定值。
  3. 幂等键复用: 保留原始 request_id,确保重复回放不会产生副作用。
  4. 版本对齐: 检查录制时的API版本,在回放请求头中显式声明。
  5. 响应比对: 将回放响应与录制响应进行字段级比对,重点关注 score、decision、reason_codes。
实战建议: 在回放脚本中为每个端点编写独立的适配器函数,将录制请求转换为当前环境可执行的请求。这样当端点版本升级时,只需修改适配器逻辑,无需重写整个回放流程。