アプリケーションが実行する各 HTTP 接続には、ある程度のオーバーヘッドが発生します。このライブラリはバッチ処理をサポートしているため、アプリは複数の API 呼び出しを 1 つの HTTP リクエストにまとめることができます。バッチ処理を使用する状況の例:
- 多数の小さなリクエストを行い、HTTP リクエストのオーバーヘッドを最小限に抑えたいと考えています。
- アプリケーションがオフラインのときにユーザーがデータを変更した。 アプリケーションがローカルデータをサーバーと同期する必要がある 多数の更新と削除が送信されます
注: 1 つのバッチ リクエストに含めることができる呼び出しは 1,000 個までです。 これよりも多くの呼び出しを行う必要がある場合は、複数のバッチ リクエストを使用します。
注: メディア アップロード オブジェクトを宣言します。
詳細
バッチ リクエストを作成するには、Terraform で
BatchRequest
実行するリクエストごとに Queue
メソッドを呼び出します。
リクエストごとに、アプリケーションがそのリクエストのレスポンスを受信したときに呼び出されるコールバックを渡します。このコールバック関数の引数は次のとおりです。
- コンテンツ
- コンテンツ レスポンス。リクエストが失敗した場合は
null
。 - エラー
- エラー、またはリクエストが成功した場合は
null
。 - index
- 個々のリクエストのインデックス。
- メッセージ
- すべてのヘッダーとコンテンツを含む完全な HTTP メッセージ。
ExecuteAsync
メソッドを使用してリクエストを行います。
次のコード スニペットでは、 2 つの API リクエストが 1 つの HTTP リクエストにバッチ処理されます。 各 API リクエストにはコールバックが渡されます。
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { CalendarService.Scope.Calendar },
"user", CancellationToken.None, new FileDataStore("Calendar.Sample.Store"));
}
// Create the service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Google Calendar API Sample",
});
// Create a batch request.
var request = new BatchRequest(service);
request.Queue<CalendarList>(service.CalendarList.List(),
(content, error, i, message) =>
{
// Put your callback code here.
});
request.Queue<Event>(service.Events.Insert(
new Event
{
Summary = "Learn how to execute a batch request",
Start = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 10, 0, 0) },
End = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 12, 0, 0) }
}, "YOUR_CALENDAR_ID_HERE"),
(content, error, i, message) =>
{
// Put your callback code here.
});
// You can add more Queue calls here.
// Execute the batch request, which includes the 2 requests above.
await request.ExecuteAsync();