Inviare richieste batch

Ogni connessione HTTP generata dall'applicazione comporta un certo overhead. Questa libreria supporta il raggruppamento, per consentire alla tua applicazione di inserire diverse chiamate API in una singola richiesta HTTP. Esempi di situazioni in cui può essere utile creare gruppi:

  • Devi effettuare molte richieste di piccole dimensioni e vorresti ridurre al minimo l'overhead delle richieste HTTP.
  • Un utente ha apportato modifiche ai dati mentre l'applicazione era offline, pertanto l'applicazione deve sincronizzare i propri dati locali con il server inviando molti aggiornamenti ed eliminazioni.

Nota: hai un limite di 1000 chiamate in una singola richiesta batch. Se devi effettuare un numero maggiore di chiamate, utilizza più richieste batch.

Nota: non puoi utilizzare un oggetto caricamento multimediale in una richiesta batch.

Dettagli

Puoi creare richieste batch creando l'istanza di un oggetto BatchRequest e quindi chiamando il metodo Queue per ogni richiesta da eseguire. Con ogni richiesta, trasmetti un callback da chiamare quando l'applicazione riceve la risposta a quella richiesta. Gli argomenti della funzione di callback sono:

contenuti
La risposta dei contenuti o null se la richiesta non è andata a buon fine.
errore
L'errore o null se la richiesta è andata a buon fine.
index
L'indice della singola richiesta.
messaggio
Il messaggio HTTP completo che include tutte le intestazioni e i contenuti.
Dopo aver aggiunto le richieste, puoi chiamare il metodo ExecuteAsync per effettuarle.

Nello snippet di codice riportato di seguito, due richieste API vengono raggruppate in un'unica richiesta HTTP e per ogni richiesta API viene fornito un callback:

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