Каждое HTTP-соединение, которое создает ваше приложение, приводит к определенному количеству накладных расходов. Эта библиотека поддерживает пакетную обработку, что позволяет вашему приложению помещать несколько вызовов API в один HTTP-запрос. Примеры ситуаций, когда вы можете использовать пакетную обработку:
- Вам нужно сделать много небольших запросов, и вы хотите минимизировать накладные расходы на HTTP-запросы.
- Пользователь внес изменения в данные, пока ваше приложение было в автономном режиме, поэтому вашему приложению необходимо синхронизировать свои локальные данные с сервером, отправляя множество обновлений и удалений.
Примечание . Вы ограничены 1000 вызовами в одном пакетном запросе. Если вам нужно сделать больше вызовов, используйте несколько пакетных запросов.
Примечание . Вы не можете использовать объект загрузки мультимедиа в пакетном запросе.
Подробности
Пакетные запросы создаются путем создания экземпляра объекта 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();