今天参加了一个关于 REST 的有趣演示,但是,我想不出一个原因(也没有提出)为什么 REST 在使用和实现方面比基于 SOAP 的服务堆栈更好或更简单。
为什么“现实世界”中的任何人都使用 REST 而不是基于 SOAP 的服务的一些原因是什么?
今天参加了一个关于 REST 的有趣演示,但是,我想不出一个原因(也没有提出)为什么 REST 在使用和实现方面比基于 SOAP 的服务堆栈更好或更简单。
为什么“现实世界”中的任何人都使用 REST 而不是基于 SOAP 的服务的一些原因是什么?
更少的开销(没有 SOAP 信封来包装每个调用)
更少的重复(HTTP 已经表示了 DELETE、PUT、GET 等必须在 SOAP 信封中表示的操作)。
更标准化 - HTTP 操作易于理解且操作一致。一些 SOAP 实现可能会变得很挑剔。
更具人类可读性和可测试性(仅使用浏览器更难测试 SOAP)。
不需要使用 XML(你也不需要使用 SOAP,但这几乎没有意义,因为你已经在解析信封了)。
库使 SOAP(有点)变得简单。但是正如我所指出的,您正在抽象出很多冗余。是的,理论上 SOAP 可以通过其他传输,以避免在层上执行类似的操作,但实际上,您所做的几乎所有 SOAP 工作都是通过 HTTP 进行的。
我假设当您说“Web 服务”时,您指的是 SOAP 和 WS-* 标准集。(否则,我可以说 REST 服务是“Web 服务”。)
规范的论点是 REST 服务更接近于 Web 的设计——即 HTTP 和相关基础设施的设计。因此,使用 REST 服务将更兼容现有的 Web 工具和技术。
当然,一旦深入了解细节,您就会发现这两种方法在不同的场景中都有优势。是你感兴趣的那些细节吗?
开销不如良好的架构那么重要。
REST 不是一种协议,它是一种鼓励良好可扩展设计的架构。经常选择它是因为 RPC 中过多的自由很容易导致糟糕的设计。
另一个原因是基于 HTTP 的 RESTful 协议的可预测成本,因为它可以利用现有技术(主要是代理)。RPC 初始成本相当低,但随着负载的增加,它往往会显着增加。
必须阅读 Roy Fielding 关于该主题的最出色的论文。他提出了一个很好的案例,并且在他写这篇文章时绝对领先于他的时代(2000 年)。
REST 与实现无关并且更加透明,这使得它非常适合公共 API,特别是对于像 Flickr、Amazon 或 Digg 这样使用 API 作为营销工具并真正希望人们使用他们的数据的大型网站。他们不希望手握 1000 多名试图调试他们选择的脚本语言的有缺陷的 SOAP 库的新手开发人员。
与 SOAP 和 WSDL 相比,后者更适用于内部应用程序,在这些应用程序中,您都有嵌入式库和两端都知道的聪明人。(而且您可能不必关心诸如 Internet 规模的负载平衡、HTTP 缓存等之类的事情。)然后您将获得自记录的 API、保留类型等,而且工作量为零。
Steve Vinoski 的博客和他的最新文章绝对值得细读。他是前 CORBA 专家,他与 Michi Henning 一起撰写了可能是该主题最好的书,“Advanced CORBA® Programming with C++”。然而,他已经看到了他的客户端/服务器方式的错误,现在对 REST 发誓。
REST 允许缓存您的非变异操作(通常使用 GET 动词) 。也就是说,由客户端缓存和/或由代理缓存。这可能是一个巨大的胜利!
REST 基本上只是一种实现 Web 服务的方式。这只是一种正确使用 HTTP 来查询您尝试访问的 Web 服务的方法。
http://www.xfront.com/REST-Web-Services.html http://en.wikipedia.org/wiki/Representational_State_Transfer
它超级简单且纤薄。您可以通过 http 动词在浏览器中执行此操作:GET。我还没有找到可以轻松手动执行通用 http POST 请求的浏览器
这里有一个数据点:亚马逊提供 REST 和 SOAP 格式的 API,85% 的使用是 REST。
REST 更容易实现、更容易理解和更高的性能。