哪种方式更好的Web服务方式 - 合同优先或合同最后?

时间:2009-04-18 17:45:40

标签: web-services contract-first

开发Web服务的更好方法是什么;合同第一或合同最后?
每种方法的优点和缺点是什么?

您有哪些经验?

修改 这个问题是关于Web服务的实现(读取:SOAP) 问题是是否应该首先编码实现类,并且首先编写WSDL和XSD架构(最后合同)或首先编写WSDL和XSD架构,然后生成实现类(合同优先)

3 个答案:

答案 0 :(得分:8)

合同优先是普遍接受的'最佳实践'。

它使您非常清楚服务的生产者和消费者确切需要什么和期望什么。当您开始尝试转换java类型时,这一点变得尤为重要 - > xml类型。您还可以在不同的Web服务中重用模式。

答案 1 :(得分:6)

我用过这两种方法。我的建议是使用合同优先架构,但代码优先 WSDL。

编写WSDL文件有许多奇怪的细微差别,如绑定,端口等。我宁愿用工具而不是手工完成。有一些工具可以帮助实现这一目标,但它们都不比

简单
@WebService
public ...

至少可以验证您的部署。

对于模式,我建议先使用契约,因为XML Schema语言比Java中描述的要丰富得多。我通常给出的一个例子是,XML Schema可以限制字符串的大小并应用正则表达式模式。在Java和注释中这样做看起来有点麻烦。

首先将模式作为契约的另一个优点是存在将模式文件转换为HTML文档的工具。

XJC工具可以生成必需的类文件。但是,我只建议在开始时这样做。

最后,您应该获取生成的WSDL文件并使用它。这样你就可以使用wsimport并验证从WSDL到Schema的整个过程是否有效。

您可以使用@WebService实现中的wsdlLocation属性部署WSDL文件,并且当用户从服务器请求WSDL时,应用程序服务器将为您修复绑定数据,但您仍保留注释。否则,您的注释将不会出现在请求的WSDL文件中。

答案 2 :(得分:0)

我怀疑答案肯定是“这取决于。”

问题在于,如果您构建并发布您的合同,那么您将受其约束。这使变革更难。并非不可能,但更难。

另一方面,如果您对架构等感到满意,那么弄乱合同比使用代码要快得多。所以你可以在合同中做一些渐进的改变。

是否还有可以从WSDL生成代码框架的工具?我几乎是积极的。如果是这样,您可能最好将模式作为“代码”项,并从中生成代码。