所以我对 Web 服务有点陌生,最近出现了一种情况,我们向返回给客户端的数据类型添加了一个元素。客户提示这破坏了他们的实现,因为它阻塞了它没想到的新元素。 (我们通过 Axis2 提供服务)。
对我来说,这似乎是客户端应该能够优雅地处理的无害更改(我曾使用过一些非 Web 服务框架,在这些框架中添加可选信息是完全可以接受的)。如果我们删除或重命名了一些会导致客户出现问题的字段,我可以理解。
基本上我希望 wsdl 像一个接口(interface)一样工作。如果我们进行实质上为该接口(interface)子类型的更改,我希望客户端会愉快地忽略无关元素。这只是 Web 服务的一个短板,还是有一种理智的方式对服务进行被动更改,以便新客户可以获得额外的数据,而老客户可以在闲暇时更新?
最佳答案
WSDL 实际上充当契约而不是接口(interface)。 WSDL 准确地描述了操作期望“接收”什么以及期望“返回”什么。与此最接近的类比是在 C 中更改函数的原型(prototype)而不更改函数本身,它们不会匹配并且会导致问题。
WSDL 越具体,您“保证”到位的行为就越多。
如果您需要返回数据的灵 active (即添加/删除字段等),您可以执行以下操作之一:
2 有更多风险,但可以使用 XSD 或其他技术进行管理。您的特定项目要求将决定什么是可接受的。
关于web-services - 向后兼容性和 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924216/