مقدمة
عند تطوير تطبيقات بايثون، يُعد FastAPI الخيار الأمثل لبناء حلول عالية الأداء. فهو يوفر السرعة والبساطة ودعم البرمجة غير المتزامنة، مما يجعله مثاليًا لتطوير تطبيقات حديثة وقابلة للتطوير. سيرشدك هذا البرنامج التعليمي خلال إعداد تطبيق FastAPI باستخدام قاعدة بيانات NoSQL. توفر قواعد بيانات NoSQL مرونة وقابلية للتطوير عند تخزين البيانات وإدارتها، مما يجعلها موردًا ممتازًا للتطبيقات التي تحتاج إلى إدارة هياكل بيانات متنوعة ومعقدة.
المتطلبات الأساسية
- خادم يعمل بنظام أوبونتو مع مستخدم غير جذر بصلاحيات sudo وجدار حماية مُفعّل. للحصول على إرشادات حول كيفية إعداد هذا، يُرجى اختيار توزيعتك من هذه القائمة واتباع دليلنا "بدء استخدام الخادم". يُرجى التأكد من تشغيل إصدار مدعوم من أوبونتو.
- التعرف على سطر أوامر Linux للحصول على مقدمة أو تحديث حول سطر الأوامر، يمكنك مراجعة هذا الدليل حول Linux Command Line Primer.
- قم بتشغيل sudo apt-get update في محطة Ubuntu للتأكد من أن نظامك يحتوي على أحدث الإصدارات وتحديثات الأمان للبرامج المتوفرة من المستودعات التي تم تكوينها على نظامك.
الخطوة 1 - إعداد بيئة Python على جهازك
خلال هذا البرنامج التعليمي، سنستخدم حزمة python3 لتشغيل الأوامر. يأتي أحدث إصدار من أوبونتو مُثبّتًا عليه بايثون 3، لذا للتحقق من تثبيته، شغّل الأمر التالي:
python3 --version
إذا عاد الخطأ، فيمكنك تثبيت/إعادة تثبيت الحزمة عن طريق تشغيل:
sudo apt-get install python3
بعد ذلك، ستحتاج إلى تثبيت pip لتثبيت حزم Python وتبعياتها بأمان.
sudo apt-get install python3-pip
الخطوة 2 – إنشاء بيئة افتراضية
إذا كنت تستخدم إصدار Ubuntu < 24.04، فلن تحتاج إلى إنشاء بيئة افتراضية، ولكن من الأفضل أن تقوم بفصل تبعيات مشروعك.
بدءًا من Python 3.11 وpip 22.3، يوجد PEP 668 جديد ينص على أنه يجب وضع علامة "إدارة خارجية" على بيئات Python الأساسية، مما يعني أنه لا يمكنك استخدام pip بنجاح لتثبيت الحزم إلا إذا كنت تعمل في بيئة افتراضية.
في هذه الخطوة، ستُنشئ بيئة افتراضية لمشروعك، تُعزل تبعياته لتجنب أي تعارضات محتملة بين إصدارات الحزم المختلفة. شغّل مجموعة الأوامر التالية في الطرفية:
sudo apt-get install python3-venv
سيؤدي هذا إلى تثبيت حزمة venv المطلوبة لإنشاء بيئة افتراضية.
python3 -m venv fastapi-env
يُنشئ هذا الأمر بيئة افتراضية fastapi-env في مجلد العمل لديك. لبدء العمل داخل هذه البيئة، يجب تفعيلها.
source fastapi-env/bin/activateفي حالة التنفيذ الناجح، سوف ترى بادئة المحطة الطرفية على النحو التالي:
(fastapi-env) user@machine:~$
يمكنك الآن البدء في تثبيت التبعيات المطلوبة داخل هذه البيئة الافتراضية.
الخطوة 3 – تثبيت المكتبات والحزم المطلوبة
في هذه الخطوة، سوف تقوم بتثبيت بعض الحزم والمكتبات المطلوبة لمتابعة هذا البرنامج التعليمي بنجاح.
لنبدأ بتثبيت Fastapi، وهو أمر مطلوب لبناء تطبيق FastAPI الخاص بك، وUnicorn، وهو أمر مطلوب لتشغيل تطبيق FastAPI الخاص بك.
pip install fastapi uvicorn
في هذا البرنامج التعليمي، سنستخدم MongoDB كقاعدة بيانات NoSQL. للتفاعل مع MongoDB من داخل FastAPI، ستحتاج إلى تثبيت مُشغّل Python غير المتزامن لـ MongoDB.
pip install motor
الخطوة 4 - تثبيت وإعداد MongoDB على Ubuntu
لتثبيت MongoDB على جهاز Ubuntu، قم بتشغيل مجموعة الأوامر التالية في المحطة الطرفية:
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.listعند التنفيذ الناجح، يُعيد هذا المعامل صدى الصوت. الآن، نفّذ العملية بسرعة:
sudo apt-get update
يضمن هذا حصولك على أحدث التحديثات بمجرد إعداد مفاتيح MongoDB الخاصة بك.
بعد ذلك، ستحتاج إلى تثبيت اعتماد OpenSSL على نظامك، وهو أمر مطلوب لتثبيت MongoDB.
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.debعند التشغيل، سيُطلب منك إعادة تشغيل الخدمات. بعد إعادة التشغيل، ثبّت MongoDB باستخدام الأمر التالي:
sudo apt-get install -y mongodb
بدء وتفعيل خدمات MongoDB:
sudo systemctl start mongod
sudo systemctl enable mongodيمكنك التحقق من حالة خدمة MongoDB واختبار الاتصال عن طريق تشغيل الأوامر التالية:
sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'
الخطوة 5 - إنشاء تطبيق FastAPI
الخطوة التالية هي إنشاء تطبيق FastAPI. في مجلد العمل، أنشئ ملف database.py:
nano database.py
سيؤدي هذا إلى فتح محرر نصوص فارغ. اكتب هنا منطق اتصال قاعدة البيانات.
from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
client = AsyncIOMotorClient(MONGO_DETAILS)
db = client.mydatabase
collection = db.mycollectionبافتراض أن مجموعة قاعدة بياناتي ممتلئة ببعض البيانات، ستنشئ الآن ملف main.py الذي سيحمل منطق تطبيقك. في تطبيق FastAPI أدناه، يتم تعريف اتصال قاعدة البيانات باستخدام مسارات database.py للتنبؤ بالذكاء الاصطناعي. باستخدام هذه المسارات، يتم التحقق من صحة المدخلات.
nano main.py
في محرر النصوص، اكتب المنطق:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection
app = FastAPI()
# simple dataset and model
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegressions()
model.fit(x, y)
# define the Pydantic model for input validation
class InputData(BaseModel):
feature: float
# route_1 for predicting the output based on input feature
@app.post("/predict/")
async def predict(input_data: InputData):
try:
prediction = model.predict([[input_data.feature]])
return {"prediction": prediction[0]}
except Exception as ex:
raise HTTPException(status_code=400, detail=str(ex))
# route_2 to interact with MongoDB
@app.get("/items/")
async def get_item():
items = []
async for item in collection.find():
items.append(item)
return items
# route_3 to add a new item to MongoDB
@app.post("/items/")
async def create_item(item: dict):
new_item = await collection.insert_one(item)
created_item = await collection.fine_one({"_id": new_item.inserted_id})
return created_itemفيما يلي ملخص لما يفعله هذا البرنامج:
- نموذج الانحدار الخطي من sklearn: يتنبأ هذا النموذج بإخراج بناءً على ميزة الإدخال.
- بيانات الإدخال من نموذج Pydantic: يُحدد هذا الهيكل المدخلات المتوقعة لنقطة نهاية التنبؤ. في هذه الحالة، يكون عددًا عشريًا.
- مسارات MongoDB: تسمح لك المسارات /items/ وPOST /items/ باسترداد العناصر وإدراجها في مجموعة MongoDB الخاصة بك.
الخطوة 6 - تشغيل تطبيق FastAPI
لتشغيل هذا البرنامج بنجاح، تحتاج إلى تثبيت المكتبات والحزم المستخدمة في البرنامج.
pip install pydantic scikit-learn numpy
الآن استخدم الأمر التالي لتشغيل هذا البرنامج:
uvicorn main:app --reload
سيكون إخراج هذا الأمر على النحو التالي:
Output
INFO: Will watch for changes in these directories: ['/path/to/your/project']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [XXXXX] using statreload
INFO: Started server process [XXXXX]
INFO: Waiting for application startup.
INFO: Application startup complete.قام FastAPI بإنشاء توثيق تفاعلي لواجهة برمجة التطبيقات تلقائيًا باستخدام واجهة مستخدم Swagger. يمكنك الوصول إليه عبر الرابط http://127.0.0.1:8000/docs.
يمكنك استخدام أدوات مثل curl أو Postman لاستدعاء نقطة نهاية تتنبأ بقيمة بناءً على إدخالك.
curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'
الخطوة 7 [اختياري] - تشغيل التطبيق باستخدام Docker Compose
يمكنك وضع تطبيقك في حاويات وتشغيله باستخدام docker-compose. يُبسّط وضع تطبيقك في حاويات عملية النشر من خلال تسهيل نشره وتوسيع نطاقه وصيانته.
نتيجة
في هذا البرنامج التعليمي، تعلمت كيفية تشغيل تطبيق FastAPI بنجاح باستخدام MongoDB، وإنشاء تطبيق بسيط يعتمد على الذكاء الاصطناعي قادر على تخزين واسترجاع تنبؤات الإدخال.
يوفر الجمع بين FastAPI وقاعدة بيانات NoSQL بيئة قوية ومرنة لبناء وتوسيع نطاق التطبيقات المدعومة بالذكاء الاصطناعي.









