質問
Web サービスでは、リモート呼び出しの数を減らすために、複数のサービス呼び出しを 1 つのメッセージにまとめることをお勧めします。RESTful サービスでこれを行う方法はありますか?
解決
REST でリクエストのバッチ処理がどのように意味があるのかわかりません。REST ベースのサービスの URL は、実行する操作とその操作を実行するデータを表すため、バッチ リクエストを作成すると概念モデルが大きく崩れてしまいます。
例外は、同じデータに対して同じ操作を複数回実行する場合です。この場合、リクエスト パラメータに複数の値を渡すか、この繰り返しを本文内でエンコードすることができます (ただし、これは実際に PUT または POST でのみ機能します)。Gliffy REST API は、次の方法で複数のユーザーを同じフォルダーに追加することをサポートしています。
POST /folders/ROOT/the/folder/name/users?userId=56&userId=87&userId=45
これは本質的に次のとおりです。
PUT /folders/ROOT/the/folder/name/users/56
PUT /folders/ROOT/the/folder/name/users/87
PUT /folders/ROOT/the/folder/name/users/45
他のコメント投稿者が指摘したように、GET からのページング結果はリクエスト パラメーターを介して実行できます。
GET /some/list/of/resources?startIndex=10&pageSize=50
もし REST サービスはそれをサポートします。
他のヒント
本当にバッチ処理が必要な場合、HTTP 1.1 は HTTP パイプラインと呼ばれる概念をサポートしており、応答を受信する前に複数の要求を送信できます。それをチェックしてください ここ
私もダレル・ミラーさんの意見に同意します。HTTP はすでに HTTP パイプラインをサポートしており、さらに HTTP はキープアライブをサポートしているため、複数の HTTP 操作を同じソケットに同時にストリーミングできるため、新しいリクエストをサーバーなどにストリーミングする前に応答を待つ必要がなくなります。
したがって、HTTP パイプラインとキープアライブを使用すると、同じ基礎となる REST API を使用しながらバッチ処理の効果が得られるため、通常はサービスに別の REST API を使用する必要はありません。
Astoria のチームは、マルチパート MIME を上手に利用して、一連の呼び出しを送信しました。マルチパートメッセージはアトミック操作の意図を推測できるため、パイプライン処理とは異なります。かなりエレガントに見えます。
もちろん方法はありますが、サーバー側のサポートが必要になります。私の知る限り、万能の魔法のような方法論はありません。