如果已經有答案,我表示歉意。我發現了相關的問題(例如HTTP status code for a partial successful request),但不完全一樣。只有部分數據可用時檢索資源的HTTP響應
我正在構建一個API,該API返回來自多個來源的聚合數據。有時,某些關鍵部分數據不可用,客戶端必須知曉,並且錯誤數據包含在響應中。
除了缺失字段的嚴重性以外,其餘資源是有效且有用的,可被視爲部分更新(例如,如果您只有權限查看部分資源)。
到目前爲止,該選項
- 回200,認爲這是一個局部的資源,在應用程序處理錯誤數據字段,你會與任何其他數據
- 回報207來強調它不是完全成功,但207並不嚴格HTTP。
- 返回500,你會在200
我偏愛選項1,但我不完全相信在應用程序中處理成功返回的數據。有沒有一種清晰的方式來處理這個問題?也許定義一個特定的content-type
?
它的主觀性,我個人認爲500是合適的,因爲數據是錯誤的,因爲它不符合相應的請求的期望。您可以添加您喜歡的任何自定義響應標題,例如'X-Response-Type:partial'並指示您的客戶在處理響應數據前參考該值,前提是他們收到代碼500 –
Hi @AlexK。我可以看到500的情況,但由於我們專門以有用的方式處理數據缺失,並且資源可以(並且)以一致的方式返回,所以200會更合適。如果你想繪製一個平行線,我會說它類似於處理的異常,代碼中,而500將類似於未處理的異常。也許這不是一個好的平行?我們正在返回一個內容類型,突出顯示這些信息只是爲了提醒客戶。這是否從你的POV有意義? – guioconnor
個人而言,我會返回'200'並指出響應正文(您的選項#1)中缺少哪些數據。據我所知,REST非常以資源爲中心,因爲在你的情況下,資源是**有效和有用的**(換句話說,「它存在」),'200'似乎是最好的選擇。 這也可能不是一個好主意,用'content-type'來欺騙,因爲這可能會讓一些客戶感到困惑。只要用簡單的'application/json'(或XML)即可。 我還注意到很多API往往會向'200'方向「錯誤」,並將豐富狀態作爲數據返回。似乎更多的「慣用」這種方式。 – sigriston