我一直认为选择RESTful架构的一个原因是(其中包括)具有高负载的Web应用程序的更好的可伸缩性。
这是为什么?我能想到的一个原因是,由于每个客户端定义的资源相同,缓存变得更容易。在第一个请求之后,后续请求从memcached实例提供,该实例也可以水平扩展。
但是,你不能用传统方法来实现这一点,其中动作在网址中被编码,例如, (booking.php /用户id = 123&travelid = 456&foobar的= 789)。
我一直认为选择RESTful架构的一个原因是(其中包括)具有高负载的Web应用程序的更好的可伸缩性。
这是为什么?我能想到的一个原因是,由于每个客户端定义的资源相同,缓存变得更容易。在第一个请求之后,后续请求从memcached实例提供,该实例也可以水平扩展。
但是,你不能用传统方法来实现这一点,其中动作在网址中被编码,例如, (booking.php /用户id = 123&travelid = 456&foobar的= 789)。
REST的一部分确实是URL部分(它是REST中的R),但S对于缩放更为重要:状态。
REST的服务器端是无状态的,这意味着服务器不必跨请求存储任何内容。这意味着服务器之间不必进行(多)通信 水平可伸缩。
当然,在A(代表性)中有一个小的奖励 负载均衡器 如果你有很好的URL,可以很容易地将请求路由到正确的服务器,而当POST转到主服务器时,GET可以转到从服务器。
我认为汤姆所说的非常准确,但可扩展性的另一个问题是在扩展时改变的障碍。因此,REST的最大租户之一就是HyperMedia。基本上,服务器将拥有路径并在运行时将它们传递给客户端。这允许您在不破坏现有客户端的情况下更改代码。但是,您会发现REST的大多数实现只是隐藏在REST背后的RPC隐藏......这是不可扩展的。
“可扩展”或 “网络规模” 在涉及到Web,云和REST时,它是最受滥用的术语之一,主要用于说服管理层获得他们支持将他们的开发团队转移到REST列车上。
这是一个没有价值的流行语。如果你在网上搜索“REST可扩展性”,你会发现很多人在没有任何具体证据的情况下互相鹦鹉学舌。
REST服务与通过SOAP接口公开的服务完全相同。两者都只是应用程序服务的HTTP接口。这项服务实际扩展的程度取决于 完全 关于如何实际实施此服务。可以在REST和SOAP中编写无法扩展的服务。
是的,你可以用SOAP做一些让它变得更糟的事情,比如依赖状态和会话。开箱即用的SOAP不会这样做。这要求您使用更智能的负载均衡器,如果您真的关心任何形式的缩放,您仍然需要它。
REST允许SOAP不做的一件事,以及此处的其他一些答案,通过HTTP缓存代理或客户端缓存可缓存的响应。这个 可能 当许多操作的响应是可缓存的时,使REST服务比SOAP服务稍微加载一些。所有这些意味着更少的请求最终会在您的服务中出现。
一个 原因(也许不是 该 原因是RESTful服务是无会话的。这意味着您可以轻松使用负载均衡器将请求定向到各种Web服务器,而无需在所有Web服务器之间复制会话状态,也无需确保来自单个会话的所有请求都转到同一Web服务器。