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

0 الأسهم
0
0
0
0

مقدمة

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

اترك تعليقاً

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

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