3. 弃用策略设计:通知周期、标准头与策略模板
API 弃用不是一次性的技术操作,而是一套面向消费者的沟通与治理流程。设计良好的弃用策略能够降低迁移摩擦、避免生产事故,并为灰度验证提供明确的观测窗口。本节围绕通知周期、HTTP 标准头(Deprecation & Sunset)、超链接语义以及可复用的策略模板展开。
3.1 弃用通知周期:时间窗口与阶段划分
通知周期定义了从“首次宣布弃用”到“完全移除”之间的时间线。不同成熟度的组织应采用不同的窗口长度,但核心原则是:给消费者至少一个完整发布周期的时间进行迁移。
| 阶段 | 时间点 | 消费者可见信号 | 平台侧动作 |
|---|---|---|---|
| Announcement | T+0 | Deprecation Header + 文档标记 | 停止新消费者接入旧版本 |
| Migration Window | T+0 ~ T+90d | Sunset Header + 迁移指南链接 | 灰度流量逐步切至新版本 |
| Hard Sunset | T+90d | 410 Gone / 404 | 旧版本完全下线 |
| Post-Sunset | T+90d ~ T+120d | 无(仅监控残留调用) | 清理路由与文档 |
建议:对于内部 API,通知窗口可缩短至 30 天;对于公开 API,建议至少 90 天。金融、医疗等合规敏感领域应延长至 180 天以上。
3.2 Deprecation Header 标准
Deprecation 响应头是 RFC 8594 定义的标准字段,用于在运行时告知消费者当前版本已被标记为弃用。它不强制消费者立即行动,但提供了明确的信号。
Deprecation: true
Deprecation: Sat, 01 Mar 2025 00:00:00 GMT
Deprecation: true; sunset="2025-06-01T00:00:00Z"
字段语义说明:
- 布尔值:
true表示当前响应来自一个已弃用的 API 版本。 - HTTP-date:表示该版本被标记为弃用的时间点。
- sunset 参数:可选,指明计划移除的时间,与 Sunset Header 配合使用。
注意:Deprecation Header 应始终与
Sunset Header 成对出现。仅返回 Deprecation: true 而不提供移除时间,会增加消费者的不确定性。
3.3 Sunset Header 与超链接
Sunset 响应头明确告知消费者该 API 版本将在何时停止服务。它通常包含一个 HTTP-date 值,并建议附带 Link 头指向迁移文档。
Sunset: Sun, 01 Jun 2025 00:00:00 GMT
Link: <https://api.example.com/docs/v2-migration>; rel="sunset"
超链接的 rel="sunset" 语义允许消费者自动发现迁移资源,实现机器可读的弃用流程。
| Header | 用途 | 示例值 |
|---|---|---|
Deprecation |
标记版本已弃用 | true; sunset="2025-06-01T00:00:00Z" |
Sunset |
声明移除时间 | Sun, 01 Jun 2025 00:00:00 GMT |
Link |
指向迁移文档 | <https://...>; rel="sunset" |
3.4 弃用策略模板
以下模板可直接嵌入 API 网关或 BFF 层,实现标准化的弃用响应注入。
# 弃用策略配置模板 (YAML)
api_deprecation:
# 全局弃用窗口
default_sunset_days: 90
# 按版本覆盖
versions:
v1:
deprecated_at: "2025-03-01T00:00:00Z"
sunset_at: "2025-06-01T00:00:00Z"
migration_url: "https://api.example.com/docs/v1-to-v2"
# 灰度比例:0-100
traffic_percent: 100
v2:
deprecated_at: null
sunset_at: null
migration_url: null
traffic_percent: 0
# 响应头注入规则
headers:
deprecation: true
sunset: "{{ .Version.sunset_at }}"
link: '<{{ .Version.migration_url }}>; rel="sunset"'
灰度集成:在策略模板中预留
traffic_percent 字段,可配合灰度验证系统动态调整旧版本的流量比例,实现“先通知、再切流、后下线”的平滑迁移。
3.5 弃用信号交互流程
下图展示了消费者与 API 网关之间的弃用信号交互过程,涵盖标准头传递与超链接发现。
3.6 策略模板与灰度验证的衔接
弃用策略模板不应孤立存在,它需要与灰度验证系统共享以下关键字段:
- 版本标识:
v1、v2等,用于路由和指标聚合。 - 流量比例:
traffic_percent,灰度系统据此决定是否将请求转发至新版本。 - 弃用时间戳:灰度系统可据此触发告警或自动调整比例。
最佳实践:将弃用策略模板存储在配置中心(如 Consul、etcd),灰度系统与 API 网关实时监听变更。当弃用时间到达时,自动将流量比例从 100% 逐步降至 0%,无需人工介入。