بوابة الواجهات البرمجية (API Gateway): كيف أنقذتنا من فوضى المصادقة والتوجيه في الخدمات المصغرة؟

يا جماعة الخير، السلام عليكم ورحمة الله وبركاته. معكم أخوكم أبو عمر.

بتذكر قبل كم سنة، كنا في شركة ناشئة، فريق صغير وقلوبنا مليانة حماس. قررنا نتبنى معمارية الخدمات المصغرة (Microservices) من البداية، قلنا “بدنا نكون مودرن ونواكب التطور”. كان عنا خدمة للمستخدمين (Users)، وخدمة للمنتجات (Products)، وخدمة للطلبات (Orders). كل خدمة شغالة لحالها، قاعدة بياناتها لحالها، وكل شي تمام التمام… أو هيك كنا مفكرين.

المصيبة بلشت تبين لما كبر المشروع شوي. فريق الواجهة الأمامية (Frontend) صاروا يلطموا! عشان يعرضوا صفحة طلب واحد، كانوا بحاجة يعملوا ثلاث طلبات: واحد لخدمة المستخدمين عشان يجيبوا تفاصيل العميل، وواحد لخدمة الطلبات نفسها، وواحد لخدمة المنتجات عشان يعرضوا تفاصيل المنتجات اللي بالطلب. وكل خدمة من هدول، إلها طريقة مصادقة (Authentication) شكل! هاي بدها Basic Auth، وهذيك بدها JWT token مولّد بطريقة معينة، والثالثة لسه على نظام قديم. صارت حوسة ما بعدها حوسة، والشباب بالفرونت إند كل يوم يتصلوا عليّ: “يا أبو عمر، مش عارفين من وين نبلش! أي توكن نبعث؟ ولأي سيرفر نحكي؟”.

الضربة القاضية كانت لما قررنا نضيف نظام صلاحيات (Permissions). صرنا بدنا نعدّل كود المصادقة في كل خدمة على حدة. وقتها حسيت إنه “وقعت الفاس بالراس”، وإنه لو ضلينا هيك، المشروع راح ينهار تحت وطأة التعقيد. وهون، بعد ليلة طويلة من البحث والتفكير، لاقيت المنقذ: الـ API Gateway.

ما هي بوابة الواجهات البرمجية (API Gateway)؟

ببساطة شديدة، تخيل عندك عمارة فيها شقق كثيرة (هي الخدمات المصغرة تبعتك). بدل ما كل زائر يروح يخبط على باب كل شقة ويسأل مين فيها وكيف يدخل، بنحط موظف استقبال (رجل أمن) على باب العمارة الرئيسي. هذا الموظف هو الـ API Gateway.

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

فالـ API Gateway هي طبقة وسيطة بتجلس بين العميل (تطبيق الويب أو الموبايل) وبين خدماتك المصغرة المتعددة. هي نقطة الدخول الوحيدة لنظامك بأكمله.

المشكلة قبل البوابة: جحيم الإدارة المشتتة

قبل ما نستخدم البوابة، كانت حياتنا عبارة عن مجموعة من المشاكل المتكررة اللي استنزفت وقتنا وجهدنا:

  • تكرار منطق المصادقة (Authentication Duplication): كل خدمة كانت مسؤولة عن التحقق من الـ JWT token وفك تشفيره والتأكد من صلاحيته. أي تحديث على آلية المصادقة كان يعني تعديل الكود في 3-4 أماكن مختلفة، وهذا كان باب كبير للأخطاء والنسيان.
  • فوضى التوجيه (Routing Chaos): العميل (الفرونت إند) كان لازم يعرف عنوان كل خدمة من خدماتنا. users.api.ourcompany.com، orders.api.ourcompany.com، وهكذا. هذا بيزيد التعقيد على العميل وبيكشف عن البنية التحتية الداخلية لشبكتنا.
  • صعوبة المراقبة والتحليل (Difficulty in Monitoring): إذا بدنا نعرف كم طلب إجا على النظام كله خلال آخر ساعة، كنا بدنا نجمع سجلات (logs) من كل الخدمات ونحللها، عملية معقدة وبطيئة.
  • الحماية والأمان (Security): كل خدماتنا كانت معرضة بشكل مباشر للإنترنت العام، وهذا بيزيد من مساحة الهجوم (Attack Surface) المحتملة.

الحل مع البوابة: كيف أنقذتنا الـ API Gateway؟

لما طبقنا الـ API Gateway (وقتها استخدمنا حل مفتوح المصدر اسمه Kong)، تغيرت الصورة 180 درجة. صارت البوابة هي اللي تتعامل مع كل هالصداع، والخدمات المصغرة صارت “مرتاحة” ومركزة على شغلها وبس.

1. مركزية المصادقة والتفويض (Centralized Authentication & Authorization)

هاي كانت أكبر فائدة بالنسبة إلنا. كل الطلبات بتيجي على البوابة أولاً. قمنا بتركيب “إضافة” (Plugin) على البوابة للتحقق من الـ JWT. البوابة بتتأكد من التوقيع، تاريخ الانتهاء، وكل شي. إذا الطلب سليم، البوابة بتضيف Header خاص للطلب (مثلاً X-Authenticated-User-ID: 123) وبتمرره للخدمة الداخلية.

الخدمات الداخلية (Users, Orders, etc.) بطلت تهتم بالـ JWT نهائياً. هي فقط بتثق بالطلبات اللي جاييتها من البوابة، وبتقرأ الـ Header اللي بقلها مين هو المستخدم. الكود داخل الخدمات صار أنظف وأبسط بكتير.

2. التوجيه الذكي والتجميع (Smart Routing & Aggregation)

الفرونت إند صار يتعامل مع عنوان واحد فقط: api.ourcompany.com.

في إعدادات البوابة، قمنا بتعريف قواعد التوجيه:

  • أي طلب بيبدأ بـ /users، وجهه إلى الخدمة الداخلية http://users-service:8080.
  • أي طلب بيبدأ بـ /orders، وجهه إلى الخدمة الداخلية http://orders-service:8081.
  • وهكذا…

العميل ما عاد بحاجة يعرف أي تفاصيل عن خدماتنا الداخلية. هذا المبدأ يسمى Reverse Proxy.

نصيحة أبو عمر: من الأنماط المتقدمة والقوية جداً هو “تجميع الطلبات” (Request Aggregation). أحياناً، بدل ما نخلي الفرونت إند يبعت 3 طلبات، ممكن نعمل endpoint واحد على البوابة اسمه مثلاً /v1/order-details/123. لما البوابة تستقبل طلب على هذا الـ endpoint، هي من ورا الكواليس بتبعت طلب لخدمة الطلبات، وطلب لخدمة المستخدمين، وطلب لخدمة المنتجات، وبتجمع النتائج كلها في رد واحد وبترجعه للعميل. هذا النمط اسمه Backend for Frontend (BFF) وبيريح فريق الواجهة الأمامية بشكل لا يصدق.

3. المراقبة، التسجيل، وتحديد المعدل (Monitoring, Logging & Rate Limiting)

بما أن كل الطلبات بتمر عبر نقطة واحدة، صار عنا مكان مركزي لكل شي:

  • التسجيل (Logging): فعلنا إضافة لتسجيل كل طلب ورد في مكان واحد. صار سهل جداً نتابع ونحلل المشاكل.
  • المراقبة (Monitoring): ربطنا البوابة مع نظام مراقبة (مثل Prometheus/Grafana) وصرنا نشوف “داشبورد” واحد فيه كل إحصائيات النظام: عدد الطلبات، معدل الأخطاء، سرعة الاستجابة.
  • تحديد المعدل (Rate Limiting): عشان نحمي خدماتنا من الاستخدام المفرط أو هجمات الحرمان من الخدمة (DoS)، طبقنا بسهولة قاعدة على البوابة: “كل مستخدم مسموح له يعمل 100 طلب في الدقيقة فقط”. كل هذا بدون ما نكتب سطر كود واحد داخل خدماتنا.

مثال بسيط لإعدادات التوجيه (YAML)

هذا مثال توضيحي جداً لكيف ممكن يبدو ملف إعدادات التوجيه في بوابة مثل Kong أو Traefik. لاحظ السهولة والوضوح:


# api-gateway-routes.yaml

# Route for the Users Service
- name: users-service-route
  paths:
    - /api/users
  # The gateway will forward requests to this internal service
  service_url: http://users-service-internal:8080
  # Apply the JWT authentication plugin to this route
  plugins:
    - name: jwt-auth

# Route for the Orders Service
- name: orders-service-route
  paths:
    - /api/orders
  service_url: http://orders-service-internal:8081
  plugins:
    - name: jwt-auth
    # Also apply a rate-limiting plugin
    - name: rate-limiting
      config:
        per_minute: 100

كما ترى، الإعدادات تصريحية (declarative) وسهلة القراءة. نحن “نعلن” عن القواعد، والبوابة تتكفل بالتنفيذ.

الخلاصة: الزبدة من كل هالحكي 😅

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

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

نصيحتي الأخيرة لك: إذا كنت تبدأ مشروع خدمات مصغرة، لا تنتظر حتى “توقع الفاس بالراس” مثلنا. ابدأ بالتفكير في الـ API Gateway من اليوم الأول. قد تبدو خطوة إضافية في البداية، لكنها ستوفر عليك شهوراً من الصداع والمعاناة في المستقبل. ابدأ بحل بسيط ومُدار (Cloud-managed) مثل AWS API Gateway أو Azure API Management، أو حل مفتوح المصدر مثل Kong أو Traefik إذا كنت تدير البنية التحتية بنفسك. صدقني، ستشكرني لاحقاً. 😉

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

برمجة وقواعد بيانات

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

4 يونيو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

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

4 يونيو، 2026 قراءة المزيد
الحوسبة السحابية

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

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

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

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

4 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

4 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كان كل خادم لدينا ‘ندفة ثلج’ فريدة: كيف أنقذنا ‘الكود كبنية تحتية’ (IaC) من جحيم الانجراف اليدوي؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة التقنية مع "خوادم ندفات الثلج" الفوضوية. سنغوص في مفهوم "الكود كبنية تحتية" (IaC) وكيف أن أدوات...

4 يونيو، 2026 قراءة المزيد
اختبارات الاداء والجودة

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

كنا نظن أن تغطية الاختبار بنسبة 100% هي درعنا الواقي، لكن الأخطاء كانت تتسلل إلى الإنتاج كاللصوص في ليل بهيم. اكتشف كيف أنقذنا "الاختبار الطفري"...

4 يونيو، 2026 قراءة المزيد
البودكاست