כל חיבור HTTP שהאפליקציה יוצרת מגדיל במידה מסוימת את התקורה. הספרייה הזו תומכת בקיבוץ באצווה של קריאות כדי לאפשר לאפליקציה לבצע מספר קריאות ל-API בבקשת HTTP אחת. דוגמאות למצבים שבהם כדאי להשתמש בקיבוץ באצווה של קריאות:
- אתם צריכים לשלוח הרבה בקשות קטנות ואתם רוצים לצמצם את זמן הטיפול הנוסף של בקשות ה-HTTP.
- משתמש ביצע שינויים בנתונים בזמן שהאפליקציה לא הייתה מחוברת לאינטרנט, כך שהאפליקציה צריכה לסנכרן את הנתונים המקומיים שלה עם השרת על ידי שליחה של הרבה עדכונים ומחיקות.
הערה: הבקשה באצווה מוגבלת ל-1,000 קריאות. אם צריך לבצע יותר קריאות, תוכלו להשתמש במספר בקשות באצווה.
הערה: אי אפשר להשתמש באובייקט העלאת מדיה בבקשת אצווה.
פרטים
כדי ליצור בקשות באצווה,
BatchRequest
ואז קריאה ל-method Queue
עבור כל בקשה שרוצים לבצע.
בכל בקשה, מעבירים פונקציית קריאה חוזרת (callback) שתופעל כשהאפליקציה תקבל את התשובה לבקשה הזו.
הארגומנטים של פונקציית הקריאה החוזרת הם:
- תוכן
- תשובת התוכן, או
null
אם הבקשה נכשלה. - error
- השגיאה, או
null
אם הבקשה הצליחה. - index
- האינדקס של הבקשה הבודדת.
- הודעה
- הודעת ה-HTTP המלאה שכוללת את כל הכותרות והתוכן שלה.
ExecuteAsync
לביצוע הבקשות.
בקטע הקוד הבא, שתי בקשות API מקובצות בבקשת HTTP אחת, וכל בקשת 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();