REST中的ST(状态转移)是否意味着状态必须由客户持有?

我读过代表性状态转移(REST)中的“状态转移”是指什么? 和几篇关于REST的文章或视频,我知道REST的一个约束是无状态的。

  • 根据http://www.restapitutorial.com/lessons/whatisrest.html这样的许多帖子,为了使架构无状态,客户端必须拥有足够的信息让服务器做正确的事情,这意味着服务器没有任何客户状态。 那么这是否意味着我们只需要通过在cookie等客户端中添加一些用户状态来构建REST应用程序呢?

  • 但根据许多帖子,如粘滞会话/会话相关性负载分流策略的优点和缺点? ,我们可以通过将用户数据存储在数据库或memcache中来创建一个无状态应用程序,从而避免将会话存储在应用程序服务器中。 如果我们尝试这种方法,我们可以制作一个REST架构吗?


  • 诚实的REST服务的想法是允许与任何客户端的简单通信,甚至是不在Web浏览器中的客户端:它可以是移动或桌面应用程序或其他任何东西。 因此,对服务的每个请求都必须提供处理该请求的所有必要信息。 保持服务器上的状态会使任务复杂化,因为客户端无法控制它。

    所以,是的,理想状态必须由客户持有。 但是,我们需要清楚地理解“国家”的含义。 因为这里有不同的状态:应用程序状态和资源状态。 我喜欢以下关于这种区别的文章。

    PS和BTW,在Cookie中保持状态也会使客户的生活复杂化(如果他们不是网络浏览器)。


    那么这是否意味着我们只需要通过在cookie等客户端中添加一些用户状态来构建REST应用程序呢?

    您不必使用永久存储来执行此操作。 如果我们正在讨论浏览器术语,则可以使用JavaScript程序作为客户端,并且可以将应用程序状态(客户端状态)存储在JavaScript变量中,而不是使用服务器端会话和会话Cookie。

    如果您的系统支持身份验证,那么您必须在每个请求中发送用户标识符(例如用户名和密码),例如在HTTP身份验证标头中。 请注意,REST主要用于自动化客户端,而不是浏览器,但是。 您也可以为浏览器编写自动化的JavaScript客户端。

    我们可以通过将用户数据存储在数据库或memcache中来创建无状态应用程序,从而避免将会话存储在应用程序服务器中

    这是错误的。

    链接地址: http://www.djcxy.com/p/41161.html

    上一篇: Does ST(State Transfer) in REST mean that state must be held by client?

    下一篇: how to maintain session state in restful webservics in cakephp?