إرسال طلبات مجمّعة

كل اتصال HTTP ينتج عنه تطبيقك نتائج في مقدار معين من النفقات العامة. تتيح هذه المكتبة استخدام التجميع للسماح لتطبيقك بإضافة عدة طلبات من واجهة برمجة التطبيقات في طلب HTTP واحد. أمثلة على الحالات التي قد تريد فيها استخدام التجميع:

  • لديك العديد من الطلبات الصغيرة التي تحتاج إلى إجرائها وترغب في تقليل أعباء طلبات HTTP.
  • أجرى أحد المستخدمين تغييرات على البيانات عندما كان تطبيقك غير متصل بالإنترنت، لذا يحتاج التطبيق إلى مزامنة بياناته المحلية مع الخادم عن طريق إرسال العديد من التحديثات وعمليات الحذف.

ملاحظة: يمكنك إجراء 1,000 مكالمة كحد أقصى في كل طلب مجمّع. إذا كنت بحاجة إلى إجراء استدعاءات أكثر من ذلك، استخدم طلبات مجمَّعة متعددة.

ملاحظة: لا يمكنك استخدام عنصر media upload في طلب مجمّع.

التفاصيل

يمكنك إنشاء طلبات مجمَّعة من خلال إنشاء مثيل BatchRequest ثم استدعاء الإجراء Queue لكل طلب تريد تنفيذه. مع كل طلب، أدخِل معاودة الاتصال ليتم الاتصال بها عندما يتلقّى تطبيقك الردّ على هذا الطلب. وسيطات دالة رد الاتصال هي:

للربح
الردّ على المحتوى، أو null إذا تعذّر إكمال الطلب
خطأ
خطأ، أو null إذا نجح الطلب.
المؤشر
فهرس الطلب الفردي
رسالة
رسالة HTTP الكاملة التي تتضمّن جميع عناوينها ومحتواها
بعد إضافة الطلبات، تستدعي طريقة ExecuteAsync لتقديم الطلبات.

وفي مقتطف الرمز التالي، يتم تجميع طلبَين من واجهة برمجة التطبيقات في طلب HTTP واحد، ويتم تقديم استدعاء لكل طلب من طلبات البيانات من واجهة برمجة التطبيقات:

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