مقدمة
عند تطوير تطبيقات بايثون، تبرز مكتبة FastAPI كخيارٍ مثالي لبناء حلول عالية الأداء. فهي توفر السرعة والبساطة ودعم البرمجة غير المتزامنة، مما يجعلها مثالية لتطوير تطبيقات حديثة وقابلة للتوسع. في هذا الدليل، سنرشدك خلال عملية إعداد تطبيق FastAPI مع قاعدة بيانات NoSQL. عندما يتعلق الأمر بتخزين البيانات وإدارتها، توفر قواعد بيانات NoSQL المرونة وقابلية التوسع، مما يجعلها خيارًا رائعًا للتطبيقات التي تحتاج إلى إدارة هياكل بيانات متنوعة ومعقدة.
المتطلبات الأساسية
- خادم يعمل بنظام أوبونتو مع مستخدم غير جذري يتمتع بصلاحيات sudo وجدار حماية نشط. .
- مقدمة إلى سطر أوامر لينكس
- قم بتشغيل الأمر sudo apt-get update في طرفية أوبونتو للتأكد من أن نظامك يحتوي على أحدث الإصدارات والتحديثات الأمنية للبرامج المتوفرة في المستودعات المُكوّنة على نظامك.
هذه التعليمات صالحة لأحدث إصدارات أوبونتو: أوبونتو 24.04، وأوبونتو 22.04، وأوبونتو 20.04. إذا كنت تستخدم إصدارًا من أوبونتو أقدم من أو يساوي 18.04، فننصحك بالترقية إلى أحدث إصدار، حيث لم يعد أوبونتو يدعم هذه الإصدارات.
الخطوة 1 - إعداد بيئة Python على جهازك
خلال هذا البرنامج التعليمي، سنستخدم حزمة python3 لتشغيل الأوامر. يأتي أحدث إصدار من أوبونتو مُثبّتًا عليه بايثون 3، لذا للتحقق من تثبيته، شغّل الأمر التالي:
python3 --version
إذا عاد الخطأ، فيمكنك تثبيت/إعادة تثبيت الحزمة عن طريق تشغيل:
sudo apt-get install python3
بعد ذلك، ستحتاج إلى تثبيت pip لتثبيت حزم Python وتبعياتها بأمان.
sudo apt-get install python3-pip
الخطوة الثانية - إنشاء بيئة افتراضية
إذا كنت تستخدم إصدار 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 الخاص بك و uvicorn وهو المطلوب لتشغيل تطبيق 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: يُحدد هذا الهيكل المدخلات المتوقعة لنقطة نهاية التنبؤ. في هذه الحالة، يكون عددًا عشريًا.
- بيانات الإدخال من نموذج Pydantic: يحدد هذا المدخل المتوقع لنقطة نهاية التنبؤ. في هذه الحالة، هو عدد عشري.
الخطوة 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 بيئة قوية ومرنة لبناء وتوسيع نطاق التطبيقات المدعومة بالذكاء الاصطناعي.









