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

时间:2020-04-02 19:59:54

标签: java spring-boot microservices

需要修改Spring Boot Microservice的现有合同(请求/响应有效负载),这些合同本质上是重大更改(不向后兼容)。并且必须同时支持合同的两个版本,直到所有客户将自己升级到较新的版本为止。

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

现在,问题是用代码实现此功能的最佳方法是什么? 以下是两种建议的解决方案

  1. 分出第一版( / v1 )代码,并分别对其进行维护,直到支持该版本为止。 从本质上讲,这意味着从主分支中删除该分支,并从该分支中​​进行构建/部署,并维护同一服务的两个实例,每个实例分别支持 v1 v2 版本。

  2. 在同一master分支中,引入一个单独的包(例如 service.api.v2.request ),并将所有api负载请求/响应类放入其中,并引入一个新的终结点支持( / v2 )的控制器。这种方法使单个实例可以同时支持两个版本。

以上哪个是更好的方法?还是有其他标准/更好的选择来实现这一目标? Spring Boot是否提供任何开箱即用的支持来满足此类需求?

1 个答案:

答案 0 :(得分:1)

这取决于控制器背后有多少共同点。如果版本一直到后端都有很大的不同,则可能更容易使用不同的分支,但是如果主要区别在于控制器路径以及这些方法中涉及的输入和输出对象,则可能会有2个分支导致对两者都应用更改的痛苦,并且每次都记得要这样做-在这种情况下,迟早会错过重要的修复程序。

这是一个平衡点,您需要在时间和精力,错误风险以及单独部署的成本方面权衡您的方法的维护成本。