背景:
有很多关于Web服务版本化的信息,我们的决定是使用以下方法来版本化我们的Web服务:
但是,现在我们正在决定如何实际实现这一点,而在这里我们还没有找到关于最佳实践的大量信息。我们使用(Java):
因此,为了保持Web服务的旧版本,我们需要保留旧版本的代码。为此,我们基本上看了两种不同的方法:
1)对于每个新版本,请制作相关代码的完整新副本
这种方法看起来像这样:
com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here
所以,这里我们有重复的代码。我们的想法总之:
2)使用spring仅制作受更改影响的每个类的副本
这种方法意味着使用Spring IoC并让所有版本的Web服务尽可能使用相同的代码。只有当我们进行影响行为/ api的更改时,我们才会创建这些类的新版本。例如:
com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
这两种方法都不是最佳方法,但我们没有找到关于此的更多信息。 所以,我的问题是: 您会使用哪两种方法?或者你会采取完全不同的方法吗?
答案 0 :(得分:6)
从Java生成wsdls时,我会使用包解决方案:
com.company.webservice.v3.
它存在代码重复问题,但是POJO和转换器之间的版本之间存在差异,因此代码重用可能根本不可行。主要优点是,如果你想摆脱旧版本,你只需要删除相关的包。
我会在URL中保留versionnumber,因为你还没有做REST。此外,如果仍使用某些版本,您可以签入访问日志。