كيفية إعداد تطبيق Fast API بقاعدة بيانات NoSQL

مقدمة

حين تقوم بتطوير تطبيقات بيثون، يبرز FastAPI كخيار رئيسي لبناء حلول ذات أداء عالٍ. يوفر السرعة والبساطة ودعم للبرمجيات التي تعمل بشكل استقنالي، مما يجعله مناسبًا لتطوير تطبيقات حديثة قابلة للتنمية.
في هذا التورية، سنقوم بتوجيهكم خلال عملية إنشاء تطبيق FastAPI مع قاعدة بيانات NoSQL. عندما يتعلق التخزين والإدارة البياناتية، توفر قواعد البيانات NoSQL المرونة والقابلية للتنمية، مما يجعلها أفضل مناسبة لتطبيقات التي تحتاج إلى التعامل مع هيكلات بيانات متنوعة ومعقدة.

المقادمة

قبل أن تبدأ، يجب أن تتأكد من أنك لديك ما يلي:

  • خوادم تعمل بالأوبونتوس ومستخدم غير رئيسي بواجود المسموح بالقدرات السياسية ومعاينة النظام الحمايي. لتوجيه كيفية ترتيب هذا الإعداد، قم باختيار توزيعكم من هذه القائمة وتتبع إرشادات تكوين الخوادم الأولية. ينبغي أن تعمل بنسخة مدعومة من Ubuntu.

  • اعتياد بسط الأوامر لينكس. من أجل إطلاع أو تحديث لبسط الأوامر، يمكنك زيارة هذا الدليل على موجه لبسط أوامر لينكس.

  • قم بتشغيل sudo apt-get update في محطم Ubuntu لتأكد من أن نظامك يمتلك أحدث الإصدارات وتحديثات الأمان للبرامج المتاحة من المستودعات المكونة في النظام الخاص بك.

هذه التعليمات مفروضة على أحدث إصدارات قمر Ubuntu: Ubuntu 24.04 و Ubuntu 22.04 و Ubuntu 20.04. إذا كنت تستخدم إصدار Ubuntu <= 18.04، نوعا ما ن recommentك تحديث لإصدار أحدث لأن Ubuntu لم يعد يقدم دعم لهذه الإصدارات. هذه مجموعة من المرشدات ستساعدك في ترقية إصدارك للUbuntu.

خطوة 1 – إنشاء بيئة Python على جهازك

خلال هذا التورية، سنستخدم حزمة python3 لتشغيل الأوامر. يأتي أحدث إصدارات Ubuntu مع تثبيت Python 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

هذه الأمرة ست Installs الحزم المطلوب venv لإنشاء بيئة افتراضية.

python3 -m venv fastapi-env

ستنشأ بيئة افتراضية fastapi-env بداخل دليلك العملي. للبدء في العمل داخل هذه البيئة، يجب أن تفعلها.

source fastapi-env/bin/activate

وبعد التنفيذ الناجح، سترى المحاور التي تأتي مع تقاطع مثل هذا:

(fastapi-env) user@machine:~$

الآن، يمكنك بدء تثبيت الاحتياجات التامينية داخل هذه البيئة الافتراضية.

خطوة 3 – تثبيت المكتبات والحزم المطلوبين

في هذه الخطوة، ستقوم بتثبيت بعض الحزم والمكتبات التي تحتاج للقيام بهذا التوريتال بنجاح.

لنبدأ بتثبيت fastapi الذي يتوجب تثبيته لبناء تطبيقك الفاستاPI و uvicorn الذي يتوجب تثبيته لتشغيل التطبيق الفاستاPI.

pip install fastapi uvicorn

في هذا التورية سنستخدم MongoDB كقاعدة بيانات NoSQL. للتفاعل مع MongoDB من خلال FastAPI الخاص بك، يتوجب تثبيت motor الذي هو مُقود بيانات MongoDB بتعامل استقراري للPython.

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

بعد تنفيذ الأوامر بنجاح، يمكنك أن تستعيد المادة echo المدعومة. الآن قم بإجراء مرة سريعة:

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

هذا يفتح محرر نص فارغ. قم بكتابة منطقة اتصالك بالبيانات هنا.

database.py
from motor.motor_asyncio import AsyncIOMotorClient

MONGO_DETAILS = "mongodb://localhost:27017"

client = AsyncIOMotorClient(MONGO_DETAILS)

db = client.mydatabase

collection = db.mycollection

ما إذا كان mycollection من mydatabase مليء ببعض البيانات، فإنك ستقوم بإنشاء main.py الذي يحتوي على منطقة تطبيقك. في تطبيق FastAPI التالي، يتم إنشاء اتصال بالبيانات باستخدام database.py وتم تعريف مسارات التنبؤ باستخدام التعامل مع MongoDB. ومن خلال هذه المسارات، يتم تمرير المعلومات المدمجة.

nano main.py

في المحرر النصي، قم بكتابة المنطقة:

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()

# مجموعة بسيطة ونموذج
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegressions()
model.fit(x, y)

# تعريف نموذج Pydantic لتحديد الدخول
class InputData(BaseModel):
  feature: float

# مسار route_1 لتنبؤ بالنتيجة وفقاً للخصائص الدخلية
@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 للتفاعل مع MongoDB
@app.get("/items/")
async def get_item():
  items = []
  async for item in collection.find():
    items.append(item)
  return items

# مسار route_3 لإضافة عنصر جديد إلى 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

هذا تفسير تفصيلي لما يفعل هذا التطبيق:

  • نموذج Linear Regression من sklearn: هذا النموذج يتم تنبؤ بالنتيجة وفقاً لخصائص دخلية واحدة.
  • InputData من Pydantic Model: هذا يحدد الهيكل التي تتوقعه للبيانات الدخولية لنقطة النهاية التنبؤية. في هذه الحالة، إنه float.
  • مسارات MongoDB: المسارات /items/ و POST /items/ تسمح لك بإسترجاع وإدراج العناصر في مجموعة MongoDB الخاصة بك.

الخطوة 6 – تشغيل FastAPI Application

لتشغيل هذا التطبيق بنجاح، عليك تثبيت المكتبات والحزم المستخدمة في التطبيق.

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 UI. يمكنك الوصول إليها عن طريق التنقل إلى 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. وحدة تطبيقك تسهم في توزيع التطبيق بجعل تطبيقك أسهل على الإطلاق للتنفيذ والتنمية وال mantenimiento. لتعريف تطبيقك كوانتوميرفاً، اتبع الخطوات المذكورة في تنفيذ تطبيق FastAPI بواسطة Docker Compose.

ختام

في هذه الدرسة، تعلمت كيفية تأسيس تطبيق FastAPI مع MongoDB، وقد أنشأت تطبيق بسيط يقوم بتخزين واسترجاع التنبؤات الإدخالية.

توازن مادينة FastAPI وقاعدة بيانات NoSQL يوفر بيئة قوية ومرنة لبناء وتنمية تطبيقات قادرة على التنبؤ الذاتي.

Source:
https://www.digitalocean.com/community/tutorials/set-up-fastapi-app-with-nosql-db