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 souhaitez minimiser la surcharge des requêtes HTTP.
  • Un utilisateur a modifié des données lorsque votre application était hors connexion. Celle-ci doit donc envoyer un certain nombre d'opérations de mise à jour et de suppression pour synchroniser ses données locales avec le serveur.

Remarque : Une même requête par lot peut contenir jusqu'à 1 000 appels. 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, instanciez un objet 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
L'erreur ou null si la requête a réussi.
index
Index de la requête individuelle.
message
Message HTTP complet incluant tous ses en-têtes et 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 groupées en une seule requête HTTP, et un rappel est fourni pour chaque requête 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();