REST如何无状态?

时间:2012-12-21 11:58:03

标签: rest soap

我知道REST并且知道在不使用会话的情况下创建RESTful Web服务,我知道它更好但我并不真正理解无状态的概念以及如何使用REST可以使您的应用程序可扩展

有人可以解释REST,无状态和可伸缩性这两个方面吗?SOAP有何不同而且不可取?

3 个答案:

答案 0 :(得分:5)

有状态API将为所有连接的客户端维护会话。这意味着会话需要在服务器之间共享,这限制了可伸缩性。

通过在客户端上存储此状态并将其与每个请求一起发送,您可以具有相同的状态,但具有更好的可伸缩性。

答案 1 :(得分:2)

创建RESTful服务不会使您的应用程序可扩展,您可以实际上创建基于会话且无法跨多台计算机或粘性会话或完全无状态的RESTful服务

至于可伸缩性,许多因素决定了服务是否可扩展,实际上服务可以可扩展,即使它需要会话(例如,如果您的服务具有粘性会话意味着会话在一台计算机上托管,网络访问者总是回到他的会话所在的同一台机器上。

无状态服务使扩展更容易,因为这意味着一旦处理了请求,来自该Web访问者的下一个请求不一定必须返回到同一台机器,这意味着您(理论上)可以拥有尽可能多的请求您想要的机器服务相同类型的请求。如果您的流量增加一倍,您只需添加相同数量的机器和繁荣,您现在可以提供两倍的请求。

然而,在实践中,事情变得复杂,并且很难创建完全无状态的服务。大多数情况下,如果您的Web访问者可以更新数据,则会出现并发问题,因为两个Web访问者可以更改相同的数据,并且必须进行某种同步以防止数据损坏。在这些情况下,您可能希望拆分服务,以便允许您更改数据的服务不是无状态的,而那些允许您提取数据的服务是。在大多数情况下,我猜大多数繁重的工作都在数据提取方面,而不是数据更新,所以这很好。

对于SOAP,我只能说世界正朝着REST方向发展,因为它更轻盈。

答案 2 :(得分:1)

无状态意味着你可以拥有任意数量的前端,每个人都可以用同样的方式回答请求,没有文件系统会话可以处理,即

所以你可以扩展(添加尽可能多的前端),这是无国籍的最明显的原因。