2012-01-03 41 views
0

REST客戶端通常每次都會發送一個身份驗證參數,這種身份驗證參數在某種程度上像瀏覽器中的PHP會話ID Cookie那樣起作用。但是REST客戶端是沒有瀏覽器,所以我雖然在我的服務器端代碼爲什麼不能我採取的驗證參數和使用使用Sessions實現REST API是否很好?

session_id($_GET('authentication_code')); 

是它做的好辦法?

+0

我認爲你至少應該驗證並處理內容 – 2012-01-03 10:47:46

+4

以任何方式使用PHP會話都不符合「無狀態」[約束](http://en.wikipedia.org/wiki/Representational_state_transfer#Constraints)的REST,所以我會說這個簡短答案是「不」。 – DaveRandom 2012-01-03 10:48:45

+0

看看「冪等」是什麼意思。應該用這個詞來描述REST服務。 – duffymo 2012-01-03 10:50:01

回答

3

答案是否定的。 S REST適用於stateless,這意味着您無法在服務器上存儲任何內容。

+12

REST代表具有代表性的狀態轉移,所以S代表狀態,而不是無狀態,所以答案是否定的,但不是因爲你說的原因。 – 2012-01-04 11:33:34

+0

@StuartGrimshaw是的,但是你每次都會轉移狀態,所以雖然S並不意味着「無狀態」,但它代表了它。你當然非常正確。 – 2012-01-04 11:35:35

+0

@TomvanderWoerdt S對於'無國籍'是非常具有誤導性的。我想像初級開發者閱讀這個答案,在會面或採訪中散佈這個「小廢話」。我理解你的想法,但不要這樣做;) – ducin 2016-12-27 10:09:19

5

REST代表Representation State Transfer,並在它的最純粹的形式歸結爲6 constraints,其中一個是客戶端 - 服務器通信必須是無狀態的,它必須包含完成請求所需的所有信息,沒有客戶端的狀態必須被存儲在服務器上。

然而,服務器可能是有狀態的,這就是爲什麼您可以在服務器上存儲客戶端的認證碼,但是由客戶端自己來爲每個請求傳遞該代碼,服務器不能使用會話來存儲認證碼。

相關問題