gpt4 book ai didi

java - 如何处理版本化 SOAP Web 服务的代码?

转载 作者:太空狗 更新时间:2023-10-29 22:41:28 25 4
gpt4 key购买 nike

背景:

  • 我们的网络服务是公司内部的,但有很多不同的系统使用它们
  • 我们将努力尽可能地弃用/删除旧版本的 api

有很多关于网络服务版本控制的信息,我们决定使用以下方法对我们的网络服务进行版本控制:

  • 在 URL 中保留版本(我知道有些人反对这个,但主要是关于 REST 服务)
  • 在命名空间中保留版本。

但是,现在我们正在决定如何实际实现它,在这里我们还没有找到那么多的最佳实践信息。我们使用(Java):

  • 用于定义我们的网络服务(和网络服务 api)的注释
  • 使用 XML 注释注释的 POJO bean,以定义内容
  • 用于与业务层和 web 服务 pojo 相互转换的转换器类
  • Spring

因此,要在 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

所以,这里我们有重复的代码。我们的想法简而言之:

  • 代码重复。将是几个具有相同代码的类。在 Eclipse 中可能会造成混淆。
  • 完全隔离,容易判断什么构成特定版本
  • 将影响先前版本服务功能的风险降至最低

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
  • 可能很难清楚地看到什么构成了网络服务的特定版本。在维护代码时可能更容易因错误影响以前版本的 Web 服务
  • 没有代码重复。仅更改作为新类实现

这两种方法都不是最优的,但我们还没有找到太多关于这方面的信息。所以,我的问题是:您会使用这两种方法中的哪一种?还是您会采取完全不同的方法?

最佳答案

从 Java 生成 wsdls 时,我会使用包解决方案:

com.company.webservice.v3.  

它有代码重复的问题,但是POJOs和converters无论如何都有版本差异,所以代码重用毕竟不是很可行。主要优点是如果你想摆脱旧版本,你只需删除相关的包。

我会在 URL 中保留版本号,因为无论如何您都不会执行 REST。此外,如果某些版本仍在使用,您可以检查访问日志。

关于java - 如何处理版本化 SOAP Web 服务的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13859291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com