【问题标题】:Spring Boot Microservice API Versioning ImplementationSpring Boot 微服务 API 版本控制实现
【发布时间】:2020-07-14 22:13:56
【问题描述】:

需要修改 Spring Boot 微服务的现有合约(请求/响应负载),这本质上是重大更改(不向后兼容)。并且必须在一段时间内支持这两个版本的合同 - 直到所有客户端都将自己升级到新版本。

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

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

  1. 分支出版本一 (/v1) 代码并单独维护它,直到支持此版本。 这实质上意味着从 master 中删除分支并从此分支中构建/部署,并维护同一服务的两个实例,每个实例分别支持 v1v2 版本。

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

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

【问题讨论】:

    标签: java spring-boot microservices


    【解决方案1】:

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

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

    【讨论】:

    • 嗯.. 我明白你的意思。但是,有兴趣了解它通常是如何完成的。在微服务架构中是否有任何标准或推荐的实现方式?
    • 我怀疑根据您阅读的内容,您会发现人们认为这两种方法都是标准的。我认为与微服务或 API 相关的许多事物一样,有一些标准方法可以定义事物从外部的外观,例如客户端如何决定他们使用的版本,但实现的标准方法较少。我倾向于在 Netflix 上寻求关于微服务问题的可靠和值得信赖的意见,尽管我知道他们现在已经放弃了大部分内部开发。
    猜你喜欢
    • 2017-01-21
    • 2018-03-28
    • 1970-01-01
    • 2023-03-16
    • 2021-02-06
    • 2021-01-05
    • 2016-01-17
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多