所以我对 Web 服务有点陌生,最近出现了一种情况,我们向返回给客户端的数据类型添加了一个元素。客户抱怨这破坏了他们的实施,因为它被意想不到的新元素所阻碍。 (我们通过 Axis2 提供服务)。
对我来说,这似乎是一个无害的更改,客户端应该能够优雅地处理(我使用过一些非 Web 服务框架,在这些框架中添加可选信息是完全可以接受的)。我可以理解,如果我们删除或重命名某些字段,则会给客户带来问题。
基本上我希望 wsdl 表现得像一个接口。如果我们做出的更改本质上是该接口的子类型,我希望客户端会愉快地忽略无关的元素。这只是网络服务的一个缺点,还是有一种明智的方法可以对服务进行被动更改,以便新客户可以获得额外的数据,而老客户可以在闲暇时更新?
WSDL 实际上更像是一个契约,而不是一个接口。 WSDL 准确地描述了操作期望“接收”的内容以及期望“返回”的内容。与此最接近的类比是在 C 中更改函数的原型而不更改函数本身,它们不会匹配并且会导致问题。
WSDL 越具体,您“保证”实施的行为就越多。
如果您需要灵活地返回数据(即添加/删除字段等),您可以执行以下操作之一:
- 对 WSDL 定义进行版本控制并发布可以将旧版本重定向到新版本的服务
- 使用更抽象的数据返回类型(例如 XML)来隐藏复杂性或不断变化的数据。
2 有更多风险,但可以通过 XSD 或其他技术进行管理。您的特定项目要求将决定可接受的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)