3、接口协议基础:RESTful API设计原则、HTTP方法、状态码、认证方式(OAuth2.0/Basic Auth)
在供应商CAPA接口调用场景中,追溯平台与OA系统之间的整改任务同步,本质上是两个系统通过HTTP协议进行资源状态的对账与流转。理解RESTful API的设计原则、HTTP方法、状态码以及认证方式,是确保接口稳定、安全、可维护的基础。
3.1 RESTful API 设计原则
REST(Representational State Transfer)是一种基于资源的架构风格,强调通过统一的接口对资源进行无状态操作。在CAPA同步场景中,我们将“整改任务”视为核心资源,每个任务拥有唯一的URI。
| 原则 | 说明 | CAPA场景示例 |
|---|---|---|
| 资源导向 | 使用名词而非动词定义URI | /api/v1/capa-tasks/{taskId} |
| 无状态 | 每次请求包含所有必要信息,服务端不保存客户端上下文 | 请求头携带认证令牌,请求体包含完整任务数据 |
| 统一接口 | 使用标准HTTP方法操作资源 | GET查询、POST创建、PUT全量更新、PATCH部分更新 |
| 可缓存 | 响应明确标识是否可缓存 | GET任务列表可缓存,PATCH状态变更不可缓存 |
| 分层系统 | 客户端不直接感知中间层(网关、负载均衡) | API网关统一处理认证与限流 |
设计要点:URI中避免出现动词(如
/createTask),应使用 POST /capa-tasks。版本号建议放在路径中(如 /v1/),便于后续迭代。
3.2 HTTP 方法与CAPA操作映射
每个HTTP方法对应一种标准操作。在追溯平台与OA系统的任务同步中,方法选择直接影响接口的幂等性与安全性。
| HTTP方法 | 操作语义 | 幂等性 | CAPA同步场景 |
|---|---|---|---|
| GET | 查询资源 | 是 | OA系统查询待处理的整改任务列表 |
| POST | 创建资源 | 否 | 追溯平台向OA推送新的整改任务 |
| PUT | 全量替换资源 | 是 | OA系统回传整改完成后的完整任务数据 |
| PATCH | 部分更新资源 | 否 | OA系统仅更新任务状态(如“进行中”→“已完成”) |
| DELETE | 删除资源 | 是 | 追溯平台撤销已关闭的无效任务 |
避坑提示:POST创建任务时,建议在响应头中返回
Location 字段指向新资源URI。PATCH操作应使用JSON Patch或Merge Patch格式,避免全量覆盖导致数据丢失。
3.3 HTTP 状态码与错误处理
状态码是接口调用结果的直接反馈。在CAPA同步中,合理使用状态码可以大幅降低排查问题的成本。
| 分类 | 状态码 | 含义 | CAPA场景示例 |
|---|---|---|---|
| 成功 | 200 OK | 请求成功 | GET查询任务列表成功 |
| 201 Created | 资源创建成功 | POST推送新任务成功 | |
| 204 No Content | 操作成功,无返回体 | DELETE删除任务成功 | |
| 客户端错误 | 400 Bad Request | 请求参数错误 | 缺少必填字段“taskOwner” |
| 401 Unauthorized | 未认证或认证失败 | 令牌过期或无效 | |
| 404 Not Found | 资源不存在 | 查询不存在的任务ID | |
| 服务端错误 | 500 Internal Server Error | 服务端内部异常 | 数据库连接失败 |
| 503 Service Unavailable | 服务暂时不可用 | OA系统正在重启 |
最佳实践:错误响应体应包含
errorCode、message 和 details 字段,便于客户端程序化处理。例如:{
"errorCode": "TASK_NOT_FOUND",
"message": "未找到指定的整改任务",
"details": "taskId: CAPA-2025-00123"
}
3.4 认证方式:Basic Auth 与 OAuth2.0
在系统间接口调用中,认证是安全的第一道防线。Basic Auth适用于内部信任环境,OAuth2.0适用于需要细粒度权限控制的场景。
3.4.1 Basic Auth
将用户名和密码以 Base64 编码后放入 Authorization 请求头。由于仅编码未加密,必须搭配HTTPS使用。
// 请求头示例
Authorization: Basic base64(username:password)
// 示例:用户名为 "capa_sync",密码为 "secret@2025"
// 拼接后为 "capa_sync:secret@2025"
// Base64编码后为 "Y2FwYV9zeW5jOnNlY3JldEAyMDI1"
Authorization: Basic Y2FwYV9zeW5jOnNlY3JldEAyMDI1
安全警告:Basic Auth每次请求都携带明文密码的编码形式,建议仅用于开发环境或内部网络。生产环境必须使用OAuth2.0或。
3.4.2 OAuth2.0 客户端凭证模式
在系统间集成(M2M,Machine-to-Machine)场景中,客户端凭证模式是最常用的方式。追溯平台作为客户端,使用自己的 client_id 和 client_secret 向授权服务器获取 access_,后续请求携带该令牌。
// 第一步:获取令牌
POST /oauth/
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=capa_trace_platform
&client_secret=your_client_secret
// 响应示例
{
"access_": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"_type": "Bearer",
"expires_in": 3600
}
// 第二步:携带令牌调用API
GET /api/v1/capa-tasks
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
选型建议:如果OA系统支持OAuth2.0,优先使用客户端凭证模式。令牌有效期建议设置为1小时,并实现令牌自动刷新逻辑,避免因令牌过期导致同步中断。
3.5 认证方式对比与选择
| 维度 | Basic Auth | OAuth2.0 客户端凭证 |
|---|---|---|
| 安全等级 | 低(依赖HTTPS) | 高(令牌+签名) |
| 凭证管理 | 静态密码,难以轮换 | 支持令牌过期与刷新 |
| 权限粒度 | 无(所有资源) | 支持scope限定 |
| 审计追踪 | 困难 | 令牌可绑定调用方身份 |
| 适用场景 | 开发测试、内部工具 | 生产环境、跨系统集成 |
实战建议:在供应商CAPA接口中,建议追溯平台作为OAuth2.0客户端,OA系统作为资源服务器。如果OA系统不支持OAuth2.0,可退而使用Basic Auth,但必须启用HTTPS并定期轮换密码。