当前位置: 首页 > 知识库问答 >
问题:

Spring Boot微服务API版本控制实现

巫马令
2023-03-14

需要修改Spring Boot微服务的现有契约(请求/响应有效负载),这实际上是破坏性的更改(不向后兼容)。而且在一段时间内支持合同的两个版本--直到所有客户都升级到更新的版本--是至关重要的。

为了实现这一点,已经决定使用URL版本控制策略(如/v1/{resource}和/v2/{resource})。

现在,问题是在代码中实现这一点的最佳方式是什么?以下是两个建议的解决方案

>

  • 扩展版本一(/v1)代码并单独维护它,直到支持该版本。这实质上意味着从master和build/deploy中裁剪分支,并维护同一服务的两个实例,每个实例分别支持v1和v2版本。

    在同一个主分支中,引入一个单独的包(如service.api.v2.request),并将所有api有效负载请求/响应类放在其中,并引入一个新的endpoint控制器来支持(/v2)。这种方法使单个实例能够支持这两个版本。

    以上哪一个是更好的方法?或者有没有其他标准/更好的替代方案来实现这一点?Spring Boot是否为此类需求提供了开箱即用的支持?

  • 共有1个答案

    夹谷茂
    2023-03-14

    这取决于控制器背后有多少共同性。如果各个版本一直到后端都有显著的不同,那么不同的分支可能更容易处理,但如果主要的差异在于控制器路径以及这些方法中涉及的输入和输出对象,那么两个分支可能会导致对两者都应用更改的痛苦,并且每次都要记住这样做--这种情况迟早会错过一个重要的修复。

    这一切都是一种平衡,您需要在您的情况下权衡各种方法的维护成本,包括时间和精力、错误风险以及单独部署的成本。

     类似资料:
    • 我对Kubernetes还很陌生,只是从一个示例项目开始学习。我目前正在运行一个.NET微服务,它需要一个MongoDB作为数据库。微服务被打包到Docker映像中,我创建了一个单独的Helm图表来正确部署我的微服务和所需的MongoDB。 是这样做的吗?还是我错过了什么?所有给我指明正确方向的线索都非常欢迎!

    • 问题内容: 我进入了基于docker的微服务架构,我有3个微服务,它们共同创建了一个产品,例如“ CRM系统”。 现在,我希望我的客户能够随时升级他的产品。我的微服务有3个不同版本,客户应该看哪个?我猜产品版本应该独立于微服务,因为复制一个微服务版本会使我陷入麻烦,而不是根本没有版本。 那么,有什么模式,想法可以应对这种情况吗? 我唯一想到的就是拥有另一个存储库,只要其中一个微服务产生生产就绪的软

    • Eggjs resfulApi 路由版本控制 插件:egg-router-plus 文档:https://github.com/eggjs/egg-router-plus 安装:cnpm i -S egg-router-plus 配置 插件配置 // {app_root}/config/plugin.js exports.routerPlus = { enable: true, pa

    • 版本2: 还是这样做错了?或者更常见的是创建不同的包来保存不同版本的控制器?还是有其他办法?

    • 本文向大家介绍ASP.NET Core3.x API版本控制的实现,包括了ASP.NET Core3.x API版本控制的实现的使用技巧和注意事项,需要的朋友参考一下 前言 一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发。 我们其实可以通过多种方式进行实现我们A

    • 本文向大家介绍Springcloud实现服务多版本控制的示例代码,包括了Springcloud实现服务多版本控制的示例代码的使用技巧和注意事项,需要的朋友参考一下 需求 小程序新版本上线需要审核,如果有接口新版本返回内容发生了变化,后端直接上线会导致旧版本报错,不上线审核又通不过。 之前是通过写新接口来兼容,但是这样会有很多兼容代码或者冗余代码,开发也不容易能想到这一点,经常直接修改了旧接口,于是