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

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

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

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

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

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

合同优先还是合同最后

自下而上:方法对问题进行高层次的定义,并将其细分为子问题。

合约最后 。 对于喜欢自下而上的开发风格有以下优势

  • 先编码
  • 初始阶段非常容易发展。

缺点:

  • 维护非常困难。
  • 紧密耦合

自上而下:考虑基本function和需要的部分。

合同优先 。 有一个倾向于自上而下的开发风格的原因如下。

1.脆弱性契约最后的开发风格导致您的Web服务契约(WSDL和您的XSD)从您的Java契约(通常是一个接口)中生成。 如果你使用这种方法,你将不能保证合同保持不变。 每次更改Java代码并重新部署它时,Web服务合同可能会发生后续更改。 另外,并不是所有的SOAP堆栈都会从Java合约生成相同的Web服务合约。 这意味着改变你的当前SOAP堆栈(不pipe是什么原因),也可能会改变你的Web服务合同。 当一个Web服务合同发生变化时,合同用户必须被指示获得新的合同,并且可能改变他们的代码以适应合同的任何变化。 为了使合同有用,它必须尽可能保持不变。 如果合同发生变化,您必须联系您的服务的所有用户,并指示他们获得新版本的合同。

2.性能当Java自动转换为XML时,无法确定通过线路发送的内容。 一个对象可能引用另一个对象,引用另一个对象等。最后,虚拟机堆中的一半对象可能会转换为XML,这会导致响应时间变慢。 当使用契约优先,你明确地描述了什么地方发送的XML,从而确保它正是你想要的。

3.可重用性在一个单独的文件中定义你的模式允许你在不同的场景中重用这个文件。

4.版本控制尽pipe合约必须尽可能长时间地保持不变,但有时候也需要改变。 在Java中,这通常会导致一个新的Java接口,如AirlineService2,以及该接口的一个(新)实现。 当然,旧服务必须保留,因为可能还有客户还没有迁移。 如果使用合同优先,我们可以在合同和执行之间有一个宽松的耦合。 这种宽松的耦合使我们能够在一个类中实现两个版本的合同。

tldr;

在这里输入图像说明

自顶向下与自下而上的层次结构

在这里输入图像说明 图片来源:谷歌图片

在这里输入图像说明

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

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

从上到下,你首先定义你要做的事情。 即你的wsdl。 然后你继续进行实际的发展。 尽pipe首先创buildwsdl似乎很困难,但从长远来看,它build议(推荐Eclipse)简化您的开发。

恰恰相反发生在自下而上。 我们从代码部分开始,然后使用内置工具创buildwsdl。 这在开始的时候可能看起来很简单,但是当你的代码复杂化的时候,它会造成很多混乱。