24 مارس 2025·7 دقيقة قراءة

بوابة API أم BFF لعملاء الويب والموبايل: مزايا وتنازلات

بوابة API مقابل BFF: تعرّف كيف يؤثر كل نمط على الإصدار، الأداء، وفصل النهايات العامة والداخلية لتطبيقات الويب والموبايل.

بوابة API أم BFF لعملاء الويب والموبايل: مزايا وتنازلات

المشكلة: باك اند واحد، عملاء متعددون، واحتياجات متغيرة

نقطة البداية الشائعة بسيطة: باك اند واحد يعرض مجموعة من النهايات، ويستدعيها كل من تطبيق الويب والتطبيق المحمول. يبدو ذلك فعّالًا لأن هناك مكانًا واحدًا لإضافة ميزات، إصلاح الأخطاء، وتطبيق القواعد.

ثم تأتي الحقيقة. غالبًا ما يحتاج واجهة الويب لشاشات كثيفة، فلاتر، تصديرات، وإجراءات إدارة. أما الموبايل فيحتاج عادةً إلى حقول أقل، شاشات أسرع، تدفقات صديقة للعمل دون اتصال، وحساسية لاستهلاك البطارية والبيانات. حتى عندما تكون الميزة "نفسها"، شكل الـ API الأفضل لكل عميل نادرًا ما يكون متطابقًا.

مع مرور الوقت، تبدأ النهايات في الانحراف. تضيف فريق الويب حقولًا إضافية لعرض جدول جديد. يطلب الموبايل إزالة الحمولات الثقيلة ودمج عدة استدعاءات في واحدة. يضيف شخص ما معلمة "فقط لـ iOS". يعيد شخص آخر استخدام نهاية إدارية داخلية في التطبيق العام لأنها كانت "موجودة بالفعل". ما بدأ كـ API واحد نظيف يصبح مجموعة من التسويات.

المخاطر تظهر سريعًا:

  • تغييرات قد تكسر وظيفية عميلٍ عندما يشحن أحد العملاء أسرع من الآخر
  • بطء التطبيقات بسبب الحمولات الكبيرة أو كثرة الرحلات الشبكية
  • تعقيد أكبر في كود الباك اند لأن كل نهاية تحاول خدمَة كل عميل
  • تسريب بيانات عرضي عندما تتسرب حقول أو إجراءات داخلية إلى واجهات عامة
  • إصدار مؤلم لأن "التغييرات الصغيرة" ليست صغيرة للعملاء الأقدم

هذا هو التوتر الأساسي خلف مناقشة بوابة API مقابل BFF. تريد واجهات عامة ثابتة يمكن للويب والموبايل الاعتماد عليها، وفي نفس الوقت منح كل عميل مساحة للتطور بوتيرته الخاصة.

بوابة API وBFF: ما هما (وما ليسا)

بوابة API هي الباب الأمامي لواجهاتك. يتصل العملاء بالبوابة، وهي توجّه الطلبات إلى خدمة الباك إند المناسبة. غالبًا ما تتعامل مع اهتمامات مشتركة لا تريد تكرارها في كل مكان، مثل فحوص المصادقة، حدود المعدل، تسجيل الطلبات، وتشكيل الطلبات الأساسي.

الـ BFF (Backend-for-Frontend) هو باك اند صغير مبني لعميلٍ محدد أو مجموعة عملاء، مثل "الويب" و"الموبايل". يتصل العميل بـ BFF الخاص به، ويستدعي الـ BFF الخدمات الأساسية. الفكرة الأساسية هي التركيز: يُسمَح للـ BFF بأن يتحدث بلغة العميل (الشاشات، التدفقات، والأشكال)، حتى لو بقيت الخدمات الأساسية أكثر عمومية.

ما لا ينبغي أن تكون عليه هذه الأنماط: ليست بديلاً عن خدمات الدومين الجيدة أو نموذج بيانات نظيف. يجب أن تبقى الخدمات الأساسية، قواعد البيانات، وقواعد العمل مصدر الحقيقة. لا ينبغي أن تتحول البوابة أو الـ BFF إلى كتلة ضخمة من منطق العمل تتحول ببطء إلى الباك اند الحقيقي.

طريقة بسيطة لتمييزهما:

  • البوابة: مدخل واحد، اهتمامات مشتركة، توجيه وحماية
  • الـ BFF: واجهات مخصصة للعميل تقلل عمل العميل وتخفي التعقيد الداخلي

يمكنك أيضًا الجمع بينهما. إعداد شائع هو بوابة كحافة عامة، ثم BFFs منفصلة خلفها للويب والموبايل. تتعامل البوابة مع الأمان الخارجي وقواعد المرور، بينما يشكل كل BFF النهايات والاستجابات لعميله.

كيف يتغير مسار الطلب في كل نمط

أكبر فرق بين بوابة API وBFF هو أين تضع منطق "الباب الأمامي": التوجيه، فحوص المصادقة، وتشكيل الاستجابة.

مع بوابة API، يتكلم العميل عادةً إلى نقطة دخول مشتركة. تعيد البوابة توجيه الطلبات إلى الخدمات الداخلية، وتقوم غالبًا بمهام أساسية مثل التحقق من التوكن، حدود المعدل، والتوجيه حسب المسار.

مع الـ BFF، يتصل كل نوع عميل (ويب، iOS، Android) بباك اند مبني خصيصًا له. يستدعي ذلك الـ BFF الخدمات الداخلية ويعيد استجابة مصممة لتتناسب مع شاشات وقيود ذلك العميل.

طريقة بسيطة لتصوّر مسار الطلب:

  • مسار بوابة API: العميل -> البوابة -> الخدمة(الخدمات) -> الاستجابة
  • مسار BFF: العميل -> BFF (ويب أو موبايل) -> الخدمة(الخدمات) -> الاستجابة

غالبًا ما يتغير التملك أيضًا. عادةً ما تمتلك فريق البنية التحتية البوابة لأنها تؤثر على كل فريق وكل خدمة. أما فريق الميزة فعادةً ما يمتلك الـ BFF لأنه يتحرك مع الواجهة ودورة إصدارها.

المصادقة عادةً ما تتدفق هكذا: يرسل العميل توكنًا، تتحقق طبقة الحافة (البوابة أو الـ BFF) منه أو تُرسله إلى خدمة مصادقة، ثم تَمرّر تفاصيل الهوية (معرّف المستخدم، الأدوار) إلى الخدمات السفلى. الفرق هو أين تطبق قواعد العميل. مع البوابة، تكون السياسات عامة ومتسقة عبر العملاء. مع الـ BFF، يمكنك إضافة تشكيل خاص بالعميل، مثل إرجاع حمولة أصغر للموبايل أو دمج استدعاءات متعددة في استجابة واحدة على الشبكات البطيئة.

خطوة التشكيل هذه هي المكان الذي يتألق فيه الـ BFF، لكنها تعني أيضًا أجزاء أكثر للنشر والصيانة.

فصل النهايات العامة عن الداخلية بأمان

النهاية العامة هي أي مسار API يمكن لتطبيق الويب أو الموبايل أو الشركاء أو طرف ثالث الوصول إليه. عاملها كمضيف معاد افتراضيًا، لأنك لا تستطيع التحكم في الشبكة التي تسافر من خلالها أو في كود العميل الذي يستدعيها.

النهاية الداخلية مخصصة لحركة خدمة إلى خدمة داخل نظامك. يمكنها التغير أسرع، تفترض مزيدًا من السياق، وتعرض بيانات أغنى، لكن لا ينبغي مطلقًا أن تكون قابلة للوصول مباشرة من الإنترنت العام.

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

مع نمط BFF، يكون التقسيم أكثر عن حدود المنتج. يتحدث كل عميل (ويب، iOS، Android) إلى الـ BFF الخاص به فقط، ويتصل الـ BFF بالخدمات الداخلية. هذا يتيح إخفاء التعقيد الداخلي: يمكن للـ BFF استدعاء ثلاث خدمات، دمج النتائج، وإظهار استجابة بسيطة تناسب ما يحتاجه العميل بالفعل.

الفصل آمن فقط إذا أضفت ضوابط عملية:

  • تفويض محدد: أدوار ونطاقات لكل مسار، وليس مفتاح "مسجل دخول" واحد
  • حدود معدل لكل مستخدم، توكن، وعنوان IP للنهايات العامة
  • تصفية الحمولة: أعد فقط ما يحتاجه العميل، واحذف المعرفات الداخلية، معلومات التصحيح، وحقول الإدارة فقط للمسؤول
  • قوائم سماح واضحة: أي النهايات عامة، وأيها داخلية فقط

مثال: يحتاج تطبيق الموبايل شاشة "طلباتي". يمكن للـ BFF إظهار /orders بحالة الطلب والمجاميع فقط، بينما يحتفظ خدمة الطلب الداخلية بتفاصيل تكلفة كاملة وعلامات الاحتيال خاصة.

الإصدار: ما يصبح أسهل وما يصبح أصعب

حافظ على قواعد البوابة بسيطة
ضع قواعد العمل في عمليات مرئية، لا في إعدادات بوابة مبعثرة.
أضف منطق

ألم الإصدار يظهر عادةً عندما يتحرك الويب والموبايل بسرعات مختلفة. يمكن لفريق الويب أن يشحن ويتراجع خلال ساعات. قد يستغرق تطبيق الموبايل أيامًا أو أسابيع بسبب مراجعات المتجر ومستخدمين لا يقومون بالتحديث. هذه الفجوة هي حيث يصبح قرار بوابة API مقابل BFF عمليًا.

مع بوابة API، يمكنك وضع الإصدارات عند مدخل واحد (مثل /v1/..., /v2/...). هذا سهل الشرح والتوجيه. العيب أن البوابة قد تتحول إلى متحف إصدارات إذا التزمت بها عملاء وشركاء كثيرون بالإصدارات القديمة. ينتهي بك الأمر بدعم أشكال قديمة من نفس البيانات لفترة أطول.

مع الـ BFF، يكون الإصدار غالبًا "لكل عميل". يمكن لِـ BFF الموبايل البقاء على عقد أقدم بينما يتحرك BFF الويب أسرع، حتى لو كانا يتكلمان مع نفس الخدمات الداخلية. هذا يقلّل الضغط للحفاظ على الإصدارات العامة حية إلى الأبد. المكافأة هي المزيد من الأجزاء المتحركة: الآن لديك قرارات إصدار متعددة لإدارتها ونشرها.

الإصدار داخل الخدمات يمكن أن يعمل أيضًا، لكنه يدفع تغييرات يقودها العميل إلى عمق نظامك. وقد يجعل الكود الداخلي أصعب للقراءة لأن منطق الخدمة يبدأ في التفرع بناءً على إصدارات العميل.

التغييرات غير المعيبة هي صديقك: إضافة حقول اختيارية، إضافة نقاط نهاية جديدة، أو قبول حقول إدخال إضافية. التغييرات المعيبة تشمل إعادة تسمية حقل، تغيير نوع (سلسلة إلى رقم)، أو إزالة نقطة نهاية.

يعمل إيقاف الاستخدام الأفضل عندما يكون مخططًا له:

  • حدّد تاريخ إيقاف واضح وأعلنه مبكرًا
  • تتبع استخدام النسخة القديمة (سجلات، مقاييس) وراقب المتأخرين
  • طرَح تحديثات العميل أولًا (لاسيما الموبايل)، ثم أزل المسار القديم
  • أعد رسالة خطأ واضحة عندما تُغلق النسخة القديمة نهائيًا

الأداء: الكمون، حجم الحمولة، وعدد الاستدعاءات

الأداء في إعداد بوابة API مقابل BFF هو في الأساس مقايضة: قفزة إضافية داخل نظامك مقابل تقليل الرحلات البطيئة وغير الموثوقة من العميل. الخيار الأسرع غالبًا هو الذي يقلل وقت شبكة العميل البطيئة، حتى لو أضاف خطوة خفيفة على الخادم.

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

التحسينات الشائعة للأداء من بوابة أو BFF:

  • التجميع: دمج بيانات من خدمات متعددة في استجابة واحدة
  • التخزين الذكي: التخزين عند الحافة أو عند الـ BFF للشاشات ذات القراءة الكثيفة
  • حمولات أصغر: إرجاع الحقول التي يحتاجها الشاشة فقط
  • تقليل الرحلات: تقليل سلوك الدردشة الكثيف من العميل
  • ضغط وزمن انتهاء متسقان: فرض إعدادات افتراضية في مكان واحد

لكن النمط يمكن أن يضر أيضًا. كل طبقة مضافة تضيف عمل CPU ومزيدًا من أماكن الانتظار. إذا كررت منطق التجميع نفسه للويب والموبايل، قد تزداد الأعمال وتحدث سلوكًا غير متسق. الإفراط في الجلب أيضًا خسارة شائعة: نقطة نهاية عامة تحاول تلبية كل شاشة قد ترد حمولة كبيرة تهدر الوقت والنطاق الترددي.

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

قاعدة عملية: حسّن لعدد طلبات العميل الأقل أولًا، ثم حسّن القفزة الإضافية.

طريقة سريعة لحكم التصميم

إذا كانت الشاشة تحتاج أكثر من 2-3 استدعاءات متتالية، ففكّر بالتجميع. إذا كانت الاستجابات كبيرة وغالبًا غير مستخدمة، ففكّر بتقسيم النهايات أو استخدام BFF مخصص للعميل.

التشغيل: النشر، المراقبة، والمقياس

إنشئ باك اند أساسي ثابت
نمذج بياناتك في PostgreSQL وولّد باك اند بلغة Go يمكنك تطويره بأمان.
ابدأ البناء

مع بوابة API مقابل BFF، السؤال التشغيلي الكبير هو كم عدد الأجزاء المتحركة التي تقبل تشغيلها ودعمها. غالبًا ما تصبح البوابة بنية تحتية مشتركة للعديد من الفرق والعملاء. الـ BFFs عادةً خدمات أصغر، لكن قد ينتهي بك المطاف بواحد لكل عميل (ويب، iOS، Android، شريك)، مما يزيد عبء النشر والاستدعاء.

في الاختبار والإصدارات، قد تكون البوابة أكثر أمانًا عندما تحتاج أساسًا إلى التوجيه، المصادقة، وحدود المعدل. التغييرات مركزية، لذا خطأ واحد قد يؤثر على الجميع. تقلل الـ BFFs من نصف القطر لأن تغييرًا خاصًا بالويب يُشحن إلى BFF الويب فقط، وليس إلى الموبايل. المقايضة هي المزيد من خطوط النشر والصيغ قيد التشغيل.

للمراقبة، تحتاج إلى رؤية طلب مستخدم واحد عبر الطبقات، خصوصًا عندما يستدعي مكالمة موبايل عدة استدعاءات خلفية.

  • استخدم معرف ترابط ومرره عبر البوابة، الـ BFF، وسجلات الباك اند
  • احصل على تتبع لتعرف أين يُقضى الوقت (البوابة، الـ BFF، الخدمة الخلفية)
  • احتفظ بسجلات مُهيكلة (العميل، المسار، رمز الحالة، الكمون، حجم الحمولة)
  • تتبع بعض المقاييس الأساسية لكل مسار: معدل الأخطاء، الكمون p95، ومعدل الطلبات

المقياس يبدو مختلفًا أيضًا. البوابة نقطة اختناق مشتركة: يجب أن تتعامل مع الارتفاعات والطرق الساخنة دون أن تصبح عنق زجاجة. تسمح الـ BFFs بالتحجيم لكل عميل، مما يساعد عندما يقفز ترافيك الويب أثناء ساعات العمل بينما يظل الموبايل مستقرًا.

في الحوادث، قد تنتقل الفشل بحسب النمط. مع البوابة، تظهر المشاكل غالبًا على شكل 5xx واسعة أو فشل في المصادقة. مع الـ BFFs، قد تكون المشكلات معزولة لميزة عميل واحد. اجعل كتب التشغيل واضحة حول أين تنظر أولًا، واحتفظ بسلوك تراجع بسيط (مثلاً إرجاع استجابة مُقلّصة بدلًا من انتهاء المهلة).

كيف تختار: عملية قرار خطوة بخطوة بسيطة

صمم واجهات API لكل عميل
ابنِ باك اند نظيف مرة واحدة، ثم شكّل واجهات الـ API للويب والموبايل دون كتابة كل شيء يدوياً.
جرّب AppMaster

الاختيار بين بوابة API وBFF أقل نظرية وأكثر حول ما يحتاجه عملاؤك يوميًا.

تدفق قرار عملي

  1. ابدأ بعملائك، لا بخوادمك. اكتب كل عميل تدعمه (تطبيق الويب، iOS، Android، واجهة شركاء، إدارة داخلية) وسجل ما تحتاجه كل شاشة رئيسية. إذا كانت نفس مشاهدة "تفاصيل العميل" تحتاج حقولًا وأنماط استدعاء مختلفة عبر العملاء، فهذه إشارة قوية إلى تشكيل مخصص لكل عميل.

  2. خريطة ما لديك اليوم. خذ نقاط النهاية الحالية وعلّم ما هو مشترك (عمليات دومين أساسية مثل الطلبات، المدفوعات، المستخدمون) مقابل ما هو مكوَّن للعرض (ملخص لوحة، حمولة "الشاشة الرئيسية" المدمجة). القطع المشتركة تنتمي إلى الباك اند الأساسي. القطع المكوَّنة للعرض عادةً تناسب الـ BFF أفضل.

  3. قرر أين يجب أن يعيش التشكيل والقواعد. إذا كنت تحتاج أساسًا إلى التوجيه، المصادقة، حدود المعدل، التخزين المؤقت، والتعرّض الآمن للنهايات العامة مقابل الداخلية، فالبوابة هي المنزل الطبيعي. إذا كنت تحتاج تجميعًا حقيقيًا (استدعاء خدمات متعددة، تحويل ست استدعاءات إلى واحدة، حمولات مختلفة لكل تطبيق)، ضع ذلك في كود الـ BFF ليبقى قابلًا للاختبار والقراءة.

  4. اختر قاعدة إصدار وإيقاف يمكنك الالتزام بها. مثلاً: "لا تغييرات مِعيبة بدون إصدار جديد، وكل حقل مُهمل يبقى لمدة 90 يومًا." مع نهج البوابة فقط، قد تنتهي إلى إصدار السطح العام وترجمته خلفه. مع الـ BFFs، يمكنك غالبًا إبقاء واجهات النواة مستقرة وإصدار نقاط نهاية الـ BFF لكل عميل فقط.

  5. خطط للنشر والقياس. قبل تغيير أي شيء، التقط مقاييس الأساس: كمون p95، عدد الاستدعاءات لكل شاشة، أحجام الحمولات، ومعدلات الأخطاء. انشر لنسبة صغيرة أولًا، قارن قبل وبعد، ثم وسّع.

مثال بسيط: إذا كان تطبيق الموبايل يصدر شهريًا لكن بوابة الويب تُشحن يوميًا، يمكن لِـ BFF موبايل صغير أن يحمي التطبيق من تغييرات باك اند المتكررة بينما يستمر الويب في الحركة السريعة.

مثال: بوابة ويب + تطبيق موبايل بسرعات إصدار مختلفة

تخيل شركة لديها بوابة عملاء على الويب وتطبيق ميداني على الموبايل. كلاهما يحتاج نفس البيانات الأساسية: عملاء، مهام، فواتير، ورسائل. تتغير البوابة أسبوعيًا. يتحدّث تطبيق الموبايل أبطأ لأن مراجعة المتجر والتعامل مع الإشارة الضعيفة ضروريان.

الألم يظهر سريعًا. يريد مستخدمو الموبايل ردودًا مضغوطة، استدعاءات أقل، وتدفقات تدعم العمل دون اتصال (مثلاً تنزيل مهام اليوم مرة واحدة ثم المزامنة لاحقًا). البوابة على الويب بخير بإجراء المزيد من الاستدعاءات وتحميل شاشات أغنى لأنها دائمًا متصلة وأسهل في التحديث.

الخيار A: بوابة API أمام خدمات مستقرة

خيار البوابة أولاً يحافظ على خدمات الباك اند دون تغيير كبير. تتعامل البوابة مع المصادقة، التوجيه، وتعديلات بسيطة مثل الرؤوس، حدود المعدل، وتخطيط الحقول.

يبقى الإصدار غالبًا على مستوى خدمة API. هذا قد يكون جيدًا: أجزاء أقل متحركة. لكنه يعني أيضًا أن تغييرات خاصة بالموبايل قد تدفعك نحو إصدارات عريضة مثل /v2 لأن النقاط النهائية الأساسية مشتركة.

تعريض النهايات أوضح إذا اعتبرت البوابة المدخل العام الوحيد. تبقى الخدمات الداخلية خلفها، لكن عليك أن تكون صارمًا بشأن ما تصل إليه البوابة وما تنشره.

الخيار B: BFF مخصص للموبايل يتحدث "لغة الموبايل"

مع BFF الموبايل، يتحدث التطبيق للمسارات المصممة لشاشات الموبايل وتدفقات المزامنة. يمكن للـ BFF تجميع البيانات (تفاصيل المهمة + العميل + آخر رسالة)، تقليم الحقول، وإرجاع حمولة واحدة تتوافق مع احتياجات التطبيق.

ما الذي يتغير:

  • يصبح الإصدار أسهل لكل عميل: يمكنك إصدار BFF الموبايل دون إجبار بوابة الويب على الانتقال
  • يتحسّن الأداء للموبايل غالبًا: عدد استدعاءات أقل واستجابات أصغر
  • يصبح فصل العامّة عن الداخلي أكثر وضوحًا: الـ BFF عام، لكنه يستدعي خدمات داخلية لا حاجة لجعلها مكشوفة

أخطاء شائعة وفخاخ يجب تجنّبها

انشر بأمان عبر منصة واحدة
انشر إلى AppMaster Cloud أو إلى إعداداتك في AWS أو Azure أو Google Cloud.
انشر الآن

الفخ الأكبر في نقاش بوابة API مقابل BFF هو تحويل البوابة إلى باك اند صغير. البوابات جيدة في التوجيه، المصادقة، حدود المعدل، والتشكيل البسيط. عندما تحشُها بقواعد العمل، تحصل على منطق مخفي يصعب اختباره، صعب تصحيحه، وسهل الكسر أثناء تغيير إعداد.

يمكن أن يخطئ الـ BFFs في الاتجاه المعاكس: تَنشئ الفرق BFF لكل شاشة أو ميزة، ويتفجّر عبء الصيانة. عادةً ما يجب أن يُطابق الـ BFF نوع عميل (ويب، iOS، Android) أو مجال منتج واضح، لا كل عرض واجهة مستخدم. وإلا ستكرر نفس القواعد في عشرات الأماكن، ويصبح الإصدار وظيفة بدوام كامل.

أخطاء إصدار شائعة تنبع من التطرف. إذا أصدرت كل شيء من اليوم الأول، فستجمّد الـ API مبكرًا وتبقي المتغيرات القديمة حية إلى الأبد. إذا لم تصدر أبدًا، ستنتهي بإطلاق تغييرات مِعيبة دون قصد. قاعدة بسيطة تعمل جيدًا: لا تصدر للتغييرات الصغيرة المضافة، لكن اصدر عندما تزيل أو تغير المعنى.

التفريق بين العام والداخلي هو المكان الذي يتأذى فيه الفريق. كشف الخدمات الداخلية مباشرة إلى الإنترنت (حتى "مؤقتًا") يجعل كل تغيير داخلي حادثًا أمنيًا أو انقطاعًا محتملاً. حافظ على حد واضح: فقط البوابة أو الـ BFF يجب أن تكون عامة، وخدماتك الداخلية يجب أن تبقى خاصة.

مشاكل الأداء عادة ما تكون من فعل الفريق نفسه: حمولات ضخمة، عدد كبير من الرحلات، ولا ميزانية زمنية للكمون. مثال: قد يحتاج تطبيق الموبايل حالة الطلب والمجاميع فقط، لكنه يحصل على كائن الطلب الكامل مع كل بند وسجلات التدقيق، مما يجعل كل طلب بطيئًا على الشبكة الخلوية.

علامات تحذير للمراقبة:

  • إعدادات البوابة تشير لمفاهيم عمل مثل "أهلية الاسترداد" أو "قواعد VIP"
  • الـ BFFs تتكاثر أسرع من العملاء الذين تخدمهم
  • لا تستطيع شرح استراتيجية إصدار الـ API في جملة واحدة
  • نقاط النهاية الداخلية قابلة للوصول من الإنترنت العام
  • الاستجابات تنمو لأن "قد تكون مفيدة لاحقًا"

قائمة مرجعية سريعة وخطوات تالية

إذا كنت عالقًا في قرار بوابة API مقابل BFF، ركز على ما سيكسر أولًا في الواقع: الإصدارات، الحمولات، وحدود الأمان.

قائمة مرجعية سريعة

إذا أجبت بـ "لا" على عدة من هذه، فإن إعدادك الحالي سيؤذيك مع نمو العملاء:

  • هل يمكنك تغيير خدمة باك اند واحدة دون إجبار كل عميل على التحديث في نفس الأسبوع؟
  • هل هناك حد واضح بين النهايات العامة (آمنة للإنترنت) والداخلية (لأنظمة موثوقة فقط)؟
  • هل يتلقى الويب والموبايل فقط ما يحتاجانه (ليس استجابة "حوض مطبخ" ضخمًا)؟
  • هل يمكنك طرح تغييرات تدريجيًا (نسبة صغيرة أولًا) ورؤية الأخطاء والكمون وحركة المرور غير الاعتيادية بسرعة؟
  • هل تعرف من يملك عقد كل نهاية ومن يوافق على التغييرات المِعيبة؟

خطوات تالية

حوّل الإجابات إلى خطة. الهدف ليس معمارية مثالية، بل مفاجآت أقل عند الشحن.

اكتب عقد الـ API بلغة بسيطة (المدخلات، المخرجات، رموز الخطأ، وما يُسمح بتغييره). اختر نموذج ملكية: من يملك احتياجات العملاء (ويب/موبايل) ومن يملك خدمات الدومين الأساسية. قرر أين يعيش الإصدار (لكل عميل أم مركزيًا) وضع قاعدة إيقاف استخدام تلتزم بها.

أضف مراقبة أساسية قبل التحولات الكبيرة: معدل الطلب، الكمون p95، معدل الأخطاء، وأهم النهايات حسب حجم الحمولة. نفّذ نموذجًا أوليًا لتدفقات العملاء الأخطر أولًا.

إذا كنت تبني باستخدام AppMaster (appmaster.io)، فإن نهجًا عمليًا هو الاحتفاظ بمنطق العمل ونماذج البيانات الأساسية في الباك اند المولَّد، ثم إضافة طبقة بوابة أو BFF رقيقة فقط حيث يحتاج العميل حقًا إلى تشكيل الحمولة أو عزلة الإصدارات.

إذا وجدت أن الإجابات صعبة، اعتبر ذلك إشارة لتبسيط العقد وتشديد التقسيم بين العام والداخلي قبل إضافة المزيد من النهايات.

الأسئلة الشائعة

When should I use an API gateway instead of a BFF?

ابدأ ببوابة API عندما تحتاج في المقام الأول إلى مدخل عام واحد مع ضوابط مشتركة مثل فحوص المصادقة، حدود المعدل، والتوجيه. أضف BFF عندما يحتاج الويب والموبايل لحمولات مختلفة بوضوح، أو إلى تقليل عدد الطلبات من العميل، أو إلى دورات إصدار مستقلة.

What logic should live in the gateway vs in a BFF?

البوابة مناسبة للشواغل العابرة عبر النظام والتحكم في حركة المرور على الحافة، لذا اجعلها مركزة على التوجيه، تنفيذ المصادقة، والتعامل الأساسي مع الطلب/الاستجابة. يجب على الـ BFF القيام بتجميع موجه للعميل مثل دمج استجابات عدة خدمات وتقليل الحقول، لكنه لا ينبغي أن يتحول إلى موضع قواعد العمل الأساسية.

How does versioning differ between a gateway-only approach and a BFF approach?

توفر البوابة "مدخلاً" واحدًا مُصدّرًا بالإصدارات، سهل الشرح لكنه قد يجبرك على دعم نسخ قديمة لفترات طويلة. يسمح الـ BFF بالإصدار لكل عميلٍ على حدة، بحيث يبقى الموبايل ثابتًا بينما يتحرك الويب أسرع، لكن ذلك يعني إدارة خدمات وعقود أكثر.

What’s the safest rule for avoiding breaking changes for mobile and web?

فضّل التغييرات غير المعيبة بالأساس: إضافة حقول اختيارية أو نقاط نهاية جديدة. اصنع إصدارًا جديدًا عندما تزيل حقلاً، تعيد تسمية حقل، تغيّر نوعًا (مثل سلسلة إلى رقم)، أو تغير المعنى، لأن مستخدمي الموبايل قد لا يحدثون التطبيقات لأسابيع.

How do I safely separate public endpoints from internal endpoints?

احفظ الخدمات الداخلية خاصة وعرّض فقط البوابة أو الـ BFF إلى الإنترنت العام. صفِّ الاستجابات بحيث يتلقى العميل فقط ما يحتاجه، وطبق تفويضًا لكل مسار حتى لا يصبح إجراء إداري داخلي متاحًا لمجرّد أن المستخدم مسجَّل دخول.

Will adding a gateway or BFF make my app slower?

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

Which pattern is easier to operate and troubleshoot?

البوابة نقطة اختناق مشتركة، لذا أي خطأ في التكوين قد يؤثر على الجميع. تخفف الـ BFFs من نطاق التأثير بعزل التغييرات لعميل واحد، لكن ستدير المزيد من النشر والمراقبة ومسؤوليات الاستدعاء.

What monitoring should I add for a gateway/BFF setup?

استخدم معرف ترابط ومرره عبر البوابة/الـ BFF وكل الخدمات الخلفية حتى يُعقّب إجراء مستخدم واحد عبر النظام. تابع مجموعة صغيرة من المقاييس لكل مسار مثل معدل الأخطاء، الكمون عند p95، الحجم، ومعدل الطلبات حتى تظهر تدهورات الأداء بسرعة.

What are the most common mistakes with API gateways and BFFs?

فخ شائع هو تراكم قواعد العمل في البوابة، ما يجعل السلوك صعب الاختبار وسهل الكسر بتغيير إعداد. خطأ آخر هو إنشاء العديد من الـ BFFs (لكل شاشة)، ما يكرر المنطق ويجعل الصيانة والإصدار متعبة.

How can I apply this if I’m building with AppMaster?

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

من السهل أن تبدأ
أنشئ شيئًا رائعًا

تجربة مع AppMaster مع خطة مجانية.
عندما تكون جاهزًا ، يمكنك اختيار الاشتراك المناسب.

البدء