WSDL 最佳实践

2024-01-04

我正在开发一个与第三方集成的 SOAP 应用程序。我觉得这个第三方的WSDL很奇怪。我对 SOAP 还很陌生,所以如果它没有损坏,我不想要求他们修复它。以下是我注意到的一些我认为错误的事情,尽管我确信它在技术上是有效的文档(因此我在标题中写了“最佳实践”)。另外,我使用 gSOAP 作为我的 SOAP 库,这可能就是为什么我认为其中一些事情很奇怪(我对 gSOAP 的了解甚至比对一般 SOAP 的了解还要新)。

  1. 它们在同一 WSDL 中具有为 SOAP 1.1 和 SOAP 1.2 指定的接口。这导致 gSOAP 生成所需数量的两倍,因为我只使用 1.2。

  2. 他们所有的命名空间都是http://tempuri.org。不应该是这样的,对吧?

  3. 尽管定义了一堆 RPC 调用,但它们的 WSDL 使用文档格式。我正在考虑要求他们切换到 RPC 格式,因为 gSOAP 似乎不会生成采用 C++ 类型参数作为文档格式的方法。相反,它为每个 API 函数的输入和响应数据创建一个新类。如果我无法解决这个问题,我将不得不编写另一层包裹 gSOAP 的内容,以便为我的应用程序的其余部分提供合理的 API。另外,AFAICT,如果他们切换到 RPC,那么来回的 XML 将与现在完全相同,所以我认为这不会很困难。

  4. 元素的 minOccurs = 0 但当我提交没有它们的请求时,我会收到返回的错误,表明它们是必需的(有时甚至是空指针异常的堆栈跟踪)。如果需要的话,他们应该将它们指定为 minOccurs = 1,对吧?

  5. 几乎所有 Web 服务函数都指定一个响应,其中包含指示成功的整数(实际上是布尔值)和错误消息字符串。他们应该为此使用 SOAP 错误吗?我认为如果这是一个错误,我的应用程序会更容易处理它,因为 gSOAP 会让我很容易地弄清楚这一点(并简单地打印错误消息)。

当然,我并不对这家第 3 方公司仅仅因为我要求他们改变他们的 WSDL 就抱有很高的希望。至少我会学到一些东西……据我所知,这些都没有错,甚至没有问题。感谢您的帮助。


我想更笼统地介绍一下 WSDL 创建的最佳实践:

1. 合同优先开发
与 James 相比,我强烈强调契约优先方法的使用,因为它使开发人员能够使用 XML 的全部功能(限制、模式等),并且从那里可以很容易地生成代码任何编程语言。另一个原因是 中的模式是相互通信的两个系统之间的契约。如果开发人员从代码创建 WSDL,则可能会引入对特定编程语言的技术依赖性(数据类型等)。

2. 文档/文字风格
RPC 编码的 SOAP 验证可能很棘手,XPATH 查询和 XSLT 转换也是不可能的,而且这种风格已被弃用。

RPC/literal 还会导致验证 XML 时出现问题(考虑到某些命名约定)。某些 SOAP 引擎会删除模式定义的命名空间,因此验证变得不可能。

使用文档/文字样式,SOAP 主体完全作为 XML 文档进行处理,可以以标准方式对其进行验证、转换和查询。

3. 关注点分离
使用 指令将模式定义与 WSDL 文件本身分开。这促进了架构的重用以及将命名空间分离到不同的 .xsd 文件中,并且还减小了文件的大小;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSDL 最佳实践 的相关文章

随机推荐