質問

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 を上手に利用して、一連の呼び出しを送信しました。マルチパートメッセージはアトミック操作の意図を推測できるため、パイプライン処理とは異なります。かなりエレガントに見えます。

もちろん方法はありますが、サーバー側のサポートが必要になります。私の知る限り、万能の魔法のような方法論はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top