كيفية نشر تطبيق FastAPI؟
في حين أن مزودي الاستضافة كثيرون، إلا أن القليل منهم فقط يقدمون واجهة البوابة المشتركة (CGI) أو وحدة mod_wsgi لدعم استضافة Python. ولكن من بين المطورين الذين شاركوا في استبيان مطوري Stack Overflow 2023، يحتل استخدام الحاويات مع Docker الصدارة في تطوير التطبيقات ونشرها.
بالنسبة لتطبيقات Python التي تم تطويرها باستخدام إطار عمل مثل FastAPI، يكون النشر عبر الحاوية كخدمة (CaaS) بسيطًا مثل دفع شفرتك إلى GitHub. في هذه المدونة، ستتعلم في هذه المدونة كيفية إرساء تطبيق FastAPI الخاص بك ونشره عبر CaaS.
Contents
الوجبات الرئيسية
- يعد Docker وFastAPI ثنائيًا قويًا؛ فهما يسمحان بعمليات نشر مبسطة ومجمعة مع التبعيات المضمنة.
- تتفوق FastAPI في العمليات غير المتزامنة، والتحقق من صحة البيانات، و OpenAPI، ولكنها تفتقر إلى دعم المجتمع والتوافق.
- يعمل تطبيق Back4app على تسهيل نشر FastAPI، والمزامنة مع GitHub للتحديثات التلقائية، وتقديم إعداد قاعدة بيانات سحابية.
ما هو FastAPI؟
FastAPI هو إطار عمل ويب Python مفتوح المصدر خفيف الوزن ومفتوح المصدر لتطوير واجهات برمجة تطبيقات RESTful. تم إطلاقه في عام 2018، وهو يدعم نموذج Pydantic وStarlette، مما يضعه في نفس مستوى أداء Node.js وGolang. كما أن الإطار قابل للتخصيص، مما يسمح لك بتصميم قاعدة البرمجة الخاصة بك بمرونة.
بفضل دعمه لمخطط JSON Schema وتلميح النوع في إصدارات Python 3.6 والإصدارات الأحدث، يسمح نموذج Pydantic ل FastAPI بتحليل البيانات بسهولة والتحقق من صحتها في وقت التشغيل.
يُقدِّم إطار عمل Starlette واجهة بوابة الخادم غير المتزامن (ASGI) في FastAPI؛ وهذا يتيح لك تنفيذ عمليات غير متزامنة في واجهات برمجة تطبيقات Python RESTful APIs وتشغيل شفرتك على خادم Uvicorn ASGI.
مثل Nodemon في Node.js، يستمع خادم Uvicorn إلى التغييرات في مسارات واجهة برمجة التطبيقات ويعيد بدء وقت التشغيل لكل تحديث.
على الرغم من أن 7.42% فقط من المطورين الذين شاركوا في استبيان مطوري Stack Overflow 2023 أشاروا إلى أنهم يستخدمون FastAPI، إلا أن GitHub حتى كتابة هذا التقرير، يقدر إجمالي عدد مستخدميه ب 203 آلاف مستخدم. مع وجود أكثر من 498 مساهمًا و190 إصدارًا حتى وقت كتابة هذا التقرير، يتلقى FastAPI تحديثات وتصحيحات مستمرة.
ومع ذلك، فإن وضع FastAPI على نفس مستوى أداء Golang و Node.js لا يزال محل جدل بين المطورين.
بينما يوافق البعض الآخر على ذلك، يرى البعض الآخر أنه على الرغم من أنه يمثل تحسنًا كبيرًا في تطوير الويب باستخدام Python، إلا أن FastAPI لا يزال لا يقارن بأداء أي منهما.
مزايا FastAPI
- دعم العمليات غير المتزامنة: إلى جانب عمليات Python المتزامنة الافتراضية لـ Python، يدعم FastAPI إعلانات الدوال باستخدام المزامنة/الترقب. بفضل Starlette، والذي يمنح أيضًا دعم WebSocket. يضيف هذا التزامن إلى برنامجك، مما يسمح لتطبيقك بتنفيذ عمليات أخرى أثناء انتظار العمليات الأبطأ مثل استعلامات قاعدة البيانات.
- دعم التحقق من صحة البيانات: باستخدام نموذج Pydantic BaseModel، تستفيد FastAPI من تلميحات نوع بيانات Python للحفاظ على الصرامة أثناء تحليل البيانات. هذا يمنع نوع البيانات الخاطئ من الدخول إلى قاعدة البيانات. ومن ثم، على عكس النماذج الديناميكية التي تتطلب مكتبات تحقق إضافية، فإن التحقق من صحة النموذج مباشر ومتاح بسهولة في FastAPI.
- موحدة بالكامل: يتوافق FastAPI مع مواصفات OpenAPI لخدمة واجهات برمجة تطبيقات HTTP عبر الويب، مما يسهل على تطبيقات المستهلكين والعملاء فهم واجهة برمجة التطبيقات التي يريدون استخدامها. تحت الغطاء، يستخدم أيضًا إعلان مخطط JSON Schema للتأكد من صلاحية البيانات الاختبارية والبيانات المباشرة التي يرسلها المستخدم قبل إرسالها إلى قاعدة البيانات.
- المرونة: على عكس Django، لا يقيد FastAPI المطور بمعيار معماري معين لقاعدة برمجية معينة. بدلاً من ذلك، يترك هذا القرار للمطور. وبالتالي، يمكنك تصميم قاعدة الرموز الخاصة بك مع اصطلاحات تسمية مرنة وإعلان إعدادات التطبيق العامة ومجموعات اختبار الوحدة أثناء التنقل. كما أن نمذجة التعليمات البرمجية وفصل الاهتمامات (SOC) واضحة ومباشرة.
وإذا كنت تستخدم البرمجة الموجهة للكائنات (OOP)، وهو ما نوصي به، يمكنك بسهولة تكوين نماذجك في فئات نقاط النهاية الخاصة بك. أثناء إنشائك، يكون إلحاق نقاط نهاية واجهة برمجة التطبيقات (API) بمساراتك أمرًا مباشرًا أيضًا.
- لديها منحنى تعليمي سهل: على الرغم من وجود مجتمع مستخدمين أصغر من أطر عمل مثل Flask و Django، إلا أن FastAPI يتميز بوثائقه الشاملة على نطاق واسع ودروسه التعليمية. مع خلفية تطويرية، خاصةً في لغة Python أو جافا سكريبت، يمكنك بسهولة اختياره. تساهم بساطته ومرونته بشكل عام في عمليات تطوير أسرع.
القيود
- دعم مجتمعي منخفض: لا تملك FastAPI العديد من المستخدمين مثل Django أو Flask. لا يزال جديدًا نسبيًا. لذا فإن الدعم المجتمعي أقل؛ وهذا قد يكون تحديًا، خاصةً للمطورين الجدد.
- توافق إصدارات محدودة: يدعم FastAPI فقط الإصدارات الأحدث من Python، بدءًا من Python 3.6 وما بعده. وبالتالي، يجب ترقية الأجهزة أو الخوادم التي تشغّل إصدارات Python أقدم من 3.6 لتثبيت FastAPI وتشغيله بنجاح.
خيارات نشر FastAPI
البنية التحتية كخدمة (IaaS) والحاويات كخدمة (CaaS) هي بنى تحتية سحابية قابلة للتطوير لنشر التطبيقات.
في حين يمكنك نشر تطبيق FastAPI عبر خادم افتراضي خاص (VPS) أو استضافة مشتركة، إلا أن أياً منها ليس قابلاً للتطوير مثل IaaS أو CaaS.
IaaS
IaaS هي منصة توفر موارد الحوسبة عند الطلب في السحابة. وهي توفر جميع الموارد الافتراضية اللازمة لإعداد خادم نشر لتطبيقك، وعادةً ما يكون ذلك على أساس الدفع حسب الطلب.
بالإضافة إلى البنية الأساسية للحوسبة، تتضمن البنية الأساسية للحوسبة، تتضمن IaaS التخزين وموارد الشبكة الأخرى مثل موازنات التحميل والشبكات الافتراضية الخاصة وجدران الحماية وإدارة DNS وغيرها. أنت مسؤول عن إدارة بيئة الحوسبة الخاصة بك ويمكنك تخصيص مواردها أو توسيع نطاقها لتناسب متطلبات تطبيقك.
كخدمة كخدمة
CaaS هي منصة كخدمة (PaaS) تتيح لك نشر تطبيقك في السحابة كحاويات. على عكس IaaS، تدير CaaS جميع أساسيات الحوسبة المطلوبة لاستضافة تطبيقك تحت الغطاء.
ويشمل ذلك بيئة وقت تشغيل الحاوية، والتنسيق، والتخزين، وموازنة التحميل، وغير ذلك. وبالتالي، يمكنك التركيز على بناء تطبيقك بدلاً من الانشغال بإدارة البنية التحتية.
نظرًا لأنك تقوم بنشر تطبيقك كحاوية، فإن ذلك يجعل تكامل CI/CD بسيطًا ومباشرًا دون القلق بشأن التكوينات الفنية. وهذا يجعل إصدار التطبيق وتحديثاته أكثر سرعة.
عملية نشر واجهة برمجة تطبيقات FAST API
لننتقل إلى عملية النشر خطوة بخطوة، بدءاً بالمتطلبات الأساسية. ولكن نظرًا لأننا سننشر تطبيق FastAPI الخاص بنا باستخدام حاويات Back4App، دعنا نرى بسرعة ما هي قبل المتابعة.
نظرة عامة على حاويات Back4app Containers
Back4App Containers عبارة عن منصة سحابية تتيح لك نشر التطبيقات المرساة بسرعة في السحابة. يتزامن النظام الأساسي مع مستودع GitHub الخاص بك ويقوم تلقائياً بتحديث النشر الخاص بك في كل مرة تقوم فيها بدفع إصدار. وبهذه الطريقة، تساعد في التخلص من التحديثات اليدوية للحاويات وأوقات تعطل الخادم.
باستخدام Back4App Containers، ما عليك سوى دفع التعليمات البرمجية والإصدارات اللاحقة إلى GitHub من جهازك المحلي، وتتولى المنصة تنسيق صور الحاويات تحت الغطاء. يتميز Back4App أيضًا بتتبع النشر في الوقت الفعلي والتسجيل في الوقت الفعلي.
وبالتالي، يمكنك تتبع خطوات النشر وتحديد نقطة الفشل – إن وجدت. وإذا تعطل تطبيقك في وقت التشغيل، وهو ما قد يحدث للغة مفسرة مثل Python، يساعدك التسجيل في الوقت الحقيقي على تتبع الأخطاء في وحدة التحكم لإصلاحها بسرعة.
فيما يلي الميزات الرئيسية لتطبيق Back4App:
- قم بمزامنة تطبيق Back4App الخاص بك بسهولة مع مستودع قاعدة البيانات الخاصة بك على GitHub.
- انشر تطبيقك على السحابة عبر حاوية Back4App عن طريق دفع التعليمات البرمجية والتحديثات اللاحقة إلى مستودع GitHub الخاص بك.
- كل ما تحتاجه هو ملف Dockerfile. يعالج Back4App جميع عمليات التثبيت التابعة لك.
- قم بتشفير متغيرات بيئتك بسهولة أثناء النشر والإصدارات اللاحقة.
- مراقبة عمليات النشر في الوقت الفعلي وإدارة عمليات التراجع.
- راقب سجل استخدام التطبيق باستخدام سجلات في الوقت الفعلي.
- نشر تطبيقات الهاتف المحمول والويب على السحابة
تنزيل Python وتثبيته
سنستخدم Python 3.10.6 في هذه المدونة. لكن يمكنك استخدام أي إصدار Python ليس أقدم من 3.6. انتقل إلى python.org لتحميل وتثبيت أحدث إصدار متوافق من Python لنظام التشغيل الخاص بك – إذا لم تكن قد فعلت ذلك بالفعل. خلاف ذلك، تجاهل هذا القسم.
بمجرد التنزيل، انقر فوق ملف التثبيت واتبع التعليمات التي تظهر على الشاشة لتثبيت Python على جهازك المحلي.
تأكد من وضع علامة في خيار إضافة python.exe إلى PATH لإضافة Python إلى مسار متغير النظام؛ مما يجعله قابلاً للتنفيذ عبر سطر الأوامر.
إذا كنت تستخدم جهاز ماك، فهو يأتي بالفعل مع Python 2.7 افتراضيًا. يمكنك تحديثه إلى أحدث إصدار باستخدام Homebrew عبر الجهاز الطرفي:
brew install python3
قم بتشغيل الأمر التالي في جهازك الطرفي للتحقق من إصدار Python لديك.
python --version
تنشيط بيئة Python الافتراضية وتثبيت FastAPI
بعد ذلك، قم بإنشاء دليل مشروع جديد وافتح سطر الأوامر إلى هذا المجلد. ثم قم بتفعيل بيئة Python الافتراضية باستخدام venv.
تأتي هذه الحزمة مع Python ولا تتطلب أي تثبيت. تسمح لك بإدارة تبعيات Python بمعزل عن تثبيت تبعيات Python على مستوى العالم.
نفّذ الأمر التالي عبر الطرفية لإنشاء بيئة افتراضية، مع استبدال env_name باسم البيئة المفضلة لديك.
py -m venv env_name
قم بتشغيل الأمر التالي لتفعيل البيئة الافتراضية.
.\env_name\Scripts\activate
تثبيت FastAPI وUvicorn
الخطوة التالية هي تثبيت إطار عمل FastAPI ووقت تشغيل خادم Uvicorn في البيئة الافتراضية النشطة. يؤدي هذا أيضًا إلى تثبيت Pydantic و Starlette.
قم بإنشاء ملف requirements.txt في جذر مشروعك وأدخل الحزم المراد تثبيتها، كما هو موضح أدناه.
fastapi
uvicorn
فيما يلي العرض التوضيحي في VSCode. يمكنك إلحاق المزيد من التبعيات بهذا الملف حسب الحاجة.
قم بتشغيل الأمر التالي عبر الجهاز الطرفي لتثبيت التبعيات المدرجة. تأكد من أن البيئة الافتراضية لا تزال نشطة.
pip install install -r requirements.txt
يقوم الأمر بتثبيت الحزمة المحددة كما هو موضح أدناه.
بمجرد التثبيت، قم بتحديث المتطلبات.txt باستخدام الأمر التالي:
pip freeze > requirements.txt
يقوم الأمر أعلاه بالكتابة فوق المتطلبات.txt مع التبعيات المثبتة، بما في ذلك أرقام إصداراتها الصحيحة. تأكد من القيام بذلك كلما قمت بتثبيت تبعية جديدة في بيئتك الافتراضية.
يبدو ملف requirements.txt بهذا الشكل بعد التحديث:
مقدمة المشروع
سنقوم بكتابة تطبيق بسيط “Hello World” FastAPI ونشره باستخدام حاويات Back4App المجانية. لا تقلق إذا كان مشروعك معقداً. فالنشر يأخذ نفس الخطوة، وستحصل أيضاً على وقت تشغيل شهري مجاني بغض النظر عن ذلك.
ومع ذلك، إذا كان تطبيقك يتعامل مع العديد من الطلبات يوميًا، فقد ترغب في الترقية بعد النشر لمنح زوارك تجربة مستخدم أكثر سلاسة دون أي تعطل.
رمز التطبيق
أنشئ دليل موجه جديد في المجلد الجذر لمشروعك وأنشئ ملف main.py داخل هذا الدليل. يعالج هذا الملف نقاط نهاية واجهة برمجة التطبيقات والموجه. تخطى إلى القسم التالي إذا كان لديك بالفعل مشروع للنشر.
إليك رمز “مرحبًا بالعالم”:
from fastapi import FastAPI, APIRouter
import uvicorn
app = FastAPI()
class HelloWorld():
def read_hello(self):
return {"data": "Hello World"}
router = APIRouter()
router.add_api_route('/api/v2/hello-world',
endpoint = HelloWorld().read_hello, methods=["GET"])
app.include_router(router)
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
لتشغيل خادم uvicorn واختبار نقطة نهاية واجهة برمجة تطبيقات hello-world، نفّذ ملف main.py عبر سطر الأوامر:
python main.py
يؤدي هذا إلى بدء تشغيل خادم التطوير على المنفذ 8000 كما هو محدد.
نظرًا لأن هذا طلب GET، يمكننا اختباره مباشرةً على أي متصفح ويب. فيما يلي النتيجة.
إرساء التطبيق
بعد ذلك، أنشئ ملف Dockerfile في المجلد الجذر لمشروعك. يمكنك القيام بذلك عن طريق إنشاء ملف جديد في VS Code وتسميته Dockerfile.
بمجرد إنشائها، اكتب الأوامر التالية لإنشاء صورة Docker:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "router.main:app", "--host", "0.0.0.0", "--port", "8000"]
الدفع إلى GitHub
توجه إلى حساب GitHub الخاص بك وانتقل إلى المستودعات. ابدأ مستودعًا جديدًا بالنقر على جديد في أعلى اليمين.
توجه إلى حساب GitHub الخاص بك وانتقل إلى المستودعات. ابدأ مستودعًا جديدًا بالنقر على جديد في أعلى اليمين.
إذا كنت قد دفعت شيفرتك بالفعل إلى GitHub، فأضف ملف Dockerfile إلى النسخة الموجودة على جهازك المحلي وأعد دفعها إلى مستودعك.
قم بتسمية مستودعك باسم وانقر فوق إنشاء مستودع في أسفل اليمين.
بعد ذلك، قم بتهيئة مستودع محلي باستخدام الأمر init كما هو موضح:
git init
تجاهل مجلد venv وملف .env الخاص بك باستخدام .gitignore لتجنب دفعهم إلى مستودعك. للقيام بذلك، قم بإنشاء ملف .gitignore في مجلد جذر مشروعك وأدخل المجلدات والملفات التي تريد تجاهلها، كما هو موضح أدناه.
قم بتشغيل الأوامر التالية عبر جهازك الطرفي واحدًا تلو الآخر لدفع الشيفرة البرمجية إلى مستودعك.
1. git add .
2. git commit -m "commit message"
3. git branch -m main
4. git remote add origin <URL of the created repository>
5. git push -u origin main
نشر التطبيق باستخدام حاوية Back4App
إذا لم تكن قد قمت بذلك بالفعل، فتأكد من إنشاء حساب Back4App جديد. لتسريع العملية، استخدم خيار تسجيل الدخول إلى Google أو GitHub .
بمجرد تسجيل الدخول، انقر على أداة إنشاء تطبيق جديد.
انتقل إلى الحاويات كخدمة.
في الصفحة التالية، انقر فوق استيراد GitHub Repo. امنح GitHub إذن GitHub لتفويض Back4App عندما يُطلب منك ذلك.
ضمن الوصول إلى المستودع في النموذج المفتوح، انقر فوق تحديد المستودعات. حدد المستودع الذي يحتوي على المشروع الذي تريد نشره وانقر فوق حفظ.
سيقوم Back4App بمزامنة المستودع المحدد تلقائيًا. بمجرد إعادة التوجيه إلى Back4App، انقر فوق تحديد على يمين مستودع GitHub المضاف. بعد ذلك، املأ حقل اسم التطبيق باسم التطبيق المفضل لديك.
إذا كان تطبيق FastAPI الخاص بك يحتوي على أسرار مقنعة داخل ملف .env، انقر فوق متغيرات البيئة لإدخال متغيرات البيئة الخاصة بك. انقر على إضافة متغير واكتب اسم المتغير الخاص بك باستخدام أحرف كبيرة.
تأكد من استخدام نفس اصطلاح التسمية مثل المتغيرات في ملف .env الخاص بمشروعك لتجنب أخطاء الأسماء.
تقوم هذه الخطوة بتشفير القيم المتغيرة وإضافتها إلى عملية النشر. أخيراً، انقر على إنشاء تطبيق لنشر تطبيق FastAPI الخاص بك.
يتم تشغيل مثيل النشر لتطبيق FastAPI كما هو موضح أدناه.
لعرض النسخة المباشرة من تطبيقك، انقر فوق عنوان URL على الشريط الجانبي الأيسر. يؤدي الانتقال إلى https://testapp-omisolaidowu.b4a.run/api/v2/hello-world، في هذه الحالة، إلى إرجاع الاستجابة المتوقعة.
الخاتمة
إن تطوير تطبيق باستخدام واجهة برمجة Python’s FastAPI مهمة واحدة. لكن نشره بسلاسة لخدمة العملاء شيء آخر.
بالإضافة إلى المساعدة في النشر الأسرع، فإن CaaS أقل تقنية. على الرغم من أنك رأيت كيفية نشر تطبيق FastAPI، إلا أن هذا ليس كل شيء.
قد ترغب في نشر التطبيق من جانب العميل على مثيل حاوية منفصل والاتصال بنقاط نهاية FastAPI باستخدام عنوان URL الذي تم إنشاؤه كعنوان URL أساسي.
إذا أعجبك هذا المقال، يُرجى الاطلاع على البرنامج التعليمي الخاص بنا حول كيفية نشر تطبيق Flask.
ما هو FastAPI؟
FastAPI هو إطار عمل ويب عالي الأداء لتطوير APIs RESTFul باستخدام Python.
كيف تقوم بنشر تطبيق FastAPI؟
– أنشئ صورة Docker لمشروعك باستخدام Dockerfile.
– دفع الكود إلى GitHub.
– سجل الدخول إلى حسابك في Back4App وأنشئ تطبيقًا جديدًا.
– قم بربط مثيل الحاوية بمستودع GitHub الذي يحتوي على المشروع المستهدف.
– نشر تطبيق FastAPI الخاص بك وعرض سجلات النشر في الوقت الفعلي.