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