Envoyer des requêtes groupées

Chaque connexion HTTP établie par votre application entraîne une certaine surcharge. Cette bibliothèque prend en charge les traitements par lot, pour permettre à votre application d'intégrer plusieurs appels d'API dans une seule requête HTTP. Voici quelques exemples de situations dans lesquelles l'utilisation de requêtes par lot peut s'avérer utile :

  • Vous avez de nombreuses petites requêtes à effectuer et vous souhaitez réduire la surcharge des requêtes HTTP.
  • Un utilisateur a modifié des données alors que votre application était hors connexion. Votre application doit donc synchroniser ses données locales avec le serveur en envoyant beaucoup de mises à jour et de suppressions.

Remarque: Vous êtes limité à 1 000 appels par requête par lot. Si vous devez effectuer plus d'appels, utilisez plusieurs requêtes par lot.

Remarque: Vous ne pouvez pas utiliser de mise en ligne de contenus multimédias dans une requête par lot.

Détails

Pour créer des requêtes par lot, vous devez instancier BatchRequest puis appelez la méthode Queue pour chaque requête que vous souhaitez exécuter. Avec chaque requête, transmettez un rappel à appeler lorsque votre application reçoit la réponse à cette requête. Les arguments de la fonction de rappel sont les suivants:

contenu
Réponse de contenu, ou null si la requête a échoué.
erreur
Erreur, ou null si la requête a abouti.
index
Index de la requête individuelle.
message
Message HTTP complet comprenant l'ensemble de ses en-têtes et de son contenu.
Une fois les requêtes ajoutées, appelez la méthode ExecuteAsync pour effectuer les requêtes.

Dans l'extrait de code suivant, deux requêtes API sont regroupées en une seule requête HTTP, et chaque requête API reçoit un rappel:

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