Sunday面试指南

API 版本管理怎么做?接口升级如何兼容旧客户端?

下面是一段教学用的模拟面试。

🧑‍💻 面试官:接口要升级,怎样兼容旧客户端?

🙋‍♂️ 我:加个 /v2,旧客户端继续用 /v1。

🧑‍💻 面试官:只是新增一个响应字段,也必须升大版本吗?把 amount 从元改成分,字段名和类型都没变,算兼容吗?

🙋‍♂️ 我:还得看字段的含义有没有变化。

🧑‍💻 面试官:新版本已经上线,旧版什么时候能下线?如果用户手机上的旧 App 半年没更新呢?

版本号只是在区分契约。真正要保护的是:旧客户端继续按原来的方式调用,还能得到原来承诺的行为。

面试速答(60 秒版)

API 兼容性要看调用方依赖的契约,包括字段类型、是否必填、返回值含义、默认行为和错误处理,不只是 URL 有没有变化。

新增可选能力通常可以在既有版本里演进,但需要保证旧请求仍有原来的行为。删除字段、改变类型、增加必填输入,或者改变金额单位等语义,都可能破坏旧客户端。

确实需要不兼容升级时,可以通过路径、请求头等方式明确版本,并为旧版保留适配层。版本方式本身没有替我们解决兼容问题。

上线还要配合契约测试、调用方识别、迁移通知和退役计划。不能仅因为新版可用,就直接关闭仍有人使用的旧接口。

API版本通过适配层保护旧客户端契约

知识点详解:兼容的不是字段表,而是调用方式

哪些变化最容易被漏掉?

假设旧接口返回 amount: 100,约定单位是元。升级后还是返回数字 100,却改成单位为分,类型检查可能完全通过,用户看到的金额含义已经变了。

再比如原来不传 page_size 会返回全部数据,后来默认只返回第一页。即使新增参数是可选的,旧客户端没有分页逻辑,也可能误以为结果只有这些。

所以兼容性检查至少要覆盖输入要求、输出结构、默认行为和业务语义。Google 的 AIP-180也特别提醒:新增能力必须维持旧调用行为,响应枚举增加新值同样要谨慎。

API字段结构没变也可能因为单位或默认行为变更而不兼容

新增字段为什么也可能出问题?

多数设计良好的客户端应该容忍未知响应字段,但某些严格解析器、生成代码或签名计算可能不允许额外字段。服务端不能在没有了解客户端契约的情况下,把“新增永远兼容”作为结论。

新增响应枚举值也很常见。旧客户端可能只认识 pending 和 done,遇到新值 paused 时进入异常分支。因此需要提前定义未知值处理规则,而不是等上线后再希望客户端自动理解。

对自己能控制、能同时升级的内部调用方,兼容策略可以更紧;面对外部客户或更新节奏不可控的 App,就要保留更长的演进空间。

路径版本和请求头版本怎么选?

路径版本容易看出请求属于哪套契约,调试、日志和路由也比较直观。请求头或媒体类型版本可以让资源路径保持一致,但网关、缓存和排错工具都要正确识别版本差异。

选择要与现有协议和基础设施匹配。不能说把 /v1 改成请求头,就天然更加 REST 或更容易维护。

更重要的是版本边界应该清楚。所有小改动都复制一套完整接口,会增加维护成本;真正的不兼容变化却偷偷混进旧版,又会让版本失去意义。

适配层负责守住旧契约

假设新版内部模型更复杂,旧版仍需要原来的字段。可以让不同版本的入口转换请求,再把统一业务结果转换成各版本的响应。

这种做法不等于旧版永远没有成本。适配逻辑、测试样例、文档和监控都要维护;有些语义变化也根本无法无损转换。

因此迁移计划应该明确:哪些变化兼容,哪些需要客户端升级,旧版的支持范围是什么,以及满足什么条件后才考虑退役。

怎样证明旧客户端还能用?

保留旧版真实契约样例,测试旧请求、旧响应解析和默认行为。不能只检查 OpenAPI 文档里是否还有那个字段。

监控还要区分版本与调用方。请求量下降不等于没有重要客户使用;客户端是否在线、是否能更新、是否依赖低频接口,都影响下线判断。

退役日期需要提前沟通,并准备异常回退或延期方案。对外承诺要和实际支持能力一致,不能只写一封“新版更好”的通知。

面试官继续追问

直接给所有接口加版本号就够了吗?

不够。版本号只是标识,没有明确契约、兼容测试和迁移规则,照样会在同一版本里破坏旧行为。

bug 修复算不兼容变化吗?

要看客户端是否依赖该行为,以及既有契约如何定义。安全修复还可能要求优先消除风险,但仍需评估影响和通知,不能用“是 bug”跳过所有迁移工作。

内部接口也需要长期保留旧版吗?

不一定。能协调所有调用方并验证整体升级时,可以缩短兼容期。前提是确实知道调用方,而不是以为只有本团队使用。

面试速记卡

  • 兼容对象:输入、输出、默认行为与语义契约。
  • 新增能力:也要保证旧请求维持原行为。
  • 不兼容升级:明确版本,必要时保留适配层。
  • 验证方式:旧客户端契约测试,不只检查文档字段。
  • 退役依据:调用方迁移与支持承诺,不是新版上线时间。

公司面试真题

这道题暂未收录可核验的公司真题来源。你可以先阅读本文解析,或浏览已收录的公司面试真题。

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历