Webサービスでは、リモート呼び出しの数を減らすために、複数のサービス呼び出しを1つのメッセージにまとめることをお勧めします。RESTfulサービスでこれを行う方法はありますか?
5 に答える
本当にバッチ処理が必要な場合、HTTP 1.1 は、応答を受信する前に複数の要求を送信できる HTTP パイプラインと呼ばれる概念をサポートしています。ここでチェックしてください
リクエストのバッチ処理が 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 はすでに HTTP パイプラインをサポートしており、さらに HTTP はキープアライブをサポートしており、複数の HTTP 操作を同じソケットで同時にストリーミングできるため、新しいリクエストをサーバーなどにストリーミングする前に応答を待つ必要がありません。
したがって、HTTP パイプラインとキープアライブを使用すると、同じ基になる REST API を使用しながらバッチ処理の効果が得られます。そのため、通常、サービスに別の REST API を使用する必要はありません。
Astoria のチームは、マルチパート MIME をうまく利用して、通話のバッチを送信しました。マルチパート メッセージはアトミック操作の意図を推測できるため、パイプライン処理とは異なります。かなりエレガントに見えます。
もちろん方法はありますが、サーバー側のサポートが必要になります。私が知っているすべての方法論に適合する魔法のワンサイズはありません。