لماذا يحتاج مشروع C# الخاص بك إلى API Gateway؟
\n\nتخيل أنك تبني تطبيق ويب حديث بلغة C#. لديك خدمة المستخدمين، وخدمة الطلبات، وخدمة الدفع - وكل منها يعمل على منفذ خاص به، وربما على خوادم مختلفة. يجب أن يعرف تطبيق العميل (الواجهة الأمامية أو تطبيق الجوال) جميع هذه العناوين، وتنسيقات البيانات، وبروتوكولات المصادقة. كابوس، أليس كذلك؟
\n\nهنا يأتي دور API Gateway لخدمات C# - نقطة دخول واحدة تتولى كل "العمل القذر": التوجيه، وتجميع الردود، والتحقق من الرموز، والتخزين المؤقت، وتوزيع الحمل. في هذه المقالة، سنشرح كيفية تنفيذ بوابة API .NET عمليًا باستخدام أدوات حديثة مثل Ocelot C# و YARP .NET.
\n\nما هو API Gateway ولماذا هو ضروري للخدمات المصغرة؟
\n\nAPI Gateway هو طبقة وسيطة بين العملاء وخدمات الخلفية الخاصة بك. يعمل كـ "موزع": يستقبل طلبات HTTP الواردة، ويحللها، ويعيد توجيهها إلى الخدمات المصغرة C# المناسبة. وفي الوقت نفسه، يمكن للبوابة أداء مهام إضافية:
\n\n- \n
- توجيه الطلبات - توجيه الطلبات إلى خدمات مختلفة بناءً على URL أو الرؤوس أو المعلمات. \n
- تجميع البيانات - جمع الردود من عدة خدمات وإرجاع JSON واحد للعميل. \n
- مصادقة API Gateway - التحقق من رموز JWT أو مفاتيح API قبل وصول الطلب إلى الخدمة. \n
- توزيع الحمل - توزيع الطلبات بين نسخ الخدمة الواحدة. \n
- التخزين المؤقت - تخزين الردود مؤقتًا للبيانات المطلوبة بشكل متكرر. \n
- تحديد المعدل - الحد من عدد الطلبات من عميل واحد. \n
بدون بوابة API .NET، يجب على كل عميل معرفة بنية النظام بأكمله. معها - يتواصل العميل مع نقطة نهاية واحدة فقط، وكل شيء آخر يحدث "تحت الغطاء".
\n\nأداتان رئيسيتان لـ API Gateway بلغة C#
\n\nفي نظام .NET البيئي، هناك حلان قويان يستحقان اهتمامك:
\n\nOcelot C#
\nربما هو أشهر API Gateway لخدمات C#. Ocelot هي مكتبة مفتوحة المصدر تضيف وظائف البوابة إلى أي تطبيق ASP.NET Core. تدعم:
\n- \n
- التوجيه بناءً على تكوين JSON \n
- تجميع الردود \n
- المصادقة والتفويض \n
- تحديد المعدل \n
- توزيع الحمل (RoundRobin, LeastConnection) \n
- WebSockets \n
YARP .NET (Yet Another Reverse Proxy)
\nمشروع من Microsoft، يُقدم كخادم وكيل عكسي عالي الأداء. YARP أكثر مرونة وأداءً، لكنه يتطلب إعدادًا يدويًا أكثر. مناسب تمامًا إذا كنت بحاجة إلى تحكم كامل في كل طلب.
\n\nفي هذه المقالة، سنركز على Ocelot - فهو أسهل للبدء ويغطي 90% من المهام النموذجية.
\n\nإنشاء API Gateway بلغة C# باستخدام Ocelot: دليل خطوة بخطوة
\n\nلنكتب كودًا حقيقيًا. سننشئ بوابة API .NET تقوم بتوجيه الطلبات إلى خدمتين مصغرتين: UserService (المنفذ 5001) و OrderService (المنفذ 5002).
الخطوة 1: إنشاء المشروع
\nافتح الطرفية ونفذ:
\ndotnet new webapi -n ApiGatewayDemo\ncd ApiGatewayDemo\n\nقم بتثبيت حزمة Ocelot:
\ndotnet add package Ocelot\n\nالخطوة 2: إعداد تكوين المسارات
\nأنشئ ملف ocelot.json في جذر المشروع. فيه سنصف قواعد التوجيه:
{\n "Routes": [\n {\n "DownstreamPathTemplate": "/api/users/{everything}",\n "DownstreamScheme": "http",\n "DownstreamHostAndPorts": [\n