في ظل وجود الـ Monolithic Applications ، الـ Client هنا مش بيتعب في انه يتواصل مع الـ Backend وده لإنه بيكلم Service واحدة في الأول والآخر ومش محتاج يشغل باله من أي مشاكل.
ولكن مع التقدم اللي حصل وبعد هوجة و Trend الـ Microservices بيبدأ الـ Monolithic Application ده يتكسر لـ Services صغيرة كل واحدة محدودة بالـ Boundaries بتاعتها.
وبيجي هنا السؤال اللي بيحير الناس ، يا ترى هنعمل ايه في الـ Client ؟ احنا كنا بنبعت Request لمكان واحد دلوقتي محتاجين نبعت Requests مختلفة لكل الـ Services دي. طب ازاي هنـ Manage التغيير اللي ممكن يحصل لو Endpoint اتغيرت ؟ وهل مفروض الـ Client يكون Coupled بالشكل العنيف ده مع كل Service في الـ Backend لما تتغير؟
وهنا بدأنا نفكر في اننا ليه مايكونش عندنا نقطة دخول واحدة بتتحكم في طلبات المستخدمين وبتوجهها للخدمات المناسبة جوا النظام ؟ وبالتالي اقدر اغير براحتي اي حاجة في الـ Backend طالما الـ Contract أو الـ Interface اللي بيستعمله الـ Client واحد.
ومنا هنا جت فكرة الـ API Gateway ، فخلونا نشوف مع بعض ايه هو والمميزات اللي بيقدمهالنا بالورقة والقلم 🚀
API Gateway
الـ API Gateway هو نقطة دخول واحدة (single entry point) لكل الـ (requests) اللي جايه من الـ clients للـ backend. فبدل ما الـ client يتعامل مع كل service بشكل مباشر، هو بيتعامل بس مع الـ Gateway، والـ Gateway يتولى الباقي.
API Gateway Benefits
الـ API Gateway مش بس نقطة دخول موحدة للـ APIs، لكنه بيقدّم مجموعة كبيرة من المميزات زي:
- Dynamic Routing
- Authentication & Authorization
- Rate Limiting & Throttling
- Parameter Validation
- Allow / Deny List
- Service Discovery
- Protocol Conversion
- Caching
API Gateway Tools
فيه أكتر من Tool نقدر نستعملها كـ API Gateways:
- Kong وهو قوي جدًا ومفتوح المصدر مبني على
Nginx. - الـ API Gateway من AWS وطبعًا ده كله Managed من Amazon
- Istio Gateway وهو جزء من الـ
Service Meshوبيقدم مميزات قوية جدًا في الـRouting - Traefik مشهور جدًا في عالم الـ
containersوخصوصًا معDockerوKubernetes.
أمتى ممكن ما نحتاجش API Gateway؟
- لو التطبيق بسيط ومكوّن من خدمة واحدة أو خدمات قليلة جدًا.
- لو الـ communication بين الخدمات داخلي فقط ومفيش interaction مباشر مع clients خارجيين.
- لو الـ overhead اللي هيسببه الـ
Gatewayأكبر من الفايدة اللي بيقدمها.
في الختام
الـ API Gateway هو عنصر مهم جدًا في تصميم الأنظمة الحديثة، خصوصًا لو شغالين بنظام الـ Microservices. لإنه بيوفر abstraction ممتازة، وبيسهل الـ Communication، وبيقدّم مميزات كتير من غير ما نكرّرها جوه كل service.
سؤال ممكن تفكروا فيه ايه الفرق بين الـ Reverse Proxy والـ API Gateway ؟ ويا ترى لو هل ممكن يكون عندنا في الـ System أكتر من API Gateway وامتة ؟