【问题标题】:How is REST stateless?REST 是如何无状态的?
【发布时间】:2012-12-21 11:58:02
【问题描述】:

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

谁能解释一下 REST 的这两个方面,无状态和可扩展性,以及 SOAP 有何不同和不可取之处?

【问题讨论】:

    标签: rest soap


    【解决方案1】:

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

    通过将此状态存储在客户端并随每个请求一起发送,您可以拥有相同的状态,但具有更好的可扩展性。

    【讨论】:

    • 所以,如果我理解,为了可扩展性,必须有几台服务器,如果只有一台,那么只有一个会话存储/用户,对吗?
    • 即便如此,会话也需要在一台服务器内共享,这总是会对性能产生一些的影响。将 API 设计为无状态是一个好习惯。它还使那些想要与 API 交互的人更容易。
    【解决方案2】:

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

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

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

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

    至于 SOAP,我只能说世界正在朝着更轻量级的 REST 发展。

    【讨论】:

      【解决方案3】:

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

      因此您可以扩展(添加任意数量的前端),这是实现无状态的最明显原因。

      【讨论】:

      • 无国籍是无国籍最明显的原因吗?我想你要么加几句,改几句,要么删几句……
      • 我使用过 Web 服务,其中每个请求都有一个包含用户名和密码的 XML 文件,您需要每次都输入它,所以在这种情况下,这也是可扩展的
      • @madflow 重写了这部分。
      猜你喜欢
      • 2020-12-24
      • 2019-01-07
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2011-11-12
      • 2015-09-18
      相关资源
      最近更新 更多