2016-11-07 6 views
1

クライアントは/ items/color/{color}のGETリクエストを受け取ります。RESTful APIデザイン。リクエストにフィルタが付いてくると、そのフィルタの値も返すべきですか?

サーバがカラーを持つオブジェクトの配列を返した場合、各アイテムオブジェクトはカラープロパティを持っている必要がありますか?

クライアントは色を要求したので返されるアイテムの色を知っています。したがって、サーバーは応答サイズを小さくするかどうかを試してください。

EDIT:人々は帯域幅の節約の部分でもっと触れることができますか?リソース全体を返す方が良い場合は、リソース全体を返す理由だけでなく、リソース全体を返す方が良い理由が含まれていますか?

答えて

2

一般的には(少なくとも私が理解しているようにRESTの考え方ですが)、リクエストの結果は常に完全リソースである必要があります。項目にメンバーcolorが含まれている場合、結果にそのメンバーを抑制する理由はありません。それはRESTのリソースのコンセプトと矛盾します。リソースはプロパティを変更しません。

メンバーを抑制することは予期しないことになるだけでなく、実際にそのメンバーを期待するときにクライアントを壊すことさえあります。

クライアントがフィルタなしでREST呼び出しの結果を解析する機能を持っていると仮定します。すべてのフィールドが返され、クライアントはすべてのフィールドを解析します。クライアントは正確に同じリソース(item)を要求しますが、突然フィールドが異なります。上のコードを解析して結果を再利用することはできません。

また、それについて考えてみると、そのメンバーを返すだけでなく、そのメンバーを抑制する作業が多分あります。

+0

さて、ドキュメントがあります。あなたがこの動作を記述し、それがあなたのAPIに一貫しているなら、それは本当に予期せぬことではありませんか? また、帯域幅の節約については、それに触れることができますか?それは関係ない? Web開発では、人々は実際に各kbを気にするので、レスポンスのサイズを小さくしてアプリケーションを速くすることが重要と思われます。違いは明らかに、返される配列が大きいほど大きくなり、フィルタが多いほど、実際には重大なものになる場合もあると思います。 各オブジェクトで既に知っているクライアントと同じ情報を繰り返すことは無駄に思えます。 – Erndob

+0

リソースは、取得、フィルタリングされているかどうかにかかわらず同じフィールドを含む必要があります。それが私がRESTを理解する方法です。もちろん、あなたは何でも自由に実装することができます。サイズは重要ですが、あなたの例では20バイトを節約できますか?私は何をするだろう:クライアントが返す必要があるフィールドを指定することができます。その場合、クライアントは帯域幅を節約する責任があります。 –

1

「正しい」回答はありません。これは一般的なAPI設計に依存しており、決定する必要があります。

私はThorstensのコメントに同意します。これはリソース全体を返す必要があります。これは一般的なRESTの考え方に近いものです。その間、FB APIのようなフィールドを選択するメカニズムを実装することもできます:this paragraphの「フィールドの選択」を参照してください。

0

あなたは応答の色を保持する必要があります。あなたは、異なる色の複数の項目がページ内にある場合、あなたは、クライアントが世話をしてはいけない何を要求したことは、あなたが

  • 得るものであることを確認してください

    • :このため、複数の理由があるでしょう色に基づいて項目を「フィルタリング」する
    • 「安全」な回答があります。たとえば、クライアントは青色を要求しますが、悪意のあるスクリプトは赤色の項目としてこの応答を操作します。
  • +0

    なぜクライアントは応答をリフィルしますか?それはサーバー側でフィルタリングされ、クライアントは返されるすべてのアイテムが「赤」であるとみなします。それ以外の場合はサーバーコードが破損します – Yazan

    +0

    レスポンスを再フィルタリングする必要はありませんが、クライアントは、応答。 –

    +0

    クライアントは既にフィルタのデータをURL '.../items/red'で送信するので、クライアントは応答を再確認する必要はありません(私が求めているのですか?) – Yazan

    関連する問題