可以說有一個有訂單的產品。如果您要求/ products/product_id,則如果product_id不存在,它將返回404。但是,如果這個產品沒有訂單,或者應該返回一個空數組,那麼應該/ products/product_id/orders返回一個404?RESTful API應該爲對象數組返回404嗎?
34
A
回答
47
2
你真的應該做兩個只有一個事情
要麼返回一個200 (OK)
狀態代碼,並在體內空數組。
或返回204 (NO CONTENT)
狀態碼和NO響應正文。
對我來說,選項2在技術上看起來更加正確,並符合REST和HTTP原則。
但是,選項1似乎對客戶端更有效 - 因爲客戶端不需要額外的邏輯來區分兩個(成功)狀態碼。因爲它知道,它總是會收到一個陣列,它只是檢查是否有沒有,有一個或多個項目,並適當地處理它
0
在我看來:
我們談論HTTP狀態值在這裏,應該有更高層次的迴應。
人們應該在代表層看到這一點。就像你的api無法回答請求一樣,如果api調用本身不可用,那麼你可以回覆一個404.
但是當你的調用存在時,它可以回覆一個數據集合,但是它是一個空的集合,你可以返回一個http 200,結果爲空。
我會使用http狀態值來指示請求驗證,而不是直接使其依賴於更深的api圖層中的內容。
或者人們可以嚴格遵循在網上發現的協議,但沒有人追隨他們...
3
不要返回數組。返回一個對象在任何情況下,像
{
offset: 30,
limit: 10,
arr: []
}
它允許您添加元數據(分頁否則水木清華)
通常與HTTP狀態代碼:200
而且,這是傳統的web API行爲,由安全驅動擔心: https://www.owasp.org/index.php/OWASP_AJAX_Security_Guidelines#Always_return_JSON_with_an_Object_on_the_outside
相關問題
- 1. 休眠〜RESTful返回一組對象
- 2. RESTful API 404成功了嗎?
- 3. RESTful API POST/DELETE應該在正文中返回什麼?
- 4. 返回Alamofire對象數組
- 5. Mongo(ose)返回對象數組對象
- 6. Java RESTful API - JSON repsonse不返回對象的某些字段
- 7. RestFul Web API返回問題
- 8. 我應該從CGImageSourceCopyPropertiesAtIndex調用中釋放返回對象嗎?
- 9. 接口方法應該返回一個自定義對象嗎?
- 10. 我應該在返回對象之前發送retain或autorelease嗎?
- 11. 對象數組返回空數組?
- 12. API應該數組形式返回數據
- 13. 不應該getElementById返回一個包含子對象的對象嗎?
- 14. python不返回None對象,它應該返回時TDirectoryFile根對象
- 15. 返回的Web API PUT 404
- 16. API GET請求返回404
- 17. YouTube V3 API(googleapis.com)返回404?
- 18. Google Place Photo API返回404
- 19. REST API應該在響應體中返回異常嗎?
- 20. 爲什麼我的JS應該返回一個對象返回undefined?
- 21. 從函數返回對象數組 - VBA
- 22. 迭代器應該返回HashSet的,但作爲對象
- 23. 爲什麼此數組返回0作爲對象計數?
- 24. 無法訪問從API調用中返回的對象數組
- 25. 函數應該返回引用還是對象?
- 26. 數據映射器應該如何返回一個域對象?
- 27. 我應該如何從函數中返回一個對象?
- 28. 數組名和索引應該用於命名JavaScript對象嗎?
- 29. 二維數組對象返回null
- 30. 對象數組返回相同的值
喲你可以定義你自己的結果。給每個結果一個不同的ID – Grumpy 2011-05-18 13:59:01
+1:我們現在正在討論與視頻產品集合相同的問題。 – 2011-05-18 14:04:02
@Grumpy你能解釋一下你的意思嗎? – rbp 2013-06-07 09:55:35