إدارة واجهات برمجة التطبيقات بدون خادم باستخدام Apache APISIX
January 18, 2023
الحوسبة بدون خوادم تمكن المطورين من بناء التطبيقات بشكل أسرع من خلال إلغاء الحاجة لإدارة البنية التحتية. باستخدام واجهات برمجة التطبيقات (APIs) بدون خوادم في السحابة، يقوم موفر خدمة السحابة تلقائيًا بتوفير وتوسيع وإدارة البنية التحتية المطلوبة لتشغيل الكود. في هذه المقالة، ستتعلم كيفية دمج بوابة Apache APISIX API مع وظائف Azure لإدارة واجهات برمجة التطبيقات بدون خوادم المبنية على Java.
أهداف التعلم
ستتعلم ما يلي خلال المقال:
- ما هي واجهات برمجة التطبيقات بدون خوادم؟
- دور بوابة API في إدارة حركة واجهات برمجة التطبيقات بدون خوادم المعقدة.
- كيفية إعداد بوابة Apache APISIX.
- كيفية بناء واجهات برمجة التطبيقات بدون خوادم باستخدام وظائف Azure.
- كيفية عرض واجهات برمجة التطبيقات بدون خوادم كخدمات upstream.
- كيفية تأمين واجهات برمجة التطبيقات بدون خوادم باستخدام إضافات المصادقة في APISIX.
- كيفية تطبيق سياسات تحديد المعدل.
تقدم Apache APISIX إضافات إضافية يمكن استخدامها مع حلول بدون خوادم أخرى مثل AWS Lambda.
قبل أن نبدأ بالجانب العملي من البرنامج التعليمي، دعنا نستعرض بعض المفاهيم.
ما هي واجهات برمجة التطبيقات بدون خوادم؟
واجهات برمجة التطبيقات بدون خوادم هي نفسها واجهات برمجة التطبيقات التقليدية، إلا أنها تستخدم خلفية بدون خوادم. بالنسبة للشركات والمطورين، تعني الحوسبة بدون خوادم أنهم لم يعودوا بحاجة للقلق بشأن صيانة الخوادم أو توسيع موارد الخوادم لتلبية متطلبات المستخدمين. أيضًا، تتجنب واجهات برمجة التطبيقات بدون خوادم مشكلة التوسع لأنها تنشئ موارد الخوادم في كل مرة يتم فيها تقديم طلب. تقلل واجهات برمجة التطبيقات بدون خوادم الكمون لأنها تستضيف على خادم أصل. وأخيرًا وليس آخرًا، الحوسبة بدون خوادم هي أكثر كفاءة من حيث التكلفة من البدائل التقليدية مثل بناء الخدمات المصغرة بالكامل.
واجهات برمجة التطبيقات بدون خوادم باستخدام وظائف Azure
وظيفة Azure هي طريقة بسيطة لتشغيل أجزاء صغيرة من الكود في السحابة. لا داعي للقلق بشأن البنية التحتية المطلوبة لاستضافة هذا الكود. يمكنك كتابة الوظيفة بلغة C#، Java، JavaScript، PowerShell، Python، أو أي من اللغات المدرجة في اللغات المدعومة.
باستخدام وظائف Azure، يمكنك بناء واجهات برمجة تطبيقات HTTP لتطبيقات الويب الخاصة بك بسرعة دون عناء استخدام أطر عمل الويب. وظائف Azure بدون خوادم، لذلك يتم تحصيل الرسوم فقط عند استدعاء نقطة نهاية HTTP. عندما لا تكون نقاط النهاية قيد الاستخدام، لن يتم تحصيل أي رسوم. هذان الأمران معًا يجعلان منصات بدون خوادم مثل وظائف Azure خيارًا مثاليًا لواجهات برمجة التطبيقات حيث تواجه طفرات غير متوقعة في حركة المرور.
بوابة API لإدارة حركة واجهات برمجة التطبيقات بدون خوادم
بوابة API هي الجزء الأساسي من واجهات برمجة التطبيقات بدون خوادم لأنها مسؤولة عن الاتصال بين واجهة برمجة تطبيقات محددة والوظيفة التي تتعامل مع الطلبات الموجهة إلى تلك الواجهة. هناك العديد من الفوائد لبوابة API في بنية واجهات برمجة التطبيقات بدون خوادم. بالإضافة إلى الوظائف الأساسية لبوابة API مثل المصادقة، تحديد المعدل، المراقبة، التخزين المؤقت، وما إلى ذلك، فإنها قادرة على استدعاء واجهات برمجة التطبيقات بدون خوادم، الاشتراك في الأحداث، ثم معالجتها باستخدام ردود الاتصال وتوجيه طلبات المصادقة إلى خدمات التفويض الخارجية مع منطق وظيفة بدون خوادم مخصص بالكامل.
إدارة واجهات برمجة التطبيقات بدون خوادم باستخدام Apache APISIX
مع وجود معرفة نظرية كافية، يمكننا الآن الانتقال إلى الجانب العملي. نستخدم مشروعًا مثالياً apisix-manage-serverless-apis المستضاف على GitHub. يمكنك العثور على الكود المصدري وأوامر curl العينة التي نستخدمها في هذا البرنامج التعليمي.
لمشروعنا الصغير، سنعمل مع وظيفتين بسيطتين من Azure مكتوبتين بلغة Java تحاكيان واجهات برمجة التطبيقات بدون خوادم لخدمات المنتج والمراجعة.
المتطلبات الأساسية
- يجب أن تكون على دراية بالمفاهيم الأساسية لواجهات برمجة التطبيقات.
- يجب أن تكون لديك معرفة عملية بوظائف Azure، على سبيل المثال هذه الوحدة التعليمية توضح كيفية بناء واجهة برمجة تطبيقات HTTP باستخدام امتداد وظائف Azure لـ Visual Studio Code.
- Docker
- حساب Azure
- Azure CLI
- Java Developer Kit، على الأقل الإصدار 8
- Maven
- Azure Functions Core Tools
- Visual Studio Code
- Azure Functions Core Tools (الحد الأدنى للإصدار 2.6.666)
- امتداد وظائف Azure لـ Visual Studio Code
إعداد المشروع
أول شيء تقوم به هو استنساخ مشروع المستودع من GitHub:
git clone https://github.com/Boburmirzo/apisix-manage-serverless-apis.git
افتح مجلد المشروع في محرر الأكواد المفضل لديك. يستخدم البرنامج التعليمي VS Code.
تشغيل Apache APISIX
لتشغيل Apache APISIX ووظائف Azure محليًا، يمكنك اتباع هذه الخطوات:
افتح نافذة طرفية جديدة وقم بتشغيل الأمر docker compose up
من المجلد الجذر للمشروع:
docker compose up -d
سيقوم الأمر أعلاه بتشغيل Apache APISIX و etcd مع Docker. على سبيل المثال، إذا كان Docker desktop مثبتًا على جهازك، يمكنك رؤية الحاويات قيد التشغيل هناك:
قمنا بتثبيت APISIX على بيئتنا المحلية في هذا العرض التوضيحي ولكن يمكنك أيضًا نشرها على Azure وتشغيلها على Azure Container Instance. انظر البرنامج التعليمي التالي.
تشغيل وظائف Azure
ثم، انتقل إلى مجلد /upstream
:
mvn clean install
mvn azure-functions:run
ستبدأ الوظيفتان في نافذة طرفية. يمكنك طلب واجهات برمجة التطبيقات بدون خوادم في متصفحك:
على سبيل المثال:
نشر وظائف Azure
بعد ذلك، نقوم بنشر كود الوظائف إلى تطبيق وظائف Azure عن طريق تشغيل الأمر التالي:
mvn azure-functions:deploy
أو يمكنك ببساطة اتباع هذا البرنامج التعليمي حول كيفية نشر مشروع الوظيفة إلى Azure
لاحظ أن اسم تطبيق الوظيفة يتم إنشاؤه عشوائيًا بناءً على
artifactId
الخاص بك، مع إضافة رقم عشوائي. في أوامر البرنامج التعليمي، يتم ذكر اسم تطبيق الوظيفةserverless-apis
.
للتأكد من أن وظيفتنا تعمل، يمكننا اختبار استدعاء مباشر عن طريق طلب عنوان URL الخاص بها في المتصفح:
https://serverless-apis.azurewebsites.net/api/products
https://serverless-apis.azurewebsites.net/api/reviews
عرض واجهات برمجة التطبيقات بدون خوادم في APISIX
بمجرد اكتمال الإعداد، سنقوم الآن بعرض واجهات برمجة التطبيقات بدون خوادم لوظائف Azure كخدمات upstream في APISIX. للقيام بذلك، نحتاج إلى إنشاء مسار جديد مع تمكين إضافة azure-function
لكل من واجهات برمجة التطبيقات الخلفية بدون خوادم products
و reviews
.
إذا تم تمكين إضافة azure-function
على مسار، فإن APISIX يستمع للطلبات على مسار ذلك المسار، ثم يستدعي كود وظيفة Azure البعيدة مع المعلمات من ذلك الطلب.
إنشاء مسار للمنتجات
لإنشاء مسار لوظيفة المنتجات، قم بتشغيل الأمر التالي:
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"name": "إنشاء مسار مع إضافة وظيفة Azure",
"plugins": {
"azure-functions": {
"function_uri": "https://serverless-apis.azurewebsites.net/api/products",
"ssl_verify": false
}
},
"uri": "/products"
}'
لاحظ أننا قمنا بتعيين سمة
ssl_verify
لإضافةazure-functions
إلىfalse
لتعطيل التحقق من SSL لأغراض العرض التوضيحي فقط. يمكنك أيضًا تمكينها لإجراء طلبات أكثر أمانًا من APISIX إلى وظائف Azure. تعرف على معلمات التكوين الأخرى.
الاختبار باستخدام طلب curl
يمكننا استخدام curl لإرسال طلب، لمعرفة ما إذا كان APISIX يستمع على المسار بشكل صحيح ويوجه الطلب إلى خدمة upstream بنجاح:
curl -i -XGET http://127.0.0.1:9080/products
HTTP/1.1 200 OK
[
{
"id": 1,
"name": "Product1",
"description": "Description1"
},
{
"id": 2,
"name": "Product2",
"description": "Description2"
}
]
رائع! لقد حصلنا على استجابة من واجهة برمجة التطبيقات بدون خوادم الفعلية على وظيفة Azure.
بعد ذلك، سنقوم بإعداد مماثل لوظيفة reviews
.
إنشاء مسار للمراجعات والاختبار
قم بإنشاء المسار الثاني مع تمكين إضافة وظيفة Azure:
curl http://127.0.0.1:9180/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"azure-functions": {
"function_uri": "https://serverless-apis.azurewebsites.net/api/reviews",
"ssl_verify": false
}
},
"uri": "/reviews"
}'
اختبار استجابة واجهة برمجة التطبيقات بدون خوادم:
curl -i -XGET http://127.0.0.1:9080/reviews
في هذا القسم، قدمنا المسار الجديد وأضفنا إضافة azure-functions
إلى واجهات برمجة التطبيقات بدون خوادم الخاصة بنا بحيث يمكن لـ APISIX استدعاء وظائف Azure البعيدة وإدارة حركة المرور. في الأقسام التالية، سنتعلم كيفية مصادقة مستهلكي واجهات برمجة التطبيقات وتطبيق سياسات وقت التشغيل مثل تحديد المعدل.
تأمين واجهات برمجة التطبيقات بدون خوادم باستخدام إضافات المصادقة في APISIX
حتى الآن، واجهات برمجة التطبيقات بدون خوادم الخاصة بنا عامة ويمكن الوصول إليها من قبل المستخدمين غير المصرح لهم. في هذا القسم، سنقوم بتمكين ميزة المصادقة لمنع الطلبات غير المصرح بها إلى واجهات برمجة التطبيقات بدون خوادم.
يمكن لـ Apache APISIX التحقق من الهوية المرتبطة بطلبات واجهات برمجة التطبيقات من خلال التحقق من بيانات الاعتماد والرمز. أيضًا، يمكنه تحديد أي حركة مرور مصرح لها بالمرور عبر واجهة برمجة التطبيقات إلى الخدمات الخلفية. يمكنك التحقق من جميع إضافات المصادقة المتاحة.
لنقم بإنشاء مستهلك جديد لواجهات برمجة التطبيقات بدون خوادم الخاصة بنا وإضافة إضافة basic-auth للمسار الحالي بحيث يمكن فقط للمستخدم المسموح له الوصول إليها.
إنشاء مستهلك جديد لواجهات برمجة التطبيقات بدون خوادم
الأمر التالي سينشئ مستهلكنا الجديد مع بيانات الاعتماد الخاصة به مثل اسم المستخدم وكلمة المرور:
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "consumer1",
"plugins": {
"basic-auth": {
"username": "username1",
"password": "password1"
}
}
}
إضافة إضافة basic auth إلى مسارات المنتجات والخدمات الحالية
الآن نقوم بتكوين إضافة basic-auth
للمسارات للسماح لـ APISIX بالتحقق من رأس الطلب مع بيانات اعتماد مستهلك واجهة برمجة التطبيقات في كل مرة يتم فيها استدعاء واجهات برمجة التطبيقات:
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"name": "إنشاء مسار مع إضافة وظيفة Azure",
"plugins": {
"azure-functions": {
"function_uri": "https://serverless-apis.azurewebsites.net/api/products",
"ssl_verify": false
},
"basic-auth": {}
},
"uri": "/products"
}'
curl http://127.0.0.1:9180/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"azure-functions": {
"function_uri": "https://serverless-apis.azurewebsites.net/api/reviews",
"ssl_verify": false
},
"basic-auth": {}
},
"uri": "/reviews"
}'
اختبار إضافة basic auth
الآن إذا طلبنا واجهات برمجة التطبيقات بدون خوادم بدون بيانات اعتماد المستخدم في الرأس، سنحصل على خطأ غير مصرح به:
curl -i http://127.0.0.1:9080/products
HTTP/1.1 401 Unauthorized
{"message":"Missing authorization in request"}
النتيجة كما توقعنا. ولكن إذا قدمنا بيانات اعتماد المستخدم الصحيحة في الطلب ووصلنا إلى نفس النقطة النهائية، يجب أن تعمل بشكل جيد:
curl -i -u username1:password1 http://127.0.0.1:9080/products
HTTP/1.1 200 OK
لقد تحققنا من هوية العميل الذي يحاول طلب واجهات برمجة التطبيقات بدون خوادم باستخدام إضافة المصادقة الأساسية بمساعدة Apache APISIX.
تطبيق سياسات تحديد المعدل لواجهات برمجة التطبيقات بدون خوادم
في هذا القسم، سنحمي واجهات برمجة التطبيقات بدون خوادم من الإساءة عن طريق تطبيق سياسة تحديد المعدل. في بوابة Apache APISIX، يمكننا تطبيق تحديد المعدل لتقييد عدد الطلبات الواردة.
تطبيق واختبار سياسة تحديد المعدل
مع تكوينات المسار الحالية لوظائف المنتجات والمراجعات المحددة، يمكننا تطبيق سياسة تحديد المعدل باستخدام إضافة limit-count لحماية واجهة برمجة التطبيقات الخاصة بنا من الاستخدام غير الطبيعي. سنقوم بتقييد عدد استدعاءات واجهة برمجة التطبيقات إلى 2 لكل 60 ثانية لكل مستهلك واجهة برمجة التطبيقات.
لتمكين إضافة limit-count
للمسار الحالي للمنتجات، نحتاج إلى إضافة الإضافة إلى سمة plugins في تكوين Json الخاص بنا:
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"name": "إنشاء مسار مع إضافة وظيفة Azure",
"plugins": {
"azure-functions": {
"function_uri": "https://serverless-apis.azurewebsites.net/api/products",
"ssl_verify": false
},
"basic-auth": {},
"limit-count": {
"count": 2,
"time_window": 60,
"rejected_code": 403,
"rejected_msg": "الطلبات متكررة جدًا، يرجى المحاولة مرة أخرى لاحقًا."
}
},
"uri": "/products"
}'
سيقوم Apache APISIX بمعالجة أول طلبين كالمعتاد. ومع ذلك، سيؤدي الطلب الثالث في نفس الفترة إلى إرجاع رمز 403 HTTP Forbidden
مع رسالة الخطأ المخصصة الخاصة بنا:
HTTP/1.1 403 Forbidden
{"error_msg":"الطلبات متكررة جدًا، يرجى المحاولة مرة أخرى لاحقًا."}
الخطوات التالية
في هذه المقالة، تعلمنا خطوة بخطوة كيفية إنشاء واجهات برمجة التطبيقات بدون خوادم المبنية على Java باستخدام وظائف Azure وبوابة Apache APISIX لإدارة واجهات برمجة التطبيقات الخاصة بك طوال دورة حياتها الكاملة من عرض واجهات برمجة التطبيقات بدون خوادم كخدمات upstream في APISIX إلى تأمينها بشكل صحيح وتطبيق تحديد المعدل لتقييد عدد الطلبات. هذا يفتح الأبواب أمام حالات استخدام أخرى لبوابة API ودمج واجهات برمجة التطبيقات بدون خوادم.
يمكنك استكشاف القدرات الأخرى لبوابة APISIX من خلال سلسلة من الإضافات المدمجة لتحويل الطلبات، مراقبة التوفر، الأداء، واستخدام واجهات برمجة التطبيقات بدون خوادم الخاصة بنا، تخزين استجابات واجهات برمجة التطبيقات مؤقتًا وتطويرها بشكل أكبر عن طريق إصدار واجهات برمجة التطبيقات مما يساعدك على تقليل وقت التطوير، زيادة قابلية التوسع، وتوفير التكاليف.
Apache APISIX هي بوابة API مفتوحة المصدر بالكامل. إذا كنت بحاجة إلى ميزات إدارة API أكثر تقدمًا لواجهات برمجة التطبيقات بدون خوادم، يمكنك استخدام API7 Enterprise أو API7 Cloud التي تعتمد على APISIX.