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