自上而下的Web服务和自下而上的Web服务有什么区别?

时间:2011-05-04 22:07:25

标签: java web-services rest soap

在Java中,自上而下的Web服务和自底向上的Web服务有什么区别?另外,SOAP和REST-ful Web服务之间有什么区别?

6 个答案:

答案 0 :(得分:67)

自上而下意味着您从WSDL开始,然后在Java中一直创建所有必要的脚手架。

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

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

答案 1 :(得分:11)

  

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,以及该接口的(新)实现。当然,必须保留旧服务,因为可能还有尚未迁移的客户端。 如果使用契约优先,我们可以在合同和实施之间实现更松散的耦合。这种松散的耦合允许我们在一个类中实现两个版本的合同。

enter image description here

答案 2 :(得分:7)

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

答案 3 :(得分:5)

支持安徒生的答案,我想补充一点。 基本上人们倾向于使用Bottom-up方法,因为在大多数情况下,我们已经开始编写bean,业务逻辑等的过程,然后在持久层中,我们创建web服务,wsdl等。 在新项目中,你从头开始构建一些东西,我们可以使用自上而下的方法,我们只需编写wsdl,构建骨架就会给你bean,实现,接口等。还是记得计算机无法生成你想要的逻辑。所以,你仍需要完成整个项目并填补空白。

答案 4 :(得分:4)

当项目从头开始时添加答案通常的方法是创建一个非常基本的界面,然后从中创建一个WSDl。这将使您免于编写复杂的WSDl。然后我们可以直接在WSDl中添加项目特定的操作,一旦WSDl完成,我们就可以继续采用自上而下的方法。

答案 5 :(得分:0)

在自上而下,您可以先定义要执行的操作。即你的wsdl。 然后你继续进行实际的开发。 虽然看起来很难先创建wsdl,但从长远来看,它推荐 (Refer Eclipse) 它可以简化你的开发。

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