it-swarm.cn

RESTful架构的优缺点

我所见过的关于REST)的优缺点的最常见的讨论往往使讨论相对于SOAP更为复杂。我在这方面都没有经验。我开始开发具有多个组件的应用程序-主要是一个管理方面,允许所有者管理多个站点-一个面向公众的用户界面,该界面允许用户与保存的数据进行交互在主机上。我需要评估允许将后一部分托管在任何地方并通过RESTful架构与前者进行通信的含义-或要求两个组件都位于同一主机上。开发RESTful架构的主要含义是什么,特别是在以下领域的能力方面:

1:安全2:性能3:接口复杂性

编辑:看这个问题的一些答案-我应该澄清。我不是要与SOAP-而是REST应用程序与所有组件都驻留在一个主机上的应用程序进行比较)的概述。虽然!)

20
sunwukung

考虑到这些领域,我可以粗略介绍一下,但是我不能为您得出结论。两种协议在两个主要方面有所不同:

  • 讯息格式
  • 服务发现

消息格式最容易理解。请求和响应的SOAP包装非常重。有一个SOAP信封,其中包含标题和正文部分。标头可被请求链中的多个过滤器用来执行某种识别,授权等操作。但是,XML解析成本很高,这对系统的可伸缩性产生了一定的影响。多少取决于堆栈中的SOAP处理层。

服务发现可能是您争执最多的地方。 REST本质上提供可预测的端点,并且请求的内容是一个简单的HTTP请求。这样做的好处是没有额外的开销,并且最终用户在了解了您网站的URL结构后,几乎可以猜测出该怎么做。当然,天真的安全意识人们会认为这是一个弱点。毕竟,使用SOAP,您必须使用WSDL才能知道端点是什么。当然,使用SOAP,您将获得完整的消息格式,因此可以进行更有针对性的攻击。

按您提供的类别细分:

安全性

哪一种在本质上都比另一种更安全。使用良好的安全性原则:

  • 加密通讯
  • 在处理之前,请确保您对用户进行身份验证和授权
  • 良好的编码习惯,避免直接攻击
  • 那只是短名单。

记住晦涩!=安全。

性能

由于遵循简单HTTP协议的请求,原始性能和可伸缩性都将达到REST。大多数SOAP堆栈使用SAX解析(基于事件的解析),这大大提高了SOAP堆栈的可伸缩性,但是对开销有可衡量的影响。 SOAP除了具有XML解析开销外,还具有正常的HTTP处理开销。 REST仅具有HTTP处理开销。

复杂度

从系统的角度来看,REST胜出。活动部件更少,请求链更精简,等等。这意味着更容易实现可靠性。

从程序员的角度来看,如果您使用的SOAP或框架对此提供了良好的支持,则IDE可能会获胜。本质上,使用REST承担执行预处理工作(身份验证/授权/等)的责任,而使用SOAP则可以通过可插入的处理链来完成很多工作。

我的偏好

我对HTTP请求非常满意,而且我知道网络的工作原理。结果,对我来说,REST方法更可取。但是,我确实知道我的一些客户对此感到不舒服。他们已经阅读了一些行业文章,这些文章谴责REST与SOAP等的安全性。最重要的是,这两种方法都不保证安全性。您需要确保应用程序的安全性和安全性。显然,社交网络应用程序对安全性的要求(或要求)不如银行或政府系统那么高。许多SOAP堆栈都包含处理器,您可以插入这些处理器以提供某种安全性,但是搜索并放置它们仍然是您的责任。

13
Berin Loritsch
  1. 安全性:使用HTTPS。这对两者都适用。
  2. 性能:。 REST减少了CPU的开销(减少了解析,编组,解包)。此外,使用REST进行缓存是小菜一碟。
  3. 复杂度:REST对设置的要求要少得多,毕竟只是GET/POST。SOAP需要更多的维护工作(wsdl等),但是如果您的IDE支持,则要容易一些)。

我认为 [〜#〜] soap [〜#〜] 当您可以使用REST和某些内容/哑剧类型)做同样的事情时,太way肿了。另外,由于SOAP会带来很多开销,这归因于它的包装性质,而且它更通用,并且不仅限于HTTP。)SOAP如果您的IDE正确地支持它,并且您不想学习HTTP,则很容易使用。但是对我来说,REST更容易使用,而且很多更加网络友好。

如今,有非常好的REST使用的API。如果您是Java的话,那么Jax-RS真的很酷。)对于某些人来说 this 就像色情。

12
Martin Wickman

我认为REST的最大优势是突破了RPC体系结构。REST公开了资源,而不是进程。这允许您创建一个松散绑定的系统,其中更改,改进甚至是零件的故障对其他零件的影响有限(负面)。

不幸的是,REST的一个常见误用是暴露您的内部数据结构(在最坏的情况下,它是数据库的CRUD,呃)。这使它非常 “正确”的用法是公开与您正在处理的系统部分相关的高级对象,并在出现任何不一致时自由地返回错误状态代码。

REST的另一个经常被忽略的部分是大多数动词的幂等性。如果应用一次或多次,不仅GET,而且PUT和DELETE的结果也应完全相同。如果已删除404,则返回404;如果客户端将相同的参数返回404,则返回“ no change”。)这将导致系统健壮,语义精确解释的相互依赖性降低。

8
Javier

WS- *标准实际上主要是关于在SOAP/HTTP上运行RPC。因此,所有CORBA和J2EE及其前身的思想都已转移到用XML做相同的事情。这意味着诸如类型声明和服务合同,元数据交换,声明性安全性之类的东西。所有这些都是真正的“企业”东西。坦白说,它甚至在企业中也被过度使用。

使用RESTful架构,建立自己的Internet Web应用程序的人们几乎肯定会更好。几乎所有平台都可以使用它,并且可以简单地使用它,而不必担心您使用的是哪个版本的规范以及无数种特定于工具的类型转换怪癖等。

3
Jeremy

SOAP相对于当前REST实现的唯一大优点是SOAP的工具更易于使用-大多数RESTful客户端要求我理解接口并编写客户端某种形式。对于SOAP,我只需将wsdl.exe指向它,它就会为我生成类。

0
Wyatt Barnett