Envía solicitudes por lotes

Cada conexión HTTP que realiza tu aplicación genera una cierta cantidad de sobrecarga. Esta biblioteca admite el procesamiento por lotes, para permitir que tu aplicación coloque varias llamadas a la API en una sola solicitud HTTP. A continuación, se detallan algunos ejemplos de situaciones en las que te sería útil usar el procesamiento por lotes:

  • Tienes que realizar muchas solicitudes pequeñas y te gustaría minimizar la sobrecarga de solicitudes HTTP.
  • Un usuario realizó cambios en los datos mientras tu app estaba sin conexión, por lo que esta necesita sincronizar sus datos locales con el servidor enviando muchas actualizaciones y eliminaciones.

Nota: Tienes un límite de 1,000 llamadas en una sola solicitud por lotes. Si necesitas realizar más llamadas, usa varias solicitudes por lotes.

Nota: No puedes usar un objeto de carga de contenido multimedia en una solicitud por lotes.

Detalles

Para crear solicitudes por lotes, debes crear una instancia de un objeto BatchRequest y, luego, llamar al método Queue para cada solicitud que desees ejecutar. Con cada solicitud, pasa una devolución de llamada para que se llame cuando tu aplicación reciba la respuesta a esa solicitud. Los argumentos de la función de devolución de llamada son los siguientes:

contenido
La respuesta de contenido o null si la solicitud falló.
error
El error o null si la solicitud se realizó correctamente.
index
Es el índice de la solicitud individual.
mensaje
Es el mensaje HTTP completo que incluye todos sus encabezados y contenido.
Después de agregar las solicitudes, llama al método ExecuteAsync para realizarlas.

En el siguiente fragmento de código, dos solicitudes a la API se agrupan en lotes en una sola solicitud HTTP y a cada solicitud a la API se le proporciona una devolución de llamada:

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();