2011-01-12 12 views
3

私はサーバ/登録された連絡先のルートを持っています。これはparamsに長いID配列を持ち、そのIDのどれがデータベースに登録されているか検索して返しますそのサブセット。多くのパラメータが必要な情報の取得

これはどのHTTPメソッドですか?

それは、現在、私はそれが何かをGET'ingだ考え出したので、GETリクエストのですが、その後、私はまたのようなエンドポイントに要求を行って終わるidの長い列、と少し不安だ:

www.server.com/registered_contacts?ids[2]=bob&ids[54]=jon&ids[23]=jack...etc. etc. 

私は実際には/ registered/contacts/42のようなリモートのものを手に入れているわけではないと主張することもできますが、それは私が更新も削除も作成もしていないリソースだと主張することもできます。取得?

+0

ところで、あなたが考えていることの1つは、このように物事をデザインする理由です。あなたは選択肢がないかもしれませんが、上記で説明していることは、通常は良い考えではなく、通常は大きな値のために拡大縮小しないWeb-ifiedの "IN" WHERE節をサポートするのと同じです。単一のラベル/用語でそのコレクションを参照する良い方法があれば、それは価値があるかもしれません(これは本質的に以下に示すPOST-a-filterのアプローチです)。 – kvista

+0

ええ、あなたは私のジレンマで爪を打った。私はおそらく今のところ(現在は数百もの価値があります)、その後必要に応じてWillの提案を採用してフィルタリソース – ambertch

答えて

2

いいえ、GET(私もパケットサイズより大きくなっヘッダがある持っている一つの心配は、わからないことが問題となる場合)右の方法です。基本的に長い基準のリストに基づいて検索結果を生成しています。あなたのメソッドは(意味的に)冪等級なので、なぜそれがPOSTに適していないのですか。

4

あなたが存在するGETコマンドの長さ制限を実行しないとすれば、問題ありません。

もう1つの仕組みは、条件を満たすために、それを "フィルタ"リソースにPOSTし、その結果のURIを取得し、そのURIをGETの引数として使用することです。

Create the filter: 
POST /filter 

ids[2]=bob...... 

Result: 
HTTP/1.1 301 Moved Permanently 
Location: /filter/1234 

Use the filter: 
GET /registerd_contacts?filter=http://example.com/filter/1234 

あなたのフィルタは、あなたが好きなら、あなたはCRUDすることができ、または、彼らは一日に「消える」、または何でもしたいことができますファーストクラスのリソースです。

+0

に投稿していきます。 – ambertch

関連する問題