ICP备案

备案站点的接口版本管理与兼容性治理

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年9月15日

你能回滚代码,但回滚不了用户手机里的 App

Web 端改接口相对安全:前后端一起发布,出问题一起回滚。但只要接口还服务着 App、小程序、第三方对接或者开放平台,情况就完全不同了——老版本客户端会长期存在,你无法强制所有人升级。这就是接口兼容性治理的核心约束。

关键要点

  • 判断一个改动是不是破坏性变更,标准是「老调用方不改代码还能不能正常工作」。
  • 兼容演进的第一原则是加法优先:加字段安全,删字段和改语义危险。
  • 下线接口要走公告、监控、日落三步,不能直接关。
  • 客户端要实现「宽容读取」:遇到未知字段忽略,而不是报错。

破坏性变更清单

变更 是否破坏 说明
新增可选字段 最安全的演进方式
新增必填请求参数 老调用方不传直接失败
删除或重命名响应字段 老客户端解析报错或显示空白
修改字段类型 数字改字符串是经典事故
收紧参数校验 原本能过的请求突然被拒
修改字段语义 最隐蔽,格式没变但含义变了
新增错误码 视情况 老客户端可能落入未处理分支
修改分页默认值 调用方按旧默认值写死了逻辑

最危险的一类是语义变更:字段名和类型都没动,但「金额」从「元」变成了「分」。接口测试全绿,线上金额全错。这类变更必须当作删除旧字段、新增新字段来处理。

加法优先的演进策略

需要替换一个字段时,用和数据库迁移同样的三步法:扩展 → 切换 → 收敛

  1. 新字段与旧字段并存,服务端同时返回两者。
  2. 客户端逐步改用新字段,观察旧字段调用量下降。
  3. 旧字段调用量归零且老版本淘汰后,才删除旧字段。

这套节奏和表结构变更完全一致,见 数据库变更与在线 DDL 实践。关键点是三步要分三次发布,合并成一次就失去了随时回滚的能力。

三种版本化方式

方式 示例 优点 代价
路径版本 /api/v2/order 直观、易路由、易灰度 版本多了代码分叉
请求头版本 Api-Version: 2 URL 干净 调试与缓存不直观
参数版本 ?version=2 改动最小 容易被缓存与代理忽略

多数中小团队用路径版本就够了。但要提醒的是:版本号不是免费的,每多一个在线版本就多一份维护和测试成本。优先用兼容演进解决问题,版本升级留给真正无法兼容的重构。

接口下线的四步流程

  1. 公告:明确下线日期,给调用方留出足够时间。
  2. 监控:统计老接口的调用量与来源,知道还有谁在用,指标采集见 可观测性建设
  3. 日落:先返回弃用标记,再逐步降级(限速、部分时段返回错误),观察影响面。
  4. 下线:调用量归零后再关闭,并保留一段时间的回滚能力。

跳过第 2 步是最常见的失败原因:以为没人用了,一关就有企业客户打电话过来。

客户端侧的约束

  • 宽容读取:解析响应时忽略未知字段,不要用严格模式直接抛异常。
  • 兜底渲染:字段缺失时显示占位而不是白屏或崩溃。
  • 强制升级开关:提前预埋最低版本控制能力,否则出事时毫无办法。
  • 未知错误码兜底:归入通用错误提示,而不是走进未定义分支。

上线节奏与验证

接口变更要按灰度节奏发布,先小比例放量观察错误率与老客户端表现,见 灰度发布与蓝绿部署;兼容性用例应纳入流水线,每次发布自动回归,见 CI/CD 自动化部署。上线后重点盯老版本客户端的错误率曲线,而不只看整体成功率——整体看着正常,老版本可能已经全挂了,前端侧的真实错误采集见 前端性能与错误监控

常见坑

  • 直接改字段类型:老客户端解析崩溃。
  • 偷偷改语义:所有自动化测试都发现不了。
  • 不统计调用来源就下线:第三方对接方直接受影响。
  • 版本无限增长:五个版本同时在线,没人敢动任何一个。
  • 只按整体成功率判断:老版本用户已经全部失败却看不出来。

常见问题

什么时候该升大版本,什么时候在原版本上兼容演进?

能用加法解决的,一律在原版本演进。只有当资源模型或语义整体重构、无法在同一套接口里兼容表达时,才升版本。每个在线版本都要长期维护,不要轻易开新的。

老接口要保留多久?

看客户端类型:Web 端通常几周即可;App 要看版本分布,常见做法是等到老版本占比降到很低时再下线,并保留强制升级作为兜底手段。

内部服务之间的接口也需要这么严格吗?

需要,但流程可以简化。内部服务同样存在发布顺序问题:A 先发、B 后发,中间那段时间两边版本不一致。兼容窗口能让两个服务独立发布、独立回滚。

怎么知道还有哪些调用方在用老接口?

在接入层按接口路径、客户端版本、来源标识统计调用量,并在响应里带上弃用标记。这些数据要在公告之前就开始采集,否则公告期结束你依然不知道会影响谁。

资料来源

主流 API 设计与版本管理公开实践资料,以及 HTTP 语义相关标准文档中关于弃用与兼容处理的说明。本文为通用工程说明,仅供参考,具体策略以实际业务与客户端分布为准。

相关阅读

网站访问日志留存与安全合规运维要点

为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …

网站新增域名如何补充接入备案

企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…

备案信息年度核查该如何配合应对

部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …

备案号在网站上的规范展示与使用要求

网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…

备案注销之后重新申请要注意什么

有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…

备案信息变更有没有时效要求

备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…

公司迁址之后备案地址信息如何更新

企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…

备案预留手机号邮箱变更该如何更新

备案信息中登记的手机号和邮箱,是管局与接入服务商联系网站负责人的主要渠道,用于发送核查通知、验证短信、审核结果等重要信息。这些联系方式一旦更换却未同步更新,容易导致关键通知被漏收。 常见需要更新的场景 负责人更换手机号或离职导致原号码停用; 企业邮箱系统迁移,原邮箱地址不再使用; 备案负责人变更,联系方式随之更换。 …

系统学习