تخطَّ إلى المحتوى

واجهات البرمجة والتكامل

تكاملٌ مصمَّمٌ ليوم تفشل فيه الشبكة، لا ليوم ينجح فيه العرضُ التوضيحي وحسب.

ما هذه الخدمة

التكاملُ هو جعلُ أنظمةٍ منفصلة تتصرّف كنظامٍ واحد: بوّابةُ واجهات برمجة (API Gateway) تقدّم سطحًا متماسكًا، ووسيطُ رسائل (Message Broker) يفصل المنتِجين عن المستهلِكين، ومحوّلاتٌ تتحدّث بروتوكولَ كلّ نظام. نصمّم العقود، ونبني التدفّقات، ونزوّدها بأدوات القياس بحيث يصبح الفشلُ مرئيًّا وهو ما يزال صغيرًا.

نمطُ الإخفاق واحدٌ دائمًا، ويُكتشف دائمًا في الإنتاج. تكاملٌ مبنيٌّ على استدعاء HTTP مجرّد بلا مفتاحٍ للعملية المتكرّرة الآمنة (Idempotency)، وبلا سياسةِ إعادةِ محاولة، وبلا طابورٍ للرسائل الميتة، سيفقد الرسائلَ أوّلَ مرّةٍ تتعثّر فيها الشبكة، أو يكرّرها أوّلَ مرّةٍ يُعاد فيها استدعاءٌ انتهت مهلته. وكلا الأمرين صامت. تعرفون بهما من فارقٍ في المطابقة بعد أسابيع.

متى تحتاجها

إن صدق أكثرُ من واحدةٍ ممّا يلي، فهذه عادةً نقطةُ البداية الصحيحة.

  • نظامان يختلفان على السجلّ نفسه، ولا أحد يستطيع إعادةَ بناء أيُّ رسالةٍ طُبّقت ومتى.
  • ينكسر نقلُ ملفٍّ ليلي، وأوّلُ مؤشّرٍ على ذلك مستخدمُ أعمالٍ يسأل لماذا يوم أمس غائب.
  • كلُّ اتصالٍ خارجيٍّ جديد مشروعٌ مفصّل على المقاس، لأنّه لا توجد بوّابةٌ ولا عقدٌ ولا نمطٌ قابل لإعادة الاستخدام.
  • كسر تغييرٌ في نظامٍ مصدر ثلاثةَ مستهلكين دفعةً واحدة، لأنّ أحدًا لم يكن يعرف من يستدعي تلك النقطة.

ما الذي يشمله النطاق

  • تصميمُ الـ API بدءًا من العقد، موصَّفًا بـ OpenAPI أو AsyncAPI، مع سياسةِ إصداراتٍ وإيقافٍ يستطيع المستهلكون التخطيط على أساسها.
  • إعدادُ البوّابة: الاستيثاقُ والتخويلُ وتحديدُ المعدّل والحصصُ والتحقّقُ من الطلبات عند الحافة.
  • تصميمُ الأحداث والرسائل على وسيطٍ مثل Kafka أو RabbitMQ، مع النصّ صراحةً على ضمانات التسليم وافتراضاتِ الترتيب.
  • مفاتيحُ العملية المتكرّرة الآمنة، وإعادةُ المحاولة بتراجعٍ متزايد، ومعالجةُ الرسائل الميتة، وإجراءُ إعادةِ التشغيل، مصمَّمةً قبل بناء أوّل تدفّق.
  • التتبّعُ الموزّع، وتنبيهاتُ الأخطاء، وتحليلاتُ الاستهلاك لكلّ مستهلك، ليعلن التكاملُ المكسور عن نفسه.

ما الذي تستلمه

المُخرَجما يحتويه
مواصفاتُ الـ APIعقودُ OpenAPI أو AsyncAPI مُرقَّمة الإصدارات بأمثلةٍ عملية وسياسةِ إيقافٍ، منشورةً حيث يجدها مستهلكوكم وشركاؤكم فعلًا.
إعدادُ البوّابة والوسيطبنيةٌ تحتية ككود للبوّابة والوسيط والمحوّلات، مُطبَّقةً عبر خطّ التسليم لديكم لا بالنقر داخل لوحةِ تحكّم.
تدفّقاتُ التكاملالتكاملاتُ العاملة بمفاتيح العملية المتكرّرة الآمنة وسياسةِ إعادةِ المحاولة وطوابيرِ الرسائل الميتة وإجراءِ إعادةِ تشغيلٍ يستطيع المناوبُ اتّباعه.
حزمةُ المراقبةتتبّعٌ عبر حدود الخدمات، ولوحاتُ استهلاكٍ لكلّ مستهلك، وتنبيهاتٌ مربوطة بأنماط الفشل الممكنة فعلًا لكلّ تدفّق.

مخطّطٌ معماريٌّ مرجعيّ

مرجعٌ لا قالب. بيئتُك هي التي تقرّر أيَّ أجزائه ينطبق، وبأيّ ترتيبٍ يصل.

مخطّطٌ مرجعيٌّ لواجهات البرمجة والتكامل: طبقاتُ التكامل والمنصّة والرؤيةالتكامل: API Gateway, Message Broker, Connectors. المنصّة: Contract & Versioning, Transformation, Idempotency. الرؤية: Tracing, Retry & Error Handling, Usage AnalyticsالتكاملAPI GatewayMessage BrokerConnectorsالمنصّةContract & VersioningTransformationIdempotencyالرؤيةTracingRetry & Error HandlingUsage Analytics
مخطّطٌ مرجعيٌّ لواجهات البرمجة والتكامل: طبقاتُ التكامل والمنصّة والرؤية

كيف يُقاس النجاح

تُتَّفق المستهدفاتُ معك قبل بدء العمل، ويُرفَع التقريرُ عليها طوال مدّته.

  • أعدادُ الرسائل الناجحة والمعادة والميتة لكلّ تدفّق، مع إبقاء عمرِ أقدمِ رسالةٍ غير معالَجة ظاهرًا دائمًا.
  • زمنُ الاستجابة من طرفٍ إلى طرف عبر سلسلة القفزات كاملةً، متتبَّعًا لا مستنتَجًا من إبلاغ كلّ خدمةٍ عن توقيتاتها.
  • مخالفاتُ العقد ومعدّلاتُ الأخطاء لكلّ مستهلك، ليُحدَّد العميلُ المسيء بدل تحميل المنصّة المسؤولية.

أسئلةٌ تُطرح علينا

  • REST أم GraphQL أم gRPC أم الأحداث؟

    كلٌّ منها يجيب سؤالًا مختلفًا. REST للأسطح الواسعة القابلة للتخزين المؤقّت والموجّهة للأطراف الخارجيّة. وGraphQL حيث يحتاج العملاءُ تشكيلَ استعلاماتهم وتقبلون كلفةَ التخزين المؤقّت والتعقيد. وgRPC للاستدعاءات الداخلية الكثيفة بين الخدمات. والأحداثُ حيث لا ينبغي أن يعرف المنتِجُ من يستهلك. ومعظمُ البيئات الحقيقية تستخدم عدّةً منها، والخطأُ اختيارُ واحدٍ لكلّ شيء.

  • كيف تُصدرون نسخًا جديدة من الـ API دون كسر المستهلكين؟

    التغييراتُ الإضافية تدخل الإصدارَ الحالي؛ والتغييراتُ الكاسرة تأخذ إصدارًا جديدًا، ويعمل الاثنان معًا ريثما ينتقل المستهلكون. وهذا يستلزم معرفةَ من هم مستهلكوكم، ولذلك تهمّ تحليلاتُ الاستهلاك لكلّ مستهلك أكثر ممّا تبدو. وسياسةُ الإيقاف بتواريخ منشورة سلفًا هي ما يجعل الانتقال ممكنًا أصلًا.

  • هل نحتاج وسيطَ رسائل أم يكفي HTTP؟

    يكفي HTTP حين يستطيع المستدعي انتظارَ الجواب انتظارًا مفيدًا وإعادةَ المحاولة بأمان. ويستحقّ الوسيطُ كلفتَه التشغيلية حين يحتمل أن يكون المستهلك متوقّفًا، أو حين يجب امتصاصُ ذُرى الحمل، أو حين تحتاج عدّةُ أنظمة الحدثَ نفسه. وهو يضيف كذلك نظامًا عليكم تشغيله، وهذا جديرٌ بالقول صراحةً قبل ظهوره على المخطّط.

  • هل تضمنون التسليمَ مرّةً واحدة بالضبط؟

    لا يوجد في النظم الموزّعة تسليمٌ مرّةً واحدةً بالضبط. يوجد تسليمٌ مرّةً على الأقل، مع معالجةٍ متكرّرة آمنة، وينتج عنهما معًا أثرُ المرّة الواحدة. ولهذا يحمل كلُّ مستهلكٍ نبنيه مفتاحَ عمليةٍ متكرّرة آمنة واستراتيجيةً لإزالة التكرار. ومن يَعِد بالمرّة الواحدة على مستوى النقل فهو يصف شيئًا آخر.

  • هل يمكن تكاملُ أنظمةٍ قديمة بلا واجهة برمجة؟

    غالبًا نعم. الخياراتُ هي مناظرُ قاعدة بياناتٍ مع تتبّع التغيير، وتبادلُ ملفاتٍ بمجموع تحقّقٍ وبيانِ محتوى، وأتمتةُ الشاشات كملاذٍ أخير، وطبقةُ إحلالٍ تدريجي تضع عقدًا مستقرًّا أمام النظام القديم. ولكلٍّ خصائصُ فشلٍ مختلفة سنسمّيها لكم، لأنّ المحوّلَ الهشّ يحتاج مراقبةً مبنيّةً فيه من اليوم الأول.

  • كيف تؤمّنون سطحَ التكامل؟

    استيثاقٌ وتخويلٌ عند البوّابة بـ OAuth 2.0 أو TLS المتبادل، واعتماداتٌ وحدودُ معدّلٍ لكلّ مستهلك، وتحقّقٌ من الطلب مقابل المخطّط المنشور، وأسرارٌ محفوظة في مخزنٍ مُدار لا في ملفات الإعداد. أمّا ضوابطُ مستوى الحمولة، مثل تعمية الحقول والتوقيع وتقليل البيانات، فتُقرَّر بحسب ما يعبر الحدَّ فعلًا لا تُطبَّق تطبيقًا موحّدًا.

اقرأ أيضًا

  • منتجات SaaS

    هندسةُ منتجات SaaS متعدّدة المستأجرين، حيث تُحسم التعدّديةُ والقياسُ والاستحقاقاتُ والطرحُ المرحلي في التصميم قبل أوّل عميلٍ مؤسسي.

  • تطبيقات الويب

    تطبيقاتُ ويب تُبنى وفق ميزانيةٍ للأداء وإمكانية الوصول (Accessibility) منذ البداية: البنية، وطبقةُ الـ API، وخطُّ CI/CD، والمراقبة التي تملكونها.

ابدأ بتقييم

أسرعُ طريقٍ إلى جوابٍ مفيد نظرةٌ قصيرةٌ محدَّدةُ النطاق على ما لديكم أصلًا.