03.08 應該怎麼處理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 來進行判斷,這樣做的好處就是:

  • 提升性能

  • 降低耦合度

  • 易於水平擴展

  • 更易於前後端的分離


以上就是我的觀點,對於這個問題大家是怎麼看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我瞭解更多科技知識!


分享到:


相關文章: