Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SOAP/WSDL中的API能否轻松保持向后兼容?_Soap_Wsdl_Backwards Compatibility - Fatal编程技术网

SOAP/WSDL中的API能否轻松保持向后兼容?

SOAP/WSDL中的API能否轻松保持向后兼容?,soap,wsdl,backwards-compatibility,Soap,Wsdl,Backwards Compatibility,在使用IPC库时,重要的是它提供了这样一种可能性,即即使客户端和服务器的API版本不同,它们也可以通信。当我考虑在客户机/服务器应用程序中使用SOAP时,我想知道SOAP/WSDL解决方案是否能够很好地处理API更改 例如: 向现有函数添加参数 向现有函数中使用的现有结构添加变量 删除函数 从现有函数中删除参数 从现有函数中使用的现有结构中删除变量 更改现有函数中使用的参数类型 更改现有函数中参数的顺序 更改现有结构中复合零件的顺序 重命名现有函数 重命名参数 注意:我所说的“struct”

在使用IPC库时,重要的是它提供了这样一种可能性,即即使客户端和服务器的API版本不同,它们也可以通信。当我考虑在客户机/服务器应用程序中使用SOAP时,我想知道SOAP/WSDL解决方案是否能够很好地处理API更改

例如:

  • 向现有函数添加参数
  • 向现有函数中使用的现有结构添加变量
  • 删除函数
  • 从现有函数中删除参数
  • 从现有函数中使用的现有结构中删除变量
  • 更改现有函数中使用的参数类型
  • 更改现有函数中参数的顺序
  • 更改现有结构中复合零件的顺序
  • 重命名现有函数
  • 重命名参数

注意:我所说的“struct”是指复合类型,它不是。你必须以某种方式手动管理它。通常通过在引入主要/突破性更改时创建新接口


更一般地说,这是一个体系结构问题,而不是技术问题。一旦发布了接口,您真的需要考虑如何处理更改。

据我所知,根据SOAP/WSDL标准,没有这样的东西。但解决这些问题的工具是存在的。例如,在Glassfish中,您可以指定XSL样式表来转换web服务的请求/响应。其他解决方案,如OracleSOASuite,提供了更精细的工具来管理web服务的版本控制和组件的集成。消息可以自动路由到不同版本的web服务和/或转换。您需要检查您的目标基础架构提供了什么

编辑

XML和XSD在模式演化方面比面向对象语言中的类型和序列化更灵活。一些东西可以通过简单地将它们声明为可选的来向后兼容,例如

  • 将参数添加到现有函数中-如果参数是可选的,那么如果客户端不发送它,您将获得一个
    null
  • 向现有函数中使用的现有结构中添加变量-如果该值是可选的,则如果客户端不提供该值,则会得到
    null
  • 删除函数-这里没有魔法
  • 从现有函数中删除参数-根据新定义,客户端发送的参数是多余的,将被忽略
  • 从现有函数中使用的现有结构中删除变量-在这种情况下我不知道
  • 更改现有函数中使用的参数类型-这取决于更改。对于简单类型,序列化/反序列化可能仍然有效,例如字符串到int

请注意,我不是100%确定的名单。但是一些测试可以告诉你哪些有效,哪些无效。关键是XML是通过网络发送的,因此它提供了一些灵活性

我想你是说RPC而不是IPC?@troelskn:是的。对我来说,这些都是同义词。非常感谢你的回答!然而,我突然意识到我忘了提到另外两种情况:重命名函数和重命名参数。您知道在这些情况下会发生什么吗?在这种情况下,XML将不兼容,因此无法工作。我认为您需要转换消息,例如使用XSLT。但是,如果您交换两个参数的顺序,您的web服务仍然是兼容的,这与Java或.NET接口不同。“交换两个参数的顺序”:的确;另一个我忘记提到的问题是:你只是在谈论API的“新”方面,那么“旧”方面呢?是否有SOAP端点处理请求(或SOAP客户端和响应)中其他未知标记的实践?