2015-06-18 179 views
0

如果對休息服務的調用執行數據庫查詢,則返回代碼的最佳做法是什麼,找不到結果並返回。其餘服務返回404

這應該是一個404或200與消息說明沒有記錄?

URL已正確解析,並且沒有發生服務器錯誤,只是沒有記錄返回。

編輯: 示例網址是:

http://localhost/app/pr_xyz/1234

用來檢索屬於現有用戶1234用戶ID 1234 XYZ名單已經檢索並已知存在在數據庫中。該URL(pr_xyz)僅用於檢索屬於該用戶的xyz列表。

關係是1個用戶到0或很多xyz。

在這種情況下,現有用戶沒有xyz。這應該是一個404或200有意義的消息。

此外,我無法控制該網址。

+4

200,用一個有意義的消息 – Satya

+0

NOOOO。不是200.如果找不到資源,它應該是404.請參見[在沒有找到REST資源時返回404是否正確?](http://stackoverflow.com/q/26845631/2587435) 。 –

+2

@peeskillet在這種情況下,可以找到資源並正確執行。其餘服務正確解析查詢的結果是沒有記錄。你發佈的鏈接談到了檢索服務,以及在找不到服務時應該怎麼做,當然應該是404。 – Gurnard

回答

0

同意@Satya,它應該是200,但我們可以通過反向工作得出答案。

所以,我們從full list of HTTP status codes.開始。從底部開始。

  • 是服務器錯誤嗎?沒有?然後它不是5xx
  • 這是客戶端錯誤嗎?也許?也許它不是4xx
  • 它顯然不是重定向,所以它不是3xx。
  • 這是一個成功的電話嗎?也許。
  • 您是否正在返回臨時回覆?不,它不是1xx。

所以通過淘汰的過程,這是看着2xx代碼。確切地說哪一個很適合取決於你的應用程序的語義。因爲,這不是DELETE調用,那麼我可能不會使用204 No Content,這可能是唯一不錯的選擇。這並不是說沒有內容。

有內容:找到0個結果。沒有搜索結果時,Google不會顯示空白頁面。

所以我們到了200,以及返回一個有意義的身體。如果您返回的是原始結果,那麼您可能需要考慮將它們包裝在搜索結果對象中以提供一些元數據。

啊!那麼等一下,如果不是搜索結果,你是在指示一組RESTful資源?

GET /items 

在這種情況下,我仍然會返回一個200表示沒有項目的主體。

如果您試圖檢索特定資源該怎麼辦?

GET /items/1234 

在這種情況下,是的,你想暗示該項目1234不存在,你應該在我看來返回404

+0

那麼你是說如果一個方法(端點)具有''/ users/{id}「'的URI模板,並且請求的URI是'」/ users/123「',並且從該{ ID}'並沒有發現,你仍然會返回200? –

+1

不,我的答案的最後一段明確說在這種情況下返回404。原始問題意味着許多結果(即不是單一資源)是可能的,因此200成爲替代方案。 –

+0

除非OP特別要求訪問返回空結果集的集合資源,否則我不會回答主要關心的問題。我可能誤解了這個問題,但我沒有這樣讀過。 –