【问题标题】:How to implement new version of web services如何实现新版本的Web服务
【发布时间】:2012-11-28 09:12:53
【问题描述】:

我读到这个问题是为了对 Web 服务进行版本控制:

strategies-for-updating-or-versioning-web-services

现在我想问如何实现新版本。

现在在网址上:myUrls/../v1 接受网络服务。现在我想创建新版本:myUrls/../v2。我想保留旧的网络服务,只是在新版本中添加一些新的网络服务。我该怎么做?我需要创建新的端点,或者我可以使用我当前的并且只是改变了一些东西。

谢谢帮助

更新:

我正在使用 spring-ws 和 SOAP

【问题讨论】:

    标签: java web-services


    【解决方案1】:

    这取决于更改的性质。如果您只是在 REST 调用中添加额外的方法,那么理论上,您可以添加到当前服务中,所有其他方法仍然可以工作。

    如果您使用的是合同优先部署,例如 SOAP,那么您将需要版本,因为 WSDL 需要更新。

    这真的取决于 - 您是否希望您的服务在当前版本上向后兼容消费者?如果您乐于在每次进行更改时强迫您的消费者重构他们的代码,那么是的,只需每次更新相同的 URL 端点,但如果我正在使用您的服务,这会让我有些恼火。

    【讨论】:

      【解决方案2】:

      这取决于您如何部署网络服务。

      就个人而言,如果更改是向后兼容的(正如@david99world 指出的那样),那么您只需将新操作添加到现有服务中即可。

      如果更改不兼容(即现有操作的接口已更改),那么我会将新服务打包为新的 EAR/WAR。这样您就可以同时运行这两个服务,因此并非所有服务使用者都需要同时更改/测试/部署他们的代码。通过拥有两个单独的版本,您可以有一个两个服务都可以工作的过渡期(尽管这取决于例如底层数据库更改是否会阻止v1v2 同时工作)。

      此外,如果更改不成功,只需取消部署 v2 WAR/EAR 而不影响 v1 并且保持 WAR/EAR 分开,您就不需要对 v1 执行回归测试就因为你介绍了v2

      由于使用单独的 WAR/EAR,URL 策略很可能必须是 myURLv1/../v1myURLv2/../v2...

      希望这是有道理的。

      【讨论】:

      • 是的,但我不想用相同的代码进行两次战争 = 重复。使用 url v1 的旧客户端应该会看到版本 v2 中的新 Web 服务,所以我需要一些想法如何实现这个
      • 如果您有通用代码,那么您可以随时将其移动到两个版本都使用的 JAR 中。我很欣赏两个 WAR 可能看起来有点矫枉过正,但两个不同的版本处于不同的战争中通常是一件好事,因为很容易向管理类型证明新版本不会错误地使用旧代码......跨度>
      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 2016-11-09
      • 2016-09-12
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多