2016-09-22 26 views
0

我有一個端點來獲取用戶。如果用戶沒有找到它將是一個404. 如果我要求爲該用戶的一些數據,並不存在這是一個204.對於這個REST端點,什麼是合適的響應404或401

如果我要求爲用戶的一些數據,但用戶不存在。在這種情況下,它是404還是401?

在我看來,這是一個404,但考慮以下情形......

還有誰發出請求到服務器REST REST客戶端。 REST服務器(使用spring安全性)嘗試首先加載用戶,但由於用戶不存在於系統中而無法加載。由於Spring安全性看到UserNameNotFound異常,它會拋出401.這似乎也是正確的。

回答

0

在我看來,你永遠不應該故意發送404 404將被用來當我們調用一個不存在的API。

所以,如果你扔404,客戶端會認爲他們調用錯誤的API或API不可用。

如果沒有數據,204是apt,204告訴你正在調用正確的API,服務器確認它,但沒有響應從服務器端提供。

因此,無論用戶還是用戶都沒有數據,它應該是204作爲狀態。

2XX - 成功 3XX - 請求移動 4XX - 錯誤的請求 5XX - 服務器錯誤

+0

我不認爲'204'適用於這種情況。具有空陣列/對象的'200'會更好。 –

+0

我很同意@CássioMazzochiMolin,但如果你想依靠狀態而不是驗證迴應數據來查看它是否爲空,204是最好的選擇。 –

7

使用404當客戶端請求不存在的資源:

6.5.4. 404 Not Found

404(未找到)狀態代碼表示原始服務器 沒有發現對當前表示目標資源或者是 不願意透露存在。 A 404狀態碼確實 未指示此缺少表示是暫時的還是
永久性的;如果
原始服務器大概通過一些可配置的手段知道 該條件可能是永久性的,則410(消逝)狀態代碼優於404。 [...]

如果您正在使用HTTP authentication,使用401當客戶端請求的資源和憑據無效(身份驗證問題):

3.1. 401 Unauthorized

401(未經授權)狀態代碼指示請求具有 未應用,因爲它缺少目標資源的有效認證憑證 。生成401響應的服務器必須發送一個WWW-Authenticate頭字段,其中包含至少一個適用於目標資源的挑戰 。 [...]

有關更多詳細信息,請參閱RFC 7231,HTTP/1.1協議的語義和內容的當前參考。也有從Racksburg看看下面的decision chart


狀態代碼分爲三個粗略分類:

HTTP status codes categories


從這裏開始:

HTTP status codes


選擇2xx3xx狀態代碼:

HTTP 2xx and 3xx status codes


選擇4xx狀態代碼:

HTTP 4xx status codes


選擇5xx狀態代碼:

HTTP 5xx status codes

相關問題