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

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

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

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

ملاحظة: لا يمكنك استخدام تحميل وسائط في طلب مجمّع.

التفاصيل

يمكنك إنشاء طلبات مجمّعة من خلال إنشاء مثيل 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();