بوابة API لخدمات PHP: دمج الميكروسيرفيس بسهولة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يحتاج مشروع PHP الخاص بك إلى بوابة API

\n\n

تخيل أنك تبني تطبيق ويب حديث. لديك خدمة مستخدمين على Laravel، وخدمة طلبات على Symfony، وخدمة دفع على PHP خالص، بالإضافة إلى تكاملات خارجية مع CRM وبوت تيليجرام. العملاء (تطبيق جوال، SPA على React، وموقع jQuery قديم) يتصلون بنقاط نهاية مختلفة، ويختلط عليهم الأمر في الرموز المميزة، وأنت تصلح مشاكل CORS كل أسبوع.

\n\n

هل يبدو هذا مألوفًا؟ إذا كان الأمر كذلك، فأنت بحاجة إلى API Gateway — نقطة دخول موحدة لجميع خدماتك. إنه ليس مجرد بروكسي، بل مدير حقيقي يتولى التوجيه، التوثيق، التخزين المؤقت، وتجميع البيانات.

\n\n

في هذه المقالة، سنشرح كيفية كتابة API Gateway بسيط لكن عملي بلغة PHP يمكن نشره على أي استضافة. لا سحر، فقط كود نقي وأفضل الممارسات لـ بنية الميكروسيرفيس في PHP.

\n\n

ما هو API Gateway ولماذا يحتاجه مطور PHP

\n\n

API Gateway (بوابة API) هو خادم يستقبل جميع الطلبات الواردة من العملاء ويعيد توجيهها إلى الميكروسيرفيس المناسبة. العميل لا يعرف شيئًا عن البنية الداخلية: فهو ببساطة يرسل طلبًا إلى /api/users، وتقرر البوابة بنفسها إلى أين ترسله.

\n\n

المهام الرئيسية للبوابة:

\n
    \n
  • التوجيه — إعادة توجيه الطلبات إلى خدمات مختلفة بناءً على URL أو الرؤوس.
  • \n
  • التوثيق والتفويض — التحقق من رموز JWT، مفاتيح API، وتقييد الوصول.
  • \n
  • التجميع — دمج البيانات من عدة خدمات في رد واحد (مثل: ملف المستخدم + آخر طلباته).
  • \n
  • التخزين المؤقت — تقليل الحمل على الخلفية باستخدام ذاكرة تخزين مؤقت للبيانات المطلوبة بشكل متكرر.
  • \n
  • تحديد المعدل — الحماية من هجمات DDoS وزيادة التحميل على الخدمات.
  • \n
  • تحويل الردود — توحيد تنسيق البيانات لعملاء مختلفين.
  • \n
\n\n

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

\n\n

تصميم API Gateway بسيط بلغة PHP

\n\n

سنكتب بوابة باستخدام PHP خالص بدون أطر عمل، حتى تفهم الجوهر. لكن يمكنك بسهولة تكييف الكود مع Laravel أو Symfony أو Slim.

\n\n

بوابتنا ستقوم بـ:

\n
    \n
  • استقبال الطلبات على /api/users/* وإعادة توجيهها إلى خدمة Users (المنفذ 8081)
  • \n
  • استقبال الطلبات على /api/orders/* وإعادة توجيهها إلى خدمة Orders (المنفذ 8082)
  • \n
  • التحقق من رمز JWT قبل تمرير الطلب
  • \n
  • تخزين طلبات GET مؤقتًا لمدة 60 ثانية
  • \n
  • تجميع البيانات: /api/profile سيجمع المعلومات من Users وOrders
  • \n
\n\n

الخطوة 1: تكوين المسارات

\n\n

لننشئ ملف config.php، حيث نصف أي URL يؤدي إلى أين:

\n\n
<?php\n// config.php\nreturn [\n    'routes' => [\n        '/api/users' => [\n            'target' => 'http://127.0.0.1:8081',\n            'auth' => true,        // يتطلب JWT\n            'cache' => false       // لا تخزين (بيانات شخصية)\n        ],\n        '/api/orders' => [\n            'target' => 'http://127.0.0.1:8082',\n            'auth' => true,\n            'cache' => 60          // تخزين لمدة 60 ثانية\n        ],\n        '/api/public' => [\n            'target' => 'http://127.0.0.1:8083',\n            'auth' => false,\n            'cache' => 120\n        ],\n        '/api/profile' => [        // نقطة نهاية مجمعة\n            'aggregate' => true,\n            'auth' => true,\n            'services' => [\n                'user' => 'http://127.0.0.1:8081/api/user',\n                'orders' => 'http://127.0.0.1:8082/api/order'                

المدونات

توصيات الكتب