2011-01-08 45 views
4

我想開發一個REST API。 REST準則指定該狀態不得存儲在服務器端。 但其餘的方法,我想實現意味着用戶連接管理。爲了尊重無狀態,我需要在每個REST方法請求中提供用戶憑據嗎?我發現效率很低...沒有其他更有效的方法嗎?REST無國籍和用戶會話

回答

7

無國籍是一個REST架構的主要約束條件之一,可在原publication閱讀:

5.1.3無國籍

接下來我們添加一個約束到客戶端 - 服務器交互:通信本質上必須是無狀態的,如第3.4.3節(圖5-3)中的客戶端無狀態服務器(CSS)樣式,以便客戶端到服務器的每個請求都必須包含所有必要的信息理解請求,並且不能利用服務器上存儲的任何上下文。 因此會話狀態完全保留在客戶端上。

所以你提到的憑據,您需要單獨爲他們提供在每次調用(即基本驗證+ SSL)。當然,這是「真實的世界」出現的,應用程序開始有所不同。你也可以使用OAuth,固定標記等,但請記住,你則削弱了你的API的「RESTfulness」。

+0

好,感謝您的回答;)不,我並不需要使用OAuth因爲我可以讓不同的客戶端知道用戶憑據。 – ayorosmage 2011-01-08 15:20:45

3

進行認證每個請求並不一定需要通過用戶名和密碼在每次請求。一些系統將採用用戶名和密碼,驗證它,然後創建某種類型的安全令牌,以便在每個請求上傳遞。

的想法是,令牌應該是快於做一個完整的用戶名密碼檢查來驗證。很明顯,取決於令牌生成和驗證的複雜程度,您可能會打開其他安全漏洞,但您必須決定它的重要性。