2010-08-11 60 views
2

我正在開發一個RESTful API。其中一個URL允許呼叫者通過ID請求特定人員的記錄。處理缺失數據的RESTful方式

那個ID的記錄返回的常規值不存在是什麼?服務器應該發回一個空對象還是404或其他東西?

謝謝。

回答

1

404,或者如果之前有410(去過)(但在這種情況下404也沒有錯)。

與REST一樣,最好還是發送一個表示(即使是4xx代碼),告訴客戶端該資源不存在,並告訴它可以採取哪些措施。

2

一般而言,在這些情況下,我會根據CodeIgniter Rest Server使用的約定從我的RESTful API中返回404錯誤。

這在大部分情況下都能正常工作,並且是最「正確」和「純粹」的解決方案。但是,404錯誤可能會使處理客戶端上的這些「缺失」情況變得更困難,因爲您可能需要一個單獨的錯誤處理程序,而不是僅僅不做任何事情,因爲您收回了一個空對象。

我會建議衡量這兩種方法的親和度,並實施最適合你的方法。

+0

客戶端如何區分不存在的URL路徑和不存在的記錄? – Ralph 2010-08-12 13:46:26

+0

既不存在,也沒有區別。不過,我非常喜歡@布魯諾提出的用404代碼發送表示的建議 - 這可以用來做出這樣的區分。 – 2010-08-12 17:00:03

0

除了考慮404之外,我會考慮返回「空白」的某種表示形式的可能性:考慮谷歌搜索詞klinjeraliknoplidocus。在撰寫本文時,它會返回200 OK並顯示「不匹配」,並且建議無法繼續前進。它不返回404,因爲URI http://www.google.com/search?q=klinjeraliknoplidocus實際上標識了一些內容,即「Google所知的所有與術語klinjeraliknoplidocus相關的文檔」。很快,這個頁面就會出現在那裏。

所以:

  • 如果您定義查找功能爲返回零個或多個項目與此ID,然後在200和空響應有意義。
  • 如果您將查找功能定義爲完全返回一個項目,則404(或410)是有意義的。
+0

400(錯誤請求)如何?這樣我可以區分誤輸入的URL(400)和不存在的ID。 – Ralph 2010-08-11 22:08:13

+0

我認爲錯誤的請求應該保留用於語法錯誤。標識垃圾的URI在語法上不正確。格式不正確的標題(例如,'If-None-Match:abc'缺少ETag周圍的引號)格式不正確;在PUT或POST中有語法錯誤的XML文檔在語法上不正確,兩者都可能導致400s。爲/ customers做一個GET?q = 12345或/ customer/id/12345本身在語法上不是不正確的。如果客戶ID不存在,取決於資源定義的性質,應使用200或404。 – mogsie 2010-08-12 10:24:05