2016-09-23 7 views
1

オブジェクトのリストを提供するエンドポイントを作成する必要があります。取得したいオブジェクトのIDのリクエストボディリストとして渡す必要があります。これまではオブジェクトを取得して変更するのではなく、クライアント側からRestTemplateを使用して呼び出す場合は、GETにbodyを渡すメソッドはありません。しかしながら、これはPOST方法で達成可能である。 GETの代わりにPOSTを使用するか、別の解決方法がありますか?bodyまたはPOSTメソッドとしてのパラメータのリストを持つGETメソッド?

はEDIT:意味的に、より正確である

HTTP GET with request body

答えて

3

あなたはGETに固執する場合は、あなたにIDのリストを渡す必要があります:simmilar問題で皆のために、このスレッドは、多くのことができますGETは本文を定義していないため、本文ではなくパラメータを要求します。

POSTを使用すると、本体にリストを渡すことができますが、一部のスティラーは意味的に正しいとは言いませんが、一般的には問題ありません。

クエリデータの複雑さや長さによっては、POSTが優先されることがあります。

+0

IDの複雑さのためにURIの一部としてIDを使用するクエリデータが –

1

RFC 7231

GETリクエストメッセージ内のペイロード全く定義された意味を有していません。ペイロード本体をGETリクエストで送信すると、既存の実装によってはリクエストを拒否することがあります。

これはオプションとしてGETを排除します。 HTTPは単にあなたがしたいことをサポートしていません。

私は取得したいオブジェクトのIDの要求ボディリストとして渡す必要があります。

GraphQLはWeb APIのクエリ言語としていくつかの牽引力を得ています。それは同じ種類の問題です。複雑なクエリたとえば、GithubはgraphQLエンドポイントを実装しています。supports the POST method.

これは、RESTよりもRPCが多いapiを生成します。だからそうなるのです。

これは、問題に当てはまるように、パターンとしてのPOST経由のクエリはパターンとして存在するということです。

他に解決策がありますか?

あなたをより良い

どのようにWebページのロード複数の画像を果たすかもしれないいくつかの代替の設計がありますか?一つずつ。このアプローチの利点はキャッシングです。ウェブページはこれまで見た画像の表現を再利用することができます。これにより、RESTのアーキテクチャ上の制約によって保証されているスケーリングの一部が得られます。

これを、リスト内のアイテムを変更するたびに、または個々のアイテムがその表示を変更するたびに、表示が必然的に変更されるオブジェクトのリストの表示を要求することと比較してください。

ids自体をURIの一部として使用することができます。つまり、必要なものがオブジェクトのリストである場合、おそらくオブジェクトのリストは独自の概念(リソース)です識別子。

このアプローチは、2つの方法のいずれかで現れる可能性があります。 idsのリストを明示的に保つ(概念自体を暗黙的にする)、言い換えれば、URIそのものにIDを列挙することによって、可能性があります。

また、設計で概念を明示的にすることもできます。クライアントがその特定のIDの組み合わせを求めている理由を理解し、その概念を表すリソースを作成します。たとえば、クライアントが共通のプロパティ(開いているすべてのチケット)を持つためにIDを選択する場合、概念はそのプロパティのコレクションフィルタリングであるため、オープンチケットリソースを作成します。

同様に、クライアントが結果をページングしているためにIDのリストが表示される場合は、ページングを明示的にすることができます(この方法はフィードと共通です。AtomSyndicationを参照)。

間違った問題があるため、要するにRESTの回答がうまく見つからない可能性があります。

+0

の場合は、クエリのデータが複雑で、長くて、** **敏感であることに応じて、時には「POST」が好ましいことに注意してください。いくつかのケースでは4.000文字以上のlegthのURIで、私は完璧な解決策ではないと信じています。 2番目のapprochは非常にintresting、そのほぼ正確にこの場合、唯一の違いは、私はチケットのいくつかのプールからのオープンチケットを取得したいと思うだろう(このような長いURIを処理すると、Webブラウザのいくつかの問題を引き起こす可能性があります - 1000)と私はプール1,5,71,189などからオープンチケットを欲しいですどのようなアプローチは、そのような場合には完璧だろうか? –

+0

クライアントが1,6,71,189ではなく1,5,71,189を選択しているとはどういう意味ですか?どの暗黙のアイデアがそこに隠れているのですか?そのアイデアを明示的に問題解決に役立てていますか? – VoiceOfUnreason

関連する問題