什么被认为是对WSDL合同的不间断或向后兼容的更改?

Asb*_*ørn 29 wsdl web-services

此页面列出了以下示例:

  • 向现有WSDL文档添加新的WSDL操作
  • 在WSDL文档中添加未包含在先前现有类型中的新XML模式类型

但是,对于哪些更改被视为向后兼容,是否存在定义或标准指南.或者换句话说,您可以对合同做出哪些更改,并且仍然希望不会破坏您的客户.

Sel*_*lim 51

我花了一些时间在这个特定的主题上,并在Thomas Erl的一本书中找到了一些指导,我在底部提到了这本指南.这是他们要说的;

兼容的变化

  • 添加新的WSDL操作定义和关联的消息定义
  • 添加新的WSDL端口类型定义和关联的操作定义
  • 添加新的WSDL绑定和服务定义
  • 向消息定义添加新的可选XML Schema元素或属性声明
  • 减少XML Schema元素的约束粒度或消息定义类型的属性
  • 将新的XML Schema通配符添加到消息定义类型
  • 添加新的可选WS-Policy断言
  • 添加新的WS-Policy替代方案

不兼容的变化

  • 重命名现有的WSDL操作定义
  • 删除现有的WSDL操作定义
  • 更改现有WSDL操作定义的MEP
  • 将故障消息添加到现有WSDL操作定义
  • 向消息定义添加新的必需XML Schema元素或属性声明
  • 增加XML Schema元素的约束粒度或消息定义的属性声明
  • 在消息定义中重命名可选或必需的XML Schema元素或属性
  • 从消息定义中删除可选或必需的XML Schema元素或属性或通配符
  • 添加新的必需WS-Policy断言或表达式
  • 添加一个新的可忽略的WS-Policy表达式(大多数时候)

Thomas Erl等人对这一特定主题有一本很好的书; 该名称是SOA的Web服务合同设计和版本控制.

HTH.

免责声明:正如我所提到的,这是本书作者所做的工作,我只是分享它.反正我也不隶属于此; 只是喜欢这本书:)

  • 您好,我认为第4项'添加新的可选XML Schema'在绝对版本中不向后兼容.它仅适用于请求消息.如果您的客户端在XML响应中应用最佳实践并在运行时启用XSD验证,则将拒绝任何新的可选标记.请评论 (7认同)
  • 我同意Aerosteaks的评论.向后兼容性应建模为具有三列的矩阵:类似于TypeOfChange,IsRequestMessageBackwardCompatible,IsResponseMessageBackwardCompatible (3认同)
  • 也可以通过在响应的末尾添加 <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" /> 来实现向前兼容性。有了这个,它们可以在未来扩展。但这是不应该过度使用的东西。 (2认同)

Nic*_*yan 5

附加的可选请求元素 (minoccurrs=0) 也可以向后兼容 - 这取决于主机端服务的实现。此外,将强制响应元素更改为可选也可以向后兼容 - 这取决于客户端的实现。

这个区域很棘手。

如果您确实担心向后兼容性,请考虑为新客户端创建新版本的服务,并为现有客户端保留现有实现。另外,一般来说,避免通过服务发送域对象 - 使用 DTO。

希望这可以帮助。