2011-05-04 88 views

回答

62

自顶向下意味着您先从WSDL开始,然后使用Java创建所有必要的脚手架。

自下而上意味着您从Java方法开始,并从中生成WSDL。

SOAP意味着所有调用的URL都是相同的,并且只有Java方法的参数不同。 REST意味着URL加上调用的HTTP方法反映了要完成的操作。

+2

对于SOAP vs REST,我认为你的回答是公平的,考虑到OP在研究之前所要求的努力量......但仍然有一些可能会进一步挖掘的文章: http://en.wikipedia.org/wiki/Representational_State_Transfer和 http://en.wikipedia.org/wiki/SOAP – 2011-05-04 22:19:58

+1

@AnonyAccioly请问您的评论是否适合作为更好的部分你自己的答案? – 2013-08-19 11:13:06

+0

@ThorbjørnRavnAndersen:一些更正:在REST中,URL并不反映要完成的“操作”!它是HTTP方法(即GET,POST等),它反映了在由URL标识的资源上执行的操作。 – 2014-09-14 07:12:09

7

@mad_programmer - 您的意思是用自下而上或自上而下的方法构建Web服务。 首先,您将开始将类和业务逻辑编程为java代码,然后从中生成Web服务合约(即WSDL)。后一种方法意味着相反(从WSDL生成类存根)。

5

支持andersen的答案,我想补充一点。 基本上人们倾向于使用自下而上的方法,因为在大多数情况下,我们已经开始编写bean,业务逻辑等的过程,然后在持久层中创建web服务,wsdl等。 在新建项目中,我们可以使用自顶向下的方法,在这里我们只写wsdl,构建骨架将为您提供bean,实现,接口等。但是,记住计算机不能生成你想要的逻辑。所以,你仍然需要完成整个项目并填补空白。

4

当项目从头开始时添加到答案通常的方法是创建一个非常基本的接口,然后从中创建一个WSDl。这将使您无法编写复杂的WSDl。然后,我们可以直接在WSDl中添加项目特定的操作,并且一旦WSDl完成,我们可以采用自顶向下的方法。

+0

我喜欢这个答案,因为这样可以避免在编写xsd和wsdl文件时出现手动人为错误。但是,您认为生成的wsdl文件可以通过各种JAX-WS实现进行移植吗? – YogendraJ 2016-12-28 04:21:23

7

Contract-first versus Contract-last

自下而上:方法利用问题的高级别定义,并将其细分为子。

合同末尾。有以下优势喜欢自下而上的开发风格。

  • 守则第一
  • 初始阶段很容易发展。

缺点:

  • 维护是非常非常难。
  • 紧耦合

自上而下:想到的基本功能和将需要的零件。

合同优先。选择自顶向下的开发风格有以下原因。

1.脆弱 在你的web服务合同(WSDL和您的XSD)的合同,最后的发展结果风格从Java契约(通常接口)产生。如果您使用这种方法,您将无法保证合同会随着时间的推移保持不变。每次更改Java代码并重新部署它时,可能会对Web服务合同进行后续更改。 另外,并非所有的SOAP堆栈都会从Java合约生成相同的Web服务合约。这意味着改变你当前的SOAP堆栈(不管出于何种原因),也可能会改变你的Web服务合同。 当Web服务合同发生更改时,必须指示合同用户获得新合同,并可能更改其代码以适应合同中的任何更改。 为了使合同有用,它必须尽可能保持不变。如果合同发生变化,您必须联系您服务的所有用户,并指示他们获得合同的新版本。

2.性能 当Java的自动转换成XML,有没有办法可以肯定的,什么是跨线发送。一个对象可能引用另一个引用另一个对象的对象等。最后,虚拟机堆中的一半对象可能会转换为XML,这会导致响应时间变慢。 使用契约优先时,您明确描述了在哪里发送XML,从而确保它正是您想要的。

3.可重用性 在单独的文件中定义架构允许您在不同的场景中重用该文件。

4.版本 尽管合约必须尽可能长时间保持不变,但它们确实有时需要更改。在Java中,这通常会产生一个新的Java接口,如AirlineService2,以及该接口的一个(新)实现。当然,旧服务必须保留,因为可能还有尚未迁移的客户。 如果使用合同优先,我们可以在合同和实施之间有一个宽松的耦合。这种宽松的耦合使我们能够在一个类中实现两种版本的合同。

tldr;

enter image description here

自上而下与自下而上层次

enter image description here 图片来源:Google图片

enter image description here

0

在自上而下的定义,你会做什么第一。即您的wsdl。 然后你继续实际的发展。 尽管看起来很难首先创建wsdl,但是它的推荐 (Refer Eclipse)在长期内会简化您的开发。

正好相反发生在自下而上。 我们从代码部分开始,然后使用内置工具创建wsdl。 这可能在开始时看起来很容易,但是当您随代码的复杂程度而变大时,会产生很多混乱。

相关问题