製品のリソースコレクションは/products
です。RESTful APIです。クエリ文字列の長さが十分でない場合はどうなりますか?
このコレクションをフィルタリングして、特定のリストclass
id
のいずれかを持つメンバーのみを返すようにしたいとします。たとえば:
GET /products?classes=100,101,102
これは、列挙されたクラスのいずれかを持っている製品のメンバーのコレクションを返す必要があります。
問題は、何千もの製品とクラスで作業していることです。したがって、id
のクラスリストは、クエリ文字列では長すぎる可能性があります。
いつでも可能な限りRESTfulな原則に固執したいので、/products?classes=100,101,102
GET
と呼ばれるリソースは、フィルタリングされた商品コレクションを返します。
id
のリストをJSON形式で本文に含めることはできますが、GET /products
という呼び出しはリソースの状態(リソースはURL)の表現を返しません。フィルタオプションを提供するためにボディが使用されています。
フィルタリングされたコレクションをリクエストするには最適な方法はありますが、フィルタオプションが長すぎてクエリ文字列..を使用できません。
興味深い質問!しかし、GETリクエストはとにかにペイロードを保持することはできません... – sp00m
あなたはそれをPOSTにして、フィルタの条件をリクエスト本体に入れますが、リクエストヘッダX-HTTP-Method-Overrideを使ってGETのように扱いたいことを示します。私は様々な理由で許可されていないPUTまたはDELETEを回避する方法としてこれを見てきました。あなたがGETのためにこれを行うことができる合理的だと思われます。参照:http://www.hanselman.com/blog/HTTPPUTOrDELETENotAllowedUseXHTTPMethodOverrideForYourRESTServiceWithASPNETWebAPI.aspx –
@ sp00m実際に[GET](https://tools.ietf.org/html/rfc7231#section-4.3.1)リクエストはペイロードを保持できますしかし、セマンティクスは定義されていません。さらに、要求が古いHTTPサーバーによって拒否される可能性があるため、ペイロードを含めることは推奨されません。 –