واجهات API المتزامنة مقابل غير المتزامنة
معظم واجهات API التي توفرها Chakra هي واجهات متزامنة (sync). وهذا يعني أنه بعد تلقي طلب API، تكتمل معالجة الطلب قبل إرجاع استجابة إلى العميل. ومن الأمثلة البسيطة على ذلك واجهة API لتحديث العملية.
لكن في بعض الحالات، لا يمكن إكمال المعالجة قبل إرسال استجابة API. وقد يرجع ذلك إلى أن الوقت اللازم للمعالجة أطول بكثير من وقت استجابة API المعتاد لدينا، أو إلى حاجة النظام إلى انتظار حدث لم يقع بعد.
في كلتا الحالتين، تقبل واجهات API غير المتزامنة هذه الطلب، وترسله إلى خدمة المهام الخلفية لدينا، ثم تعيد مرجعًا إلى المهمة نفسها. وفي هذه الحالات، يُتوقع من العميل التحقق لاحقًا من حالة المهمة التي تعمل في الخلفية.
واجهة API لتحديث العمليات على دفعات هي مثال على واجهة API غير متزامنة من هذا النوع.
خصائص API المتزامنة
ما لم يُذكر خلاف ذلك، فإن APIs الخاصة بـ Chakra متزامنة. تضمن APIs المتزامنة اتساق التنفيذ عند استدعائها بشكل متزامن. مثال:
09:00:00.000PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 1}09:00:01.000PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 2}09:00:02.000PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 3}في هذا المثال، نحدّث عملية معينة 3 مرات متتالية. في هذه الحالة، ستكون النتيجة النهائية للعميل المحتمل 3، وهذا هو المتوقع لأن 3 كانت آخر نتيجة تم تحديثها.
لكن إذا غيّرنا المثال وأرسلنا جميع التحديثات في الوقت نفسه تقريبًا، من دون انتظار اكتمال الطلبات السابقة:
09:00:00.000PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 1}09:00:00.001PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 2}09:00:00.002PUT /v1/ext/procedure/lead/process/lead_id/LEAD-001{"score": 3}قد تكون النتيجة النهائية للعميل المحتمل في هذه الحالة 1 أو 2 أو 3. لا توجد طريقة للتنبؤ بالنتيجة النهائية للعميل المحتمل بعد جميع التحديثات. وذلك لأن طلبات API الثلاثة ستُقبل بالتوازي، ما يؤدي إلى حالة تسابق.
لذلك، عند استخدام APIs متزامنة، يُوصى بأن يضمن العميل التزامن عند إرسال الطلبات إلى مورد واحد.
خصائص API غير المتزامنة
في حالة APIs غير المتزامنة، تتم معالجة حمولة الطلب في الخلفية بأسرع وقت ممكن. وتُرجع هذه APIs معرّف مهمة تعمل في الخلفية، يمكن استخدامه لتتبّع حالة الطلب.
APIs غير المتزامنة للمعالجة المجمّعة
تحاول APIs غير المتزامنة التي تقبل بيانات مجمّعة، أي عددًا كبيرًا من الطلبات الفرعية، تنفيذ أكبر عدد ممكن من هذه الطلبات بالتوازي. وتؤدي زيادة مستوى المعالجة المتوازية إلى زيادة سرعة المعالجة.
بسبب المعالجة المتوازية، لا تضمن APIs المعالجة المجمّعة ترتيب تنفيذ الطلبات الفرعية. لذلك، قد تؤدي إلى حالات تسابق إذا كان المورد نفسه (العملية/المهمة/السجل) جزءًا من عدة طلبات فرعية في API الطلب نفسه.
لذلك، خطّط لاستدعاءات API المجمّعة بحيث يكون المورد جزءًا من طلب فرعي واحد فقط.