发送批量请求

应用建立的每个 HTTP 连接都会产生一定的开销。 此库支持批处理 以允许您的应用将多个 API 调用组合为一个 HTTP 请求。 在以下示例情况下,您可能需要使用批处理:

  • 您要发出很多小请求,并且希望尽可能缩减 HTTP 请求开销。
  • 用户在您的应用处于离线状态时对数据进行了更改, 因此您的应用需要将其本地数据与服务器同步 发送大量更新和删除信息。

注意:单个批量请求最多只能调用 1,000 次调用。 如果您需要的调用次数超过此值,请使用多个批量请求。

注意:您无法在批量请求中使用媒体上传对象。

详细信息

您可以通过实例化 BatchRequest 对象,然后针对您要执行的每个请求调用 Queue 方法来创建批量请求。 对于每个请求,请传入一个回调,以便在应用收到相应请求的响应时调用该回调。 回调函数的参数如下:

内容
内容响应;如果请求失败,则为 null
错误
错误,如果请求成功,则为 null
索引
单个请求的索引。
消息
包含所有标头和内容的完整 HTTP 消息。
添加请求后,您可以调用 ExecuteAsync 方法来发出请求。

在以下代码段中, 将两个 API 请求批量处理为一个 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();