這是一個概念性問題。RESTful登錄失敗:返回401或自定義響應
我有一個客戶端(移動)應用程序,它需要支持針對RESTful Web服務的登錄操作。因爲Web服務是RESTful的,所以這相當於客戶端接受用戶的用戶名/密碼,用服務驗證用戶名/密碼,然後只記得將所有後續請求發送給用戶名/密碼。
此Web服務中的所有其他響應均以JSON格式提供。
問題是,當我查詢Web服務時,只是爲了找出給定的用戶名/密碼是否有效,Web服務是否總是以JSON數據響應告訴我它成功或失敗,或者是否應該返回HTTP 200良好的憑證和HTTP 401憑證不良。
我問的原因是,即使您只是詢問憑據是否有效,其他一些RESTful服務也會使用401作爲錯誤憑據。但是,我對401響應的理解是,它們代表的是一種資源,如果沒有有效的憑據,您將無法訪問該資源。但是登錄資源應該是任何人都可以訪問的,因爲登錄資源的全部用途是告訴你你的憑證是否有效。
換句話說,在我看來,像一個請求:
myservice.com/this/is/a/user/action
應該返回401,如果提供不正確的憑據。但一個請求,如:
myservice.com/are/these/credentials/valid
永遠不應該返回401,因爲該特定的URL(請求)被授權有或沒有有效憑證。
我想聽到一些有道理的意見。處理這種情況的標準方式是什麼,並且是處理這種邏輯合適的標準方式?
你關於返回資源的觀點似乎有效,也許這是正確的舉措。至於說401是正確的迴應,我會很感激那裏的一些解釋。我已經閱讀了HTTP規範,就像你在這裏所包含的那樣,但對我而言,這並不是對你的斷言的直接而明顯的確認。也就是說,認證不需要詢問認證的有效性 - 但是你所包含的內容是「專門用於需要認證時使用」。 – Matt 2012-07-30 04:21:55
你的看法是正確的。您無需進行身份驗證即可查詢您的賬戶對象。但是,您需要成功進行身份驗證才能夠接收資源,並且需要進行身份驗證,失敗或尚未提供的身份驗證,因爲您不要求提供憑證的有效性,但是對於特定資源根據您提供的憑據。 – Cleric 2012-07-30 04:31:22
對,我猜我的含義不明確。如果一個賬戶資源被退還,我在你的同一頁面 - 我同意你的立場。當我再次詢問401時,我的意思只是針對我要求有效性的情況。我知道這是來自REST方法的「錯誤」,但我只想爲這個問題得出結論。因此,如果我做錯了錯誤的事情並要求有效性作爲布爾返回,那麼返回401是否不合適,因爲該請求/查詢實際上不需要身份驗證? – Matt 2012-07-30 07:23:16