2

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

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

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

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

4

5 回答 5

1

我不同意——我认为这与表达合同有关,而不是开发便利。

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

Spring Web 服务页面对“契约优先” Web 服务进行了很好的讨论。阅读它,看看你的想法。

于 2012-07-20T20:36:37.397 回答
1

两种开发风格都有优点和缺点,但我不认为最后契约被更多地使用只是因为它对新手来说更容易和更快,正如你所说,但主要是因为随着工具和框架的发展,WSDL 很快进入了目录中的内容管道代码,报价:

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

没有人愿意编写无聊、重复的代码,尤其是当有大量工具和框架可以为您编写代码时。如果您甚至不必了解 SOAP、WSDL 或 XSD,那对某些人来说甚至更好……或者我应该说“魔术”……但这是一个不同的讨论:)。

于 2012-07-23T21:02:49.400 回答
0

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

因为它对新手开发者来说更​​容易、更快捷

只是人们并不都喜欢学习新语言,但他们更喜欢使用他们掌握的语言,无论他们的产品是否无法与来自其他平台的客户一起使用

于 2012-07-20T20:27:33.133 回答
0

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

于 2012-07-20T20:37:43.843 回答
0

当涉及到 wsdl 时,总是有一些充分的理由来执行 Contract-First。

关于人们为什么不这样做的简单答案是,简单地拥有 Visual Studio 或 Apache CXF 或您正在使用的任何 Web 服务实现为您生成一个的工作量较少。

前面很容易,但后面会变得一团糟。

可移植性

其中之一是您依赖生成的 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 中,当您更改合同时是明确的,因此您可以在命名空间中对其进行版本化,这意味着发送不同版本时会变得非常清楚。因此,可以防止旧客户端尝试使用新消息,如果您进行了重大更新,这可能很有用。

这可以节省很多工时。

于 2021-07-13T16:56:13.637 回答