2014-07-16 75 views
0

我不知道使用什麼響應代碼時請求是有效的,但沒有結果,給定參數基於REST的響應狀態碼

的JSON返回的成功真/假和消息

當我做了GET並有一些數據我用:

200 HttpStatusCode.OK

但是在沒有數據,我應該仍然使用OK,並返回JSON成功/消息或建議立即進行刪除d我使用400 HttpStatusCode.BadRequest來表示請求中的內容不好。

+2

這取決於請求是否真的很糟糕,或者是否只是沒有顯示結果。如果沒有結果返回HTTP狀態碼200(OK)和空的json成功消息,但是請求本身沒有格式錯誤並且可以正確讀取 –

+2

「HttpStatusCode.BadRequest」如何指示那裏沒有結果返回?非常誤導。錯誤的請求是一個錯誤的請求 - 一些格式不正確的數據,不正確的輸入值等等。想想那樣 - 你會期望'List .Length'拋出'InvalidOperationException'如果列表爲空? –

+0

請求很好,只是沒有數據。可以說給我27人。但27人不是我的帳戶的一部分或不存在。因此,請求不好,您的請求不是有效的數據。 –

回答

3

這取決於客戶沒有結果意味着什麼。 通常缺乏數據仍然是http 200確定。

例如/employees

但是,對於某些情況下,您可能會返回 HTTP 404 Not Found。

特別是當客戶期望特定資源存在時。

例如employees/update/32

通常任何其他響應代碼(204等)雖然技術上有效和適合,可能會混淆客戶端。 另外,如果請求沒有錯誤,也應該不使用400錯誤請求。

+1

在'/ employees'示例中,我通常會返回200,其響應爲[]'。 –

+0

@達芬兩種都是可行的選擇,如果你打算支持不同的客戶,你的寬容/靈活性會更高一些。 –

1

如果操作成功,但實在是沒有響應數據,使用狀態204 NO CONTENT。如果預期的實體丟失,請返回404 NOT FOUND。如果出現某種內部錯誤,請返回500 SERVER ERROR

按照HTTP/1.1 spec

服務器已經履行了請求,但不需要返回 實體主體,並且可能要返回更新的元信息。 響應可能包含以 實體標題形式的新的或更新的元信息,如果存在,應該與 請求的變體相關聯。

如果客戶端是用戶代理,則不應將其文檔視圖 從導致請求發送的文檔視圖中更改。此響應爲 ,主要用於允許在沒有 引起用戶代理活動文檔視圖更改的情況下發生操作輸入,但 應將任何新的或更新的元信息應用於當前位於用戶代理活動視圖中的文檔 。

204響應不能包含消息體,因此始終由頭字段後的第一個空行終止 。

+0

擡頭:這可能會導致客戶期待JSON回覆的問題,但這並不是特例HTTP狀態碼204. –

+0

我不同意,因爲沒有內容返回無內容,因此我不能返回任何解釋的JSON。 –

+0

正確..這隻適用於操作成功的情況,但實際上沒有數據要返回。如果出現某種錯誤,請使用其他響應代碼。我已經爲我的答案添加了說明。 – metacubed