3. API设计原则:RESTful规范、资源命名、HTTP方法选择、状态码设计

在信用评分API的设计中,遵循RESTful规范是确保接口可维护性、可扩展性与团队协作效率的基石。本节将围绕资源命名、HTTP方法选择与状态码设计三大核心维度展开,并结合信用评分业务场景给出具体实践指南。

3.1 RESTful核心规范

REST(Representational State Transfer)是一种基于资源的架构风格,强调通过统一的接口对资源进行无状态操作。在信用评分API中,核心资源包括:用户(User)、信用报告(CreditReport)、评分记录(ScoreRecord)、查询授权(Authorization)。

关键约束: 客户端与服务器之间的通信必须是无状态的;每个请求应包含所有必要信息,服务器不保存客户端上下文。
RESTful 信用评分API资源与操作关系 客户端 /users /credit-reports /score-records API 网关 评分引擎 数据存储 风控规则 每个资源通过唯一URI标识,客户端通过HTTP方法对资源进行操作,API网关统一路由与鉴权

3.2 资源命名规范

资源命名应使用名词复数形式,采用小写字母与连字符(kebab-case),避免使用动词或扩展名。以下是信用评分场景中的资源命名对照表:

资源类别 推荐命名 不推荐命名 说明
用户 /users /getUser、/userList 使用名词复数,避免动词
信用报告 /credit-reports /creditReport、/getCreditReport 多单词用连字符连接
评分记录 /score-records /scoreRecord、/queryScore 保持一致性,避免驼峰
查询授权 /authorizations /auth、/checkAuth 完整名词,避免缩写歧义
子资源 /users/{id}/credit-reports /getUserCreditReport 通过层级关系表达从属
最佳实践: 避免在URI中包含版本号以外的动词(如 /createUser),版本号建议放在URI前缀(如 /v1/users)或通过请求头传递。

3.3 HTTP方法选择

每个HTTP方法对应一种标准操作,在信用评分API中应严格遵循语义映射:

  • GET — 查询资源,不改变服务端状态。例如:GET /users/{id}/credit-reports 获取用户信用报告。
  • POST — 创建资源或触发操作。例如:POST /score-records 发起一次评分计算。
  • PUT — 全量替换资源。例如:PUT /users/{id} 更新用户全部信息。
  • PATCH — 部分更新资源。例如:PATCH /authorizations/{id} 更新授权状态。
  • DELETE — 删除资源。例如:DELETE /users/{id}/credit-reports/{reportId} 删除指定报告。
HTTP方法选择决策流程 收到API请求 查询? 创建? GET POST PUT/PATCH/DELETE 是 否 是 否 根据操作语义选择对应方法

3.4 状态码设计

状态码是API响应语义的重要组成部分,必须覆盖成功、客户端错误、服务端错误三大类。信用评分API推荐的状态码体系如下:

状态码 含义 信用评分场景示例
200 OK 请求成功 GET /users/{id} 返回用户信息
201 Created 资源创建成功 POST /score-records 返回新评分记录
204 No Content 删除成功,无返回体 DELETE /authorizations/{id}
400 Bad Request 请求参数错误 缺少必填字段、格式错误
401 Unauthorized 未认证或认证失败 API Key 无效或过期
403 Forbidden 无权限访问资源 用户无权查询他人信用报告
404 Not Found 资源不存在 查询不存在的用户ID
409 Conflict 资源冲突 重复创建已存在的授权记录
422 Unprocessable Entity 业务逻辑校验失败 评分输入数据不满足风控规则
429 Too Many Requests 请求频率超限 超出API调用配额
500 Internal Server Error 服务端内部错误 评分引擎异常
503 Service Unavailable 服务暂时不可用 系统维护或过载
注意: 避免滥用 200 OK 返回业务错误(如“评分失败”),应使用对应的4xx或5xx状态码,并在响应体中提供详细的错误码与错误描述。

3.5 响应体结构规范

统一的响应体结构有助于客户端解析与错误处理。信用评分API推荐以下标准格式:

// 成功响应示例
{
  "code": 0,
  "message": "success",
  "data": {
    "userId": "usr_20240301_001",
    "creditScore": 725,
    "reportId": "rpt_20240301_001"
  },
  "requestId": "req_abc123"
}

// 错误响应示例
{
  "code": 40001,
  "message": "参数校验失败",
  "details": [
    {
      "field": "idNumber",
      "error": "身份证号格式不正确"
    }
  ],
  "requestId": "req_def456"
}

响应体字段说明:

  • code:业务状态码,0表示成功,非0表示具体错误类型。
  • message:人类可读的状态描述。
  • data:成功时的业务数据载体。
  • details:错误详情数组,支持多字段校验错误。
  • requestId:全局唯一请求标识,用于链路追踪与问题排查。
设计要点: HTTP状态码用于表示传输层与协议层的结果,业务状态码用于表示应用层的结果。两者配合使用,既满足RESTful规范,又支持细粒度的业务错误表达。