RESTful API 中的会话 [重复]

Posted

技术标签:

【中文标题】RESTful API 中的会话 [重复]【英文标题】:Sessions in a RESTful API [duplicate] 【发布时间】:2015-08-16 20:59:06 【问题描述】:

我目前正在阅读 REST,REST 的规范之一是它应该是无状态的,并且每个请求都应该在 URL 或请求正文中包含必要的状态。这与使用会话的做法形成对比,这对于维护用户是否登录等信息非常有帮助。那么,如果想设计一个 RESTful API,是否应该避免使用会话?

【问题讨论】:

【参考方案1】:

嗯,是的,至少在服务器端。事实上,这就是 REST 的意义所在:代表性状态转移。通过确保所有需要的状态信息都包含在通过 HTTP 传输的状态中,并消除服务器端会话状态,可以构建易于扩展、可扩展的后端。

在过去,我们不得不担心会话状态、维护会话、保持连接、状态敏感的负载平衡等等。使用 REST,这一切都被消除了。

所以现在,这里有一个小测验:在没有服务器端 状态的情况下,您如何维护诸如登录状态之类的状态?他是一个提示:html 不是客户端为您管理的唯一状态。

【讨论】:

好的,所以要在没有服务器端状态的情况下保持登录状态等内容,一种可能的方法是在客户端的每个请求中包含用户名和密码?但这不是有点不安全吗? 是的,这是可能的。现在,想想 cookie 和加密。您可以创建会话 ID 或身份验证 ID,对它们进行加密签名,然后通过它们。这是 Ruby on Rails 教程中的一个示例:railstutorial.org/book/log_in_log_out

以上是关于RESTful API 中的会话 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 MEAN.js Restful 无会话 API 后端的 Oauth 社交登录

laravel restful api 与 Auth

Java / Spring中与Restful API交互的工具[重复]

我可以使用 Firebase 托管在 Node.js 中编写 RESTful API [重复]

RESTFUL(超媒体)API 中的动词

通过 RESTful 调用注销用户(使会话无效)