2011-05-18 4 views
34

注文がある商品があるとします。/products/product_idを要求すると、product_idが存在しない場合は404が返されます。しかし、/ products/product_id/ordersは、この製品の注文がない場合、または空の配列を返す必要がある場合は404を返しますか?RESTful APIはオブジェクトの配列に対して404を返しますか?

+0

yoあなた自身の結果を定義することができます。それぞれの結果に異なるIDを付けてください – Grumpy

+2

+1:私たちは今、ビデオのコレクションを集めて同じ質問を議論しています。 –

+0

@Grumpyあなたはもう少し何を意味するか説明できますか? – rbp

答えて

47

私は空のコレクションを返します。ゼロオーダーの商品は完全に有効な概念なので、空のオーダーコレクションの存在は、この商品にオーダーコレクションがないことを推測する404よりも理にかなっています。

+2

+1、私たちはこのように行って、私はその決定に満足しています。 – ale

+0

注文はそれ自体のリソースと見なされるべきですか?またはproduct_idリソースから返された情報の一部ですか? – chernevik

+0

Chernevikはい。それが別のURLで、200を返すことができれば、それは別のリソースです。サーバは、同じコントローラを使用して両方のリソースを処理できますが、2つの異なるリソースです。 –

2

あなたは本当に一つだけ二つの

を行うのどちらか200 (OK)ステータスコード、および体内の空の配列を返す必要があります。

または204 (NO CONTENT)ステータスコードとNO応答本文を返します。

私にとっては、オプション2は、技術的には正しく、RESTとHTTPの原則に沿っているようです。

しかし、クライアントは2つの(成功した)ステータスコードを区別するために余分なロジックを必要としないため、オプション1はクライアントにとってより効率的です。

私たちは、HTTPステータス値を話している:それは常に配列を受けることを知っているので、それは単に、それはどれも、1、または多くのアイテムを持っていないかどうかを確認し、適切な私の意見では

0

それを処理しなければなりませんここでは、より高いレベルの回答を与えるべきである。

デリゲートの層でこれを確認する必要があります。あなたのAPIがリクエストに答えることができない場合、API呼び出し自体が利用できない場合、404で返信することができます。

しかし、あなたの呼び出しが存在し、空のコレクションであれば、空の結果でhttp 200だけを返すことができます。

私は、リクエストの検証に関する指示を与えるためにhttpステータス値を使用し、より深いapiレイヤのコンテンツに直接依存しないようにします。

3

は、配列を返すしないでください...

または1つは、厳密にはネット上で見つけたプロトコルに従うことができ、誰も彼らを続きません。 200

また、この:それはあなたがHTTPステータスコードと通常

ページネーションまたは他のなめらか用)メタデータを追加することができます

{ 
    offset: 30, 
    limit: 10,  
    arr: [] 
} 

のように、どのような場合にオブジェクトを返します。 セキュリティ懸念している従来のWeb APIの動作です: https://www.owasp.org/index.php/OWASP_AJAX_Security_Guidelines#Always_return_JSON_with_an_Object_on_the_outside

関連する問題