什么是消费者驱动契约
消费者驱动契约(Consumer-Driven Contracts,CDC)由消费方提出对接口的期望,多份期望汇总成提供方必须满足的兼容性边界。每条契约版本化存储,提供方在流水线中验证全部活跃契约通过才允许发布。它让「新增依赖」与「字段废弃」都可被量化追踪,变更影响范围可审计。
基本信息
| 机制 | 各消费方提交期望测试,生成契约并版本化存储到契约库 |
|---|---|
| 判定规则 | 提供方变更须同时满足所有活跃消费方契约 |
| 治理要求 | 消费方下线后摘除对应契约,保持活跃集合精炼 |
| 常用工具 | Pact 与 Pact Broker、Spring Cloud Contract 等 |
典型使用场景
- 服务拆分:新接口上线前先收集各消费方期望,避免反复联调
- 接口变更:发布前跑全部活跃契约,提前发现破坏性改动
- 版本协作:查询消费方与提供方版本组合是否可用,指导发布顺序
- 下线字段:确认无消费方依赖后再移除,避免线上断裂
- 多方对接:外部合作方提交契约,纳入统一验证流程
- 文档替代:契约本身作为接口行为说明,比文档更不易过期
契约协作流程(示意)
契约协作流程(示意)
# 1) 消费方编写期望测试并生成契约
消费方测试: 期望 GET /orders/1001 返回 id 与 status 字段
-> 生成契约文件并发布到契约库(标记消费方名与版本)
# 2) 提供方流水线验证
提供方构建时拉取所有活跃契约并逐条验证,全部通过才允许发布
# 3) 发布顺序检查
查询「某消费方版本 + 某提供方版本」组合是否兼容
-> 不兼容时先发提供方或先升级消费方
# 4) 治理
消费方下线后归档其契约;契约变更需双方评审角色与责任
| 角色 | 责任 | 交付物 |
|---|---|---|
| 消费方 | 定义真实期望,避免过度约束 | 契约与期望测试 |
| 提供方 | 保证全部活跃契约通过 | 验证流水线与兼容性报告 |
| 契约库 | 版本化存储与兼容性查询 | 契约索引与发布顺序建议 |
| 治理方 | 契约增删评审与清理 | 活跃契约清单 |
契约覆盖交互格式与语义约定,不替代端到端业务验证:跨多个服务的关键业务流程仍需单独的集成或端到端测试。
消费方数量多时要防契约膨胀:合并同类期望,设置失效与清理机制,否则提供方会被历史契约捆住手脚。