REST的无国籍原则实际上意味着什么?

bad*_*ash 20 python rest stateless flask

在阅读了关于REST的介绍性文章(Fielding的论文和其他)后,我对无状态的看法是服务器端不应该有会话对象.然而,我看到Flask(以及我不知道的不同技术中的其他REST框架)为我们提供了一个会话对象,用于在此示例中在服务器上存储信息:

@app.route('/login', methods=['GET', 'POST'])
def login():
  if request.method == 'POST':
    session['username'] = request.form['username']
    return redirect(url_for('index'))
...
Run Code Online (Sandbox Code Playgroud)

当然,我误解了REST的无国籍状态.那么,它真的是什么?

Aje*_*rya 5

在REST中引入无状态约束的目的包括提高可见性,可靠性和可伸缩性.这意味着代理和其他中介能够更好地参与涉及自描述无状态消息的通信模式,服务器死亡和故障转移不会导致会话状态同步问题,并且很容易添加新服务器以再次处理客户端负载需要同步会话状态.

REST通过许多机制实现无状态:

  1. 通过设计方法和通信模式,它们不需要在请求之后保留服务器端的状态.
  2. 通过设计服务来公开直接采样和转换服务器端状态的功能,而不会留下遗留应用程序状态
  3. 每当需要会话状态或应用程序状态时,通过在每个请求结束时"延迟"或将状态作为消息传递回客户端

在最后一点暴露了无状态的缺点:需要某种会话状态的应用程序在单个请求的持续时间之后持续存在,需要将该状态作为响应消息的一部分发送回客户端.下次客户端想要发出请求时,状态将再次转移到服务,然后再转移回客户端.

你可以从这里获得更多信息http://soundadvice.id.au/blog/2009/06/

  • 我认为你应该对博客的作者给予应有的评价,你可以通过在答案中添加链接来复制和粘贴答案:http://soundadvice.id.au/blog/2009/06/ (6认同)