كيفية تشغيل تطبيق API سريع باستخدام قاعدة بيانات NoSQL

0 الأسهم
0
0
0
0

مقدمة

عند تطوير تطبيقات بايثون، يُعد 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 بيئة قوية ومرنة لبناء وتوسيع نطاق التطبيقات المدعومة بالذكاء الاصطناعي.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً