发送批量请求

应用建立的每个 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();