为什么人们不先做WSDL?

时间:2012-07-20 20:27:33

标签: design-patterns interop wsdl

我目前正在做一个处理网络服务的演示文稿。

我们使用 WSDL + XSD-first 方法创建了我们的服务,我们首先使用XSD模式和WSDL创建(借助工具),然后将它们编译为.NET和Java类互操作。

我想证明为什么我们使用这种方法。我提到它更符合OOP(首先定义接口,然后实现,反之亦然),并且您可以更好地控制互操作性约束。此外,您可以显式定义名称空间,并帮助跨应用程序重用XSD

相反,今天仍然有很多人喜欢在他们的IDE中实现代码并从那里生成WSDL。问题是,为什么?

5 个答案:

答案 0 :(得分:1)

我不同意 - 我认为这与表达合同有关,而不是发展轻松。

我认为WSDL应该从.xsd生成。

Spring Web服务页面对"contract first" Web服务进行了很好的讨论。阅读它,看看你的想法。

答案 1 :(得分:0)

不确定我的自答案是唯一的答案,但这是我所知道的

因为新手开发人员更容易,更快捷

只是人们不喜欢学习新语言,但他们更喜欢使用他们掌握的语言,无论他们的产品是否与其他平台的客户合作

答案 2 :(得分:0)

当我创建webservices时(我们主要使用JBoss,它有一个很好的内置web服务系统)我总是首先在一般意义上定义交互,但不是在XML中,我并不特别喜欢自己编写XML。这是一种丑陋,冗长的语言。所以我所做的是将我的响应和参数映射为Java对象,然后适当地对它们进行注释,然后在部署应用程序后,我神奇地拥有一个Web服务而无需编写XML。 WSDL和XSD有点冗长,JBoss为我生成的东西并不比我以前编写的东西更好,可以说它节省了大量的时间。您不一定必须在那时实现服务,只需要响应和输入数据结构。然后,您可以获取它为您生成的wsdl,并使用您想要生成客户端所需对象的任何工具。

答案 3 :(得分:0)

两种开发方式都有advantages and disadvantages但我不认为合同最后使用更多只是因为它对新手更容易和更快,正如你所说,但主要是因为随着工具和框架的发展,WSDL很快进入编号为plumbing code的内容,引用:

  

[...]在应用程序和较低层之间桥接的幕后低级代码。这些东西的编码通常相当枯燥和重复,但需要使系统工作。

没有人愿意编写无聊,重复的代码,特别是当有大量工具和框架为您完成时。如果你甚至不需要理解对某些人来说更好的SOAP,WSDL或XSD ......或者我应该说“魔术”......但是that's a different discussion:)。

答案 4 :(得分:0)

有一些很好的理由永远不要做合同优先。

便携性

其中之一是您依赖生成的 wsdl 可以被许多不同的来源使用。通常,由 Visual Studio 或 Apache CXF 生成的 wsdl 会产生问题。

Sun 的 SOAP 实现倾向于生成包含“参数”作为消息部分名称的 wsdl,即使当 Visual Studio 尝试将服务用作 Web 引用时会导致错误。 Visual Studio 的实现也有一些已知的怪癖,在某些情况下,这些怪癖必须由使用其服务的人手动调整。

事实上,Java 和 C# 都提供了通过手动调整来覆盖自动生成的 wsdl 的方法。

稳定性

Contract-Last 表示您的代码生成合同。这也意味着更难避免错误地更改 API。另一方面,如果您自己生成 WSDL(这并不难)并编写 XSD(这也不难 - 在我看来比 Java 中的 JAXB 类更容易正确),那么您执行合同。合同变更时是明确的。

版本控制

因为在 Contract-First 中,当您更改合同时是明确的,然后您可以在命名空间中对其进行版本控制,这意味着发送不同版本时会变得非常清楚。因此,可以防止旧客户端尝试使用新消息,如果您进行了重大更新,这可能会很有用。

这可以节省很多工时。

相关问题