向后兼容性和Web服务

Jas*_*rup 13 soap axis2 web-services backwards-compatibility

所以我对Web服务有点新意,最近出现了一种情况,我们在数据类型中添加了一个返回给客户端的元素.客户抱怨这打破了他们的实施,因为它扼杀了它没想到的新元素.(我们通过Axis2提供服务).

对我来说,这似乎是一个无害的变化,客户端应该能够优雅地处理(我已经使用了一些非Web服务框架,其中添加可选信息是完全可以接受的).我可以理解,如果我们删除或重命名了一些会导致客户端出现问题的字段.

基本上我希望wsdl像界面一样.如果我们进行基本上是接口的子类型的更改,我希望客户端愉快地忽略无关的元素.这只是网络服务的短暂出现,还是有一种理智的方式对服务进行被动更改,以便新客户可以获得额外的数据,而老客户可以在闲暇时更新?

Gra*_*rdx 9

WSDL实际上不仅仅是一个接口,而是一个契约.WSDL确切地描述了操作期望"接收"的内容以及它期望"返回"的内容.与此最接近的类比是在C中更改函数的原型而不更改函数本身,它们不会匹配并导致问题.

WSDL越具体,您就越"保证"到位.

如果您需要灵活处理返回的数据(即添加/删除字段等),您可以执行以下操作之一:

  1. 版本化WSDL定义并发布可以将旧版本重定向到较新版本的服务
  2. 使用更抽象的数据返回类型(如XML)来隐藏复杂性或更改数据.

2存在更多风险,但可以使用XSD或其他技术进行管理.您的特定项目要求将决定什么是可接受的.