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

ينتج عن كل اتصال 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();