153

今天参加了一个关于 REST 的有趣演示,但是,我想不出一个原因(也没有提出)为什么 REST 在使用和实现方面比基于 SOAP 的服务堆栈更好或更简单。

为什么“现实世界”中的任何人都使用 REST 而不是基于 SOAP 的服务的一些原因是什么?

4

11 回答 11

160

更少的开销(没有 SOAP 信封来包装每个调用)

更少的重复(HTTP 已经表示了 DELETE、PUT、GET 等必须在 SOAP 信封中表示的操作)。

更标准化 - HTTP 操作易于理解且操作一致。一些 SOAP 实现可能会变得很挑剔。

更具人类可读性和可测试性(仅使用浏览器更难测试 SOAP)。

不需要使用 XML(你也不需要使用 SOAP,但这几乎没有意义,因为你已经在解析信封了)。

库使 SOAP(有点)变得简单。但是正如我所指出的,您正在抽象出很多冗余。是的,理论上 SOAP 可以通过其他传输,以避免在层上执行类似的操作,但实际上,您所做的几乎所有 SOAP 工作都是通过 HTTP 进行的。

于 2008-09-18T06:18:19.737 回答
36

RESTful服务比基于SOAP的(常规)服务更易于使用。这样做的原因是 REST 基于正常的 HTTP 请求,可以从发出的请求类型(GET = retrive,POST = write,DELETE = remove 等)推断出意图,并且是完全无状态的。另一方面,您可能会争辩说它不那么灵活,因为它取消了包含请求上下文的消息信封的概念。

根据我的经验,企业内的服务首选 SOAP,而公开为公共 API 的服务首选 REST。

使用 .NET 框架中的 WCF 等工具,将服务实现为 REST 或 SOAP 非常简单。

一些相关阅读:

于 2008-09-18T06:21:37.950 回答
13

我假设当您说“Web 服务”时,您指的是 SOAP 和 WS-* 标准集。(否则,我可以说 REST 服务“Web 服务”。)

规范的论点是 REST 服务更接近于 Web 的设计——即 HTTP 和相关基础设施的设计。因此,使用 REST 服务将更兼容现有的 Web 工具和技术。

当然,一旦深入了解细节,您就会发现这两种方法在不同的场景中都有优势。是你感兴趣的那些细节吗?

于 2008-09-18T06:16:45.887 回答
10

开销不如良好的架构那么重要。

REST 不是一种协议,它是一种鼓励良好可扩展设计的架构。经常选择它是因为 RPC 中过多的自由很容易导致糟糕的设计。

另一个原因是基于 HTTP 的 RESTful 协议的可预测成本,因为它可以利用现有技术(主要是代理)。RPC 初始成本相当低,但随着负载的增加,它往往会显着增加。

于 2009-04-25T21:15:44.417 回答
7

必须阅读 Roy Fielding 关于该主题的最出色的论文。他提出了一个很好的案例,并且在他写这篇文章时绝对领先于他的时代(2000 年)

于 2008-09-18T06:23:38.617 回答
7

REST 与实现无关并且更加透明,这使得它非常适合公共 API,特别是对于像 Flickr、Amazon 或 Digg 这样使用 API 作为营销工具并真正希望人们使用他们的数据的大型网站。他们希望手握 1000 多名试图调试他们选择的脚本语言的有缺陷的 SOAP 库的新手开发人员。

与 SOAP 和 WSDL 相比,后者更适用于内部应用程序,在这些应用程序中,您都有嵌入式库和两端都知道的聪明人。(而且您可能不必关心诸如 Internet 规模的负载平衡、HTTP 缓存等之类的事情。)然后您将获得自记录的 API、保留类型等,而且工作量为零。

于 2008-09-18T06:43:37.413 回答
6

Steve Vinoski 的博客和他的最新文章绝对值得细读。他是前 CORBA 专家,他与 Michi Henning 一起撰写了可能是该主题最好的书,“Advanced CORBA® Programming with C++”。然而,他已经看到了他的客户端/服务器方式的错误,现在对 REST 发誓。

于 2008-09-18T06:24:37.070 回答
5

REST 允许缓存您的非变异操作(通常使用 GET 动词) 。也就是说,由客户端缓存和/或由代理缓存。这可能是一个巨大的胜利!

于 2008-09-23T20:16:45.973 回答
3

REST 基本上只是一种实现 Web 服务的方式。这只是一种正确使用 HTTP 来查询您尝试访问的 Web 服务的方法。

http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer

于 2008-09-18T06:16:29.583 回答
0

它超级简单且纤薄。您可以通过 http 动词在浏览器中执行此操作:GET。我还没有找到可以轻松手动执行通用 http POST 请求的浏览器

于 2008-09-18T06:38:38.970 回答
0

这里有一个数据点:亚马逊提供 REST 和 SOAP 格式的 API,85% 的使用是 REST。

REST 更容易实现、更容易理解和更高的性能。

于 2009-07-04T05:53:22.773 回答