我为版本控制 Web 服务阅读了这个问题:
现在我想问如何实现新版本。
现在在网址上:myUrls/../v1
接受网络服务。现在我想创建新版本: myUrls/../v2
. 我想保留旧的网络服务,只是在新版本中添加一些新的网络服务。我该怎么做?我需要创建新的端点,或者我可以使用我当前的并且只是改变了一些东西。
谢谢帮助
更新:
我正在使用 spring-ws 和 SOAP
我为版本控制 Web 服务阅读了这个问题:
现在我想问如何实现新版本。
现在在网址上:myUrls/../v1
接受网络服务。现在我想创建新版本: myUrls/../v2
. 我想保留旧的网络服务,只是在新版本中添加一些新的网络服务。我该怎么做?我需要创建新的端点,或者我可以使用我当前的并且只是改变了一些东西。
谢谢帮助
更新:
我正在使用 spring-ws 和 SOAP
这取决于变化的性质。如果您只是在 REST 调用中添加额外的方法,那么理论上,您可以添加到当前服务中,所有其他方法仍然可以使用。
如果您使用的是合同优先部署,例如 SOAP,那么您将需要版本,因为 WSDL 需要更新。
这真的取决于 - 您是否希望您的服务在当前版本上向后兼容消费者?如果您乐于在每次进行更改时强迫您的消费者重构他们的代码,那么是的,只需每次更新相同的 URL 端点,但如果我正在使用您的服务,这会让我有些恼火。
这取决于您如何部署 Web 服务。
就个人而言,如果更改是向后兼容的(正如@david99world 指出的那样),那么您只需将新操作添加到现有服务中。
如果更改不兼容(即现有操作的接口已更改),那么我会将新服务打包为新的 EAR/WAR。这样您就可以同时运行这两个服务,因此并非所有服务使用者都需要同时更改/测试/部署他们的代码。通过拥有两个单独的版本,您可以拥有两个服务都可以工作的过渡期(尽管这取决于例如底层数据库更改是否会阻止v1
与v2
.
此外,如果更改不成功,很容易在v2
不影响的情况下取消部署 WAR/EAR,v1
并且通过保持 WAR/EAR 分开,您不需要v1
仅仅因为引入v2
.
由于使用单独的 WAR/EAR,URL 策略很可能必须是myURLv1/../v1
并且myURLv2/../v2
......
希望这是有道理的。