消费者驱动契约

由消费方提出对接口的期望,多方期望汇总成提供方的兼容性边界;新增依赖与字段废弃都能被量化追踪,变更影响范围可审计。

什么是消费者驱动契约

消费者驱动契约(Consumer-Driven Contracts,CDC)由消费方提出对接口的期望,多份期望汇总成提供方必须满足的兼容性边界。每条契约版本化存储,提供方在流水线中验证全部活跃契约通过才允许发布。它让「新增依赖」与「字段废弃」都可被量化追踪,变更影响范围可审计。

基本信息

机制各消费方提交期望测试,生成契约并版本化存储到契约库
判定规则提供方变更须同时满足所有活跃消费方契约
治理要求消费方下线后摘除对应契约,保持活跃集合精炼
常用工具Pact 与 Pact Broker、Spring Cloud Contract 等

典型使用场景

  • 服务拆分:新接口上线前先收集各消费方期望,避免反复联调
  • 接口变更:发布前跑全部活跃契约,提前发现破坏性改动
  • 版本协作:查询消费方与提供方版本组合是否可用,指导发布顺序
  • 下线字段:确认无消费方依赖后再移除,避免线上断裂
  • 多方对接:外部合作方提交契约,纳入统一验证流程
  • 文档替代:契约本身作为接口行为说明,比文档更不易过期

契约协作流程(示意)

契约协作流程(示意)
# 1) 消费方编写期望测试并生成契约
消费方测试: 期望 GET /orders/1001 返回 id 与 status 字段
   -> 生成契约文件并发布到契约库(标记消费方名与版本)
# 2) 提供方流水线验证
提供方构建时拉取所有活跃契约并逐条验证,全部通过才允许发布
# 3) 发布顺序检查
查询「某消费方版本 + 某提供方版本」组合是否兼容
   -> 不兼容时先发提供方或先升级消费方
# 4) 治理
消费方下线后归档其契约;契约变更需双方评审

角色与责任

角色责任交付物
消费方定义真实期望,避免过度约束契约与期望测试
提供方保证全部活跃契约通过验证流水线与兼容性报告
契约库版本化存储与兼容性查询契约索引与发布顺序建议
治理方契约增删评审与清理活跃契约清单
契约覆盖交互格式与语义约定,不替代端到端业务验证:跨多个服务的关键业务流程仍需单独的集成或端到端测试。
消费方数量多时要防契约膨胀:合并同类期望,设置失效与清理机制,否则提供方会被历史契约捆住手脚。

易错点

  • 临时脚本或测试工具也提交契约,噪声淹没真实依赖关系
  • 契约只增不减,提供方不敢做破坏性变更,演进停滞
  • 契约只验证字段存在不验证语义,取值含义变更照样出线上问题
  • 消费方提交的期望超出实际使用范围,提供方被迫维护无用兼容性

数据来源与参考

  • Pact 官方文档:Consumer-Driven Contracts
  • 《Building Microservices(第 2 版)》(Newman)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌