26

REST API を実装したいのですが、GET 要求に本文が必要です。(ここで説明したように: HTTP GET with request body )

GET リクエストでボディを送信できない HTTP クライアントはありますか? メッセージ ボックスは赤ですが、Fiddler はそれを実行できます。

4

2 に答える 2

33

原則として、REST での GET の考え方は、すべてのパラメーターが URL で送信されるということです。あなたが含めた質問に対する答えが示すように、それは実行可能ですが、REST の要点を逃しています。つまり、一貫した webbish インターフェイスを持つことです。複雑なデータをエンドポイントに渡したい場合は、おそらく POST を使用することをお勧めします。これは、ユーザーがボディを持つことを期待するためです。その実装を再検討することを強くお勧めします。

しかし、あなたの実際の質問には、GET で本文を送信できないクライアントがあることを確認してください。ほとんどの場合、クライアントはPythonのurlib2などのプログラムであると思います.GETで本体を設定できますが、実際にはモジュールの意図された使用法ではないため、プログラマーに奇妙なことを強いています. さらに重要なことは、REST API の考え方はクライアントにとらわれないことです。そのため、ここで API の設計をやり直す必要があるように思えます。

于 2012-06-18T21:24:00.540 に答える
10

GET HTTP リクエストで body を使用することはお勧めできません。はい、「デジュール」の HTTP GET はボディを持つことができるようですが、「デファクト」には問題があります。

  1. クライアント フレームワーク/ライブラリを使用。それのサポートを見つけるのは難しいでしょう。
  2. サーバーはGETリクエストの本文を無視できます。とにかく、それは標準的な方法ではなく、サーバーまたはその構成に問題がある可能性があります。
  3. 特にサーバー側のコードは、他の人にとって不明確になります。ボディでの GET を期待する人はいないからです。

あなたは難しい方法を探していますか?body で GET を使用すると、非常に多くの落とし穴があります。他の HTTP 動詞を使用しないのはなぜですか?

たとえば、以下よりも POST (または他の動詞) を使用します。

  1. クライアント ライブラリを用意しておくのは簡単です。
  2. サーバーまたはサーバー構成に問題がないこと、
  3. それは他の人には明らかです

より難しい方法を探す必要はありません:)

于 2012-06-18T21:42:12.073 に答える