Każde połączenie HTTP, które tworzy Twoja aplikacja, skutkuje określonym narzutem. Biblioteka ta obsługuje grupowanie, aby umożliwić aplikacji umieszczanie kilku wywołań interfejsu API w jednym żądaniu HTTP. Przykłady sytuacji, w których warto użyć grupowania:
- Masz do wykonania wiele małych żądań i chcesz zminimalizować narzut żądania HTTP.
- użytkownik wprowadził zmiany w danych, gdy aplikacja była offline; więc aplikacja musi zsynchronizować swoje dane lokalne z serwerem przez wysyłanie wielu aktualizacji i usunięć.
Uwaga: jedno żądanie zbiorcze może zawierać maksymalnie 1000 wywołań. Jeśli chcesz wykonać więcej połączeń, użyj wielu zbiorczych żądań.
Uwaga: nie możesz użyć atrybutu przesyłanie multimediów w żądaniu zbiorczym.
Szczegóły
Żądania zbiorcze tworzysz przez utworzenie instancji
BatchRequest
a następnie wywołanie metody Queue
w przypadku każdego żądania, które chcesz wykonać.
Z każdym żądaniem przekaż wywołanie zwrotne, które zostanie nawiązane, gdy aplikacja otrzyma
odpowiedź na to żądanie.
Argumenty funkcji wywołania zwrotnego to:
- treść
- Odpowiedź dotycząca treści lub
null
, jeśli żądanie nie zostało zrealizowane. - błąd
- Błąd lub wartość
null
, jeśli żądanie zostało wykonane. - indeks
- Indeks pojedynczego żądania.
- wiadomość
- Pełna wiadomość HTTP ze wszystkimi nagłówkami i treścią. .
ExecuteAsync
do wysyłania żądań.
W tym fragmencie kodu dwa żądania do interfejsu API są grupowane w jedno żądanie HTTP, a każde żądanie do interfejsu API otrzymuje 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();