web-services - 向后兼容性和 Web 服务

标签 web-services soap axis2 backwards-compatibility

所以我对 Web 服务有点陌生,最近出现了一种情况,我们向返回给客户端的数据类型添加了一个元素。客户提示这破坏了他们的实现,因为它阻塞了它没想到的新元素。 (我们通过 Axis2 提供服务)。

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

基本上我希望 wsdl 像一个接口(interface)一样工作。如果我们进行实质上为该接口(interface)子类型的更改,我希望客户端会愉快地忽略无关元素。这只是 Web 服务的一个短板,还是有一种理智的方式对服务进行被动更改,以便新客户可以获得额外的数据,而老客户可以在闲暇时更新?

最佳答案

WSDL 实际上充当契约而不是接口(interface)。 WSDL 准确地描述了操作期望“接收”什么以及期望“返回”什么。与此最接近的类比是在 C 中更改函数的原型(prototype)而不更改函数本身,它们不会匹配并且会导致问题。

WSDL 越具体,您“保证”到位的行为就越多。

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

  • 版本化您的 WSDL 定义并发布可以将旧版本重定向到新版本的服务
  • 使用更抽象的数据返回类型,例如 XML 来隐藏复杂性或变化的数据。

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

    关于web-services - 向后兼容性和 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924216/

    相关文章:

    java - 使用 NTLM 身份验证使用 soap 服务

    java - 如何从服务端点接口(interface)抛出自定义故障(未在 wsdl 中声明的故障)

    wcf - 如何验证应用程序而不是用户?

    java - Android ksoap2 Web 服务获取 WSDL 的 XML 描述?

    c# - WebService、WebMethod 和继承

    node.js - 使用具有WSDl url的nodejs调用soap服务

    java - 外部应用程序使用 Java Web 服务进行 Moodle 身份验证

    java - tomcat创建web服务报错

    java - 常见的日志记录 jar 与 apache axis soap 客户端冲突

    java - 使用 XStream 通过线路发送的 String 的反序列化问题