Envoyer des requêtes groupées

Chaque connexion HTTP établie par votre application entraîne une certaine quantité de frais généraux. Cette bibliothèque accepte les requêtes par lot, ce qui permet à 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 beaucoup de petites requêtes à effectuer et vous souhaitez réduire au maximum la surcharge des requêtes HTTP.
  • Un utilisateur a modifié des données lorsque votre application était hors connexion. Celle-ci doit donc synchroniser ses données locales avec le serveur en envoyant un grand nombre de mises à jour et de suppressions.

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

Remarque: Vous ne pouvez pas utiliser d'objet d'importation multimédia dans une requête par lot.

Détails

Pour créer des requêtes par lot, vous devez instancier un objet BatchRequest, puis appeler la méthode Queue pour chaque requête à 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 du contenu, ou null si la requête a échoué.
error
Erreur, ou null si la requête a abouti.
index
Index de la requête individuelle.
message
Message HTTP complet incluant tous ses en-têtes et son contenu.
Après avoir ajouté les requêtes, appelez la méthode ExecuteAsync pour les effectuer.

Dans l'extrait de code suivant, deux requêtes API sont regroupées dans 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();