2010-05-01 102 views

回答

11

你可以找到一篇文章比较这里REST和SOAP: http://www.jopera.org/files/www2008-restws-pautasso-zimmermann-leymann.pdf

作者的结论似乎是:

  • 使用战术,特设集成RESTful服务通过Web
  • 不想WS - *专业企业应用集成场景中的Web服务,具有更长的使用寿命和高级QoS要求

我个人不喜欢“专业企业”这样的术语,因为它是宽松的,非正式的。然而在我看来,作者在文章中提出了一些好的观点。也许会得出结论并给出一些自己的想法:

  • 如果您想让API公开 - 以REST方式执行此操作。为什么?使用客户端应用程序非常简单,所以它会使您的服务更受欢迎。例如亚马逊暴露REST和SOAP的API,但其85%的用户选择了REST版本Amazon API - SOAP vs. REST

  • 使用SOAP和WS- *栈,如果您将创建(或您创建的过程的一些控制)无论是消费者还是服务的生产者,您都需要WS- *的高级功能。这可能还需要更多的资源,因为SOAP应用程序往往会“更重”(更多功能,但更复杂)。

另外考虑性能REST可能会更快(消息肯定更短,你不需要解析xml)。

希望它会有所帮助。

在你的flash客户端的例子中 - 如果不知道详细信息就很难说清楚,但是如果不需要WS- *的所有安全性和事务特性,我认为构建REST应用程序会更简单快捷。


回答评论

我应该用肥皂,因为我在这么 所谓的“专业性企业”

而且假设,当然,你的选择是不是真的决定我由大软件供应商提供。

SOAP适用于大型企业,因为它鼓励更正式的方法。它提供了巨大的规格,因此您的开发人员可能需要时间来学习它们,甚至可能需要一些专业培训 - >因此花费公司资源。它也提供工具 - 并不是所有的都是开源的,所以这也意味着额外的资源。但是,如果你的团队将学习这种集成服务的方式,它可能是高效的,并且结果代码将是高质量的。

REST相反更多是一种开发应用程序的理念。所以,没有庞大的规格,没有专门的工具。没有资源支出。如果你有一小组优秀的程序员,这可能会很好 - 如果他们知道基本原则,他们不需要太多的指导。不幸的是,做错事也更容易。

需要考虑的另一件事是应用程序的大小 - API越丰富,您想要集成的服务越多,就越难以实现RESTful。构建小型SOAP应用程序也不是一个好主意 - 整个开销和入口成本太高。

您需要评估项目的优缺点。在不知道我所想的所有细节的情况下提供建议是不可能的。

最后 - 这与合理的论点无关,但更多与政治。我认为管理层的人似乎更喜欢WS- *堆栈和SOAP(它支持“大企业”,所以他们更容易证明自己的选择)。另一方面,来自学术背景的人[1]更喜欢REST--因为仍然可以在该领域进行大量的研究。

[1]我是介于两者之间,这样我就可以观察到两种行为;-)

+0

很好的答案,但要小心使用术语“客户端”。如果你的意思是,“JavaScript客户端使用XmlHttp直接与服务对话”,但如果你的客户使用工具生成JavaScript代理类来与服务交谈,那么你就是对的。 – 2010-05-02 00:08:49

+0

谢谢你的想法。根据上面的文章,我应该使用肥皂,因为我在所谓的“专业企业”。但我意识到,所谓的专业人士有时意味着“供应商瞄准企业”,技术选择更多地受商业利益的支配,而不是纯技术原因,这就是为什么我问这个问题:) – user310291 2010-05-02 10:44:27

13

表现不是决定性因素。

首先,我应该说,要求一个SOAP-VS-REST的问题是有点荒唐,因为SOAP是一个XML格式的信封和REST是一种体系结构。因此,我将做一个小小的假设,并假设您真的在考虑SOAP-vs-POX或SOAP-vs-JSON或SOAP-vs-其他一些数据格式化方法

决定因素应该是这样的:
您现在是否需要或将来需要SOAP信封?

SOAP信封允许之类的东西框架提供的加密,digsig,路由和授权检查,除其他事项。当然,您可以使用REST(或者更准确地说,使用纯旧的XML或JSON等)来完成这些工作,但为了实现这一目标,您必须自己做更多的工作。

如果性能 - 无论你诠释它的意思是 - 真的是你的#1的标准,那么你或许应该放弃SOAP和POX,并移动到protobufs什么性能优化别的。这些序列化速度更快,传输速度更快。


如果你觉得这个答案是“太哲学”,你真的想硬数字,好,那我想你需要进行一些测试。实际性能在您选择的工具包,消息的形状以及您使用的额外数据服务(如加密等)上会有很大差异。但是最终,perf不会是或者不应该是决定性的。

如果你的SOAP工具箱使用起来容易20%。调试和维护作为您的POX工具包,那么无论性能如何,您都应该使用SOAP。人们(编码员,建筑师,测试人员)现在比CPU和网络贵得多。如果需要的话,你总是可以购买另外两个cpus,或者一个更大的网络,如果你的设计是正确的话。但是如果你的框架很难使用,或者它将你的员工赶走,那么你不会花20%的时间开发,不惜任何代价。除非您正在运行地理比例网络,否则您将更好地为人员进行优化,而不是为网络进行优化。

+0

我喜欢这一点,只想补充一点,所有的地理规模网络开始小。如果您发现自己正转向地理范围,那么您将拥有资源来聘请专门专门处理网络流量的人员。我认为最好的路线是“不能买20%的开发时间” – jcolebrand 2010-05-01 23:33:18

+0

我不同意“人们要贵得多”,或者至少取决于你的企业环境和项目。如果它是一个拥有数百万用户的大公司,那么这不会是什么大不了的事情。重要的是:性能真的会提高。如果是的话,我们试着去实现它。至于部署这是另一个故事,因为涉及很多部门,但它不是价格的问题:) 顺便说一句,感谢您的答案。 – user310291 2010-05-02 10:37:55

+1

我认为性能是决定性因素,只有当它是一个数量级时,这在这里不是这样。我们正在讨论更多的开销或者更少的开销,没有什么会以足够大的方式影响可伸缩性,从而以牺牲其他任何成本为代价来关注性能。 – 2010-05-02 11:54:14