Każde połączenie HTTP wykonywane przez aplikację wiąże się z określonym obciążeniem. Ta biblioteka obsługuje grupowanie, dzięki czemu aplikacja może umieścić kilka wywołań interfejsu API w jednym żądaniu HTTP. Przykłady sytuacji, w których warto użyć grupowania:
- Masz wiele małych żądań do wykonania i chcesz zminimalizować obciążenie związane z żądaniami HTTP.
- Użytkownik wprowadził zmiany w danych, gdy aplikacja była offline, więc musi ona zsynchronizować swoje dane lokalne z serwerem, wysyłając wiele aktualizacji i usunięć.
Uwaga: jedno żądanie zbiorcze może zawierać maksymalnie 1000 wywołań. Jeśli musisz wykonać więcej wywołań, użyj wielu żądań zbiorczych.
Uwaga: w żądaniu zbiorczym nie możesz użyć obiektu przesyłania multimediów.
Szczegóły
Żądania zbiorcze możesz tworzyć, tworząc instancję obiektu BatchRequest
, a następnie wywołując metodę Queue
w przypadku każdego żądania, które chcesz wykonać.
Z każdym żądaniem przekazuj wywołanie zwrotne, które zostanie wykonane, gdy aplikacja otrzyma na nie odpowiedź.
Argumenty funkcji wywołania zwrotnego:
- treść
- Odpowiedź dotycząca treści lub
null
, jeśli żądanie nie zostało przetworzone. - error
- Błąd lub
null
, jeśli żądanie zostało wykonane. - index
- Indeks pojedynczego żądania.
- wiadomość
- Pełna wiadomość HTTP zawierająca wszystkie nagłówki i treść.
ExecuteAsync
, by je wysłać.
W poniższym fragmencie kodu 2 żądania interfejsu API są grupowane w jedno żądanie HTTP, a każde żądanie do interfejsu API przesyła wywołanie zwrotne:
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();