2011-05-18 40 views
34

可以說有一個有訂單的產品。如果您要求/ products/product_id,則如果product_id不存在,它將返回404。但是,如果這個產品沒有訂單,或者應該返回一個空數組,那麼應該/ products/product_id/orders返回一個404?RESTful API應該爲對象數組返回404嗎?

+0

喲你可以定義你自己的結果。給每個結果一個不同的ID – Grumpy 2011-05-18 13:59:01

+2

+1:我們現在正在討論與視頻產品集合相同的問題。 – 2011-05-18 14:04:02

+0

@Grumpy你能解釋一下你的意思嗎? – rbp 2013-06-07 09:55:35

回答

47

我會返回一個空的集合。零訂單的產品是一個完全有效的概念,所以空訂單集合的存在比404更有意義,因爲這會推斷出該產品沒有訂單集合。

+2

+ 1,我們這樣走了,我對這個決定感到高興。 – ale 2011-05-18 14:57:18

+0

訂單應該被視爲一種資源嗎?或由product_id資源返回的一條信息? – chernevik 2011-05-18 15:45:12

+0

Chernevik是的。如果它是一個不同的URL,它可以返回一個200,那麼它是一個不同的資源。服務器可以使用相同的控制器處理這兩種資源,但它們是兩種不同的資源。 – 2011-05-18 17:26:27

2

你真的應該做兩個只有一個事情

要麼返回一個200 (OK)狀態代碼,並在體內空數組。

或返回204 (NO CONTENT)狀態碼和NO響應正文。

對我來說,選項2在技術上看起來更加正確,並符合REST和HTTP原則。

但是,選項1似乎對客戶端更有效 - 因爲客戶端不需要額外的邏輯來區分兩個(成功)狀態碼。因爲它知道,它總是會收到一個陣列,它只是檢查是否有沒有,有一個或多個項目,並適當地處理它

0

在我看來:

我們談論HTTP狀態值在這裏,應該有更高層次的迴應。

人們應該在代表層看到這一點。就像你的api無法回答請求一樣,如果api調用本身不可用,那麼你可以回覆一個404.

但是當你的調用存在時,它可以回覆一個數據集合,但是它是一個空的集合,你可以返回一個http 200,結果爲空。

我會使用http狀態值來指示請求驗證,而不是直接使其依賴於更深的api圖層中的內容。

或者人們可以嚴格遵循在網上發現的協議,但沒有人追隨他們...