如何实现新版本的Web服务

时间:2012-11-28 09:12:54

标签: java web-services

我读了这个问题,用于版本化Web服务:

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

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

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

请求帮助

更新:

我正在使用spring-ws和SOAP

2 个答案:

答案 0 :(得分:1)

这取决于变化的性质。如果您只是在REST调用中添加额外的方法,那么从理论上讲,您只需添加到当前服务中,所有其他方法仍然有用。

如果您使用的是合约优先部署(如SOAP),则需要更新版本,因为需要更新WSDL。

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

答案 1 :(得分:0)

这取决于您部署Web服务的方式。

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

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

此外,如果更改失败,则很容易在不影响v2的情况下取消部署v1 WAR / EAR,并且通过将WAR / EAR保持独立而不需要执行回归测试v1只是因为您介绍了v2

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

希望这是有道理的。