应该怎么处理RESTful应用中的session?

VIP-linxi


对于从事开发的朋友来说,RESTful并不陌生,我们在开发中会经常接触RESTful风格的API。在我们调用API时,有些敏感操作的API是需要鉴权的(判断API调用方是否有权限请求此API),所以我们在调用这些敏感API前会先进行鉴权,问题来了,是不是我们每调用一次API就要去鉴权中心进行用户认证操作呢?当然不是,一旦认证成功后,后续的请求是不需要重新发起认证的,看上去这和传统的WEB表单登录是一样的,可能不少开发者觉得这种会话状态的保持是依靠Cookie+Session来实现的,这种认知是错误的,为什么这样讲呢?听且我来分析。

RESTful是什么?

RESTful它只是一种设计风格,严格意义上说它并不是一套规范(10个人可以写出9种不同的RESTful API出来),更不能把它错认为是一种协议。

RESTful主要是用于WEB数据接口的设计,它是基于HTTP(S)协议的,调用方以“HTTP动词+宾语”这种风格来进行资源的请求,服务器端返回的数据约定为JSON对象。 常见的HTTP动词是:GET(读)、POST(创建)、PUT(更新)、PATCH(部分更新)、DELETE(删除)。

RESTful API是无状态的!

我们一直强调HTTP协议本身是无状态的协议,所以才有了Cookie+Session机制来实现会话保持。由于RESTful是WEB API的一种设计风格,它是不推荐我们使用Session来保持会话的。如果我们还以传统WEB思想来写WEB API,那整个业务流程就会变得异常复杂,因为会涉及到这些问题:

  • Cookie如何保存与传递?

  • API如果是分布式布署的,如何维护会话?如何保证会话一致性?

RESTful通过 Token 变相实现“会话”

对于RESTful API,我们要抛弃“会话”的概念,所有的鉴权操作全部通过客户端传递过来的 Token 来进行判断,这样做的好处就是:

  • 提升性能

  • 降低耦合度

  • 易于水平扩展

  • 更易于前后端的分离


以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!


分享到:


相關文章: