مقدمهای بر FastAPI و پایگاه داده NoSQL
هنگام توسعه برنامههای کاربردی پایتون، FastAPI بهعنوان یک انتخاب ممتاز برای ساخت راهکارهای با عملکرد بالا مطرح میشود. این فریمورک سرعت، سادگی و پشتیبانی از برنامهنویسی async را ارائه میدهد که آن را برای توسعه برنامههای کاربردی مدرن و قابل scale مناسب میسازد.
در این آموزش، ما شما را با فرآیند راهاندازی یک برنامه کاربردی FastAPI با یک پایگاه داده NoSQL راهنمایی خواهیم کرد. در زمینه ذخیرهسازی و مدیریت دادهها، پایگاههای داده NoSQL قابلیت انعطافپذیری و مقیاس پذیری را ارائه میدهند که آنها را برای برنامههایی که نیاز به مدیریت ساختارهای دادهای متنوع و پیچیده دارند، ایدهآل میسازد.
پیشنیازها
قبل از شروع، شما باید مطمئن شوید که موارد زیر را دارید:
- یک سرور با سیستمعامل اوبونتو به همراه یک کاربر غیر-ریشه با دسترسیهای سودو و یک فایروال فعال. برای راهنمایی در نحوه راهاندازی این موارد، لطفاً از سیستم توزیع خود در لیست مرتبط انتخاب کنید و دستورالعملهای اولیه راهاندازی سرور ما را دنبال کنید. لطفاً اطمینان حاصل کنید که با یک [نسخه پشتیبانیشده](https://releases.ubuntu.com/) از اوبونتو کار میکنید.
- آشنایی با خط فرمان لینوکس.
- اجرای دستور
sudo apt-get update
در ترمینال اوبونتو برای اطمینان از بهروز بودن سیستم شما با جدیدترین نسخهها و بهروزرسانیهای امنیتی نرمافزارهای موجود از مخازن تنظیمشده بر روی سیستم شما.
این دستورالعملها برای جدیدترین نسخههای اوبونتو معتبر است: اوبونتو 24.04، اوبونتو 22.04، و اوبونتو 20.04. اگر شما از نسخههای اوبونتو <= 18.04 استفاده میکنید، ما توصیه میکنیم که به نسخهای جدیدتر ارتقاء یابید، زیرا اوبونتو دیگر پشتیبانی از این نسخهها را ارائه نمیدهد. این مجموعه راهنماها به شما در ارتقاء نسخه اوبونتو شما کمک خواهد کرد.
گام اول – راهاندازی محیط پایتون بر روی دستگاه شما
طی این آموزش، از بسته python3
برای اجرای دستورات استفاده خواهیم کرد. نسخههای اخیر اوبونتو با نصب پایتون 3 میآیند، بنابراین برای تأیید نصب آن، دستور زیر را اجرا کنید:
python3 --version
Code language: Python (python)
در صورتی که این دستور خطایی بازگرداند، شما میتوانید بسته را با اجرای دستور زیر نصب یا مجدداً نصب کنید:
sudo apt-get install python3
Code language: Bash (bash)
بعد از آن، شما نیاز دارید تا pip
را برای نصب بستههای پایتون و وابستگیهای آنها به شیوهای ایمن نصب کنید.
sudo apt-get install python3-pip
Code language: Bash (bash)
گام دوم – ایجاد محیط مجازی
اگر شما از نسخه اوبونتو < 24.04 استفاده میکنید، شما نیازی به ایجاد محیط مجازی ندارید اما انجام این کار بهعنوان یک تمرین خوب برای ایزوله کردن وابستگیهای پروژه شما محسوب میشود.
مرحله 2 – ایجاد محیط مجازی (Virtual Environment)
در این مرحله، شما یک محیط مجازی برای پروژهتان ایجاد خواهید کرد که وابستگیهای پروژهتان را از هم جدا کرده و از تعارضات احتمالی بین نسخههای متفاوت پکیجها جلوگیری میکند. دستورات زیر را در ترمینال اجرا کنید:
sudo apt-get install python3-venv
Code language: JavaScript (javascript)
این دستور پکیج مورد نیاز 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 شما، باید motor
که یک درایور اسنکرون پایتون برای MongoDB است را نصب کنید.
pip install motor
مرحله 4 – نصب و راهاندازی MongoDB روی اوبونتو
برای نصب MongoDB روی دستگاه اوبونتو خود، دستورات زیر را در ترمینال اجرا کنید:
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
Code language: Bash (bash)
پس از اجرای موفقیتآمیز، این دستور پارامتر echo
را بر میگرداند. اکنون، یک بروزرسانی سریع انجام دهید:
sudo apt-get update
Code language: Bash (bash)
این کار اطمینان حاصل میکند که پس از تنظیم کلیدهای MongoDB، آخرین بروزرسانیها را دریافت کنید.
بعدی، نیاز است که وابستگی openssl
را روی سیستم خود نصب کنید که برای نصب MongoDB لازم است.
<code data-shcb-language-name="bash">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</code>
Code language: Bash (bash)
پس از اجرا، از شما خواسته میشود که سرویسها را مجددا راهاندازی کنید.
پس از راهاندازی مجدد، MongoDB را با استفاده از دستور زیر نصب کنید:
sudo apt-get install -y mongodb
Code language: Bash (bash)
سرویسهای MongoDB را شروع و فعال کنید:
sudo systemctl start mongod
sudo systemctl enable mongod
Code language: Bash (bash)
میتوانید وضعیت سرویس MongoDB را بررسی کرده و اتصال را با اجرای دستورات زیر تست کنید:
sudo systemctl status mongod
<code data-shcb-language-name="bash">mongo --eval 'db
runCommand({connectionStatus: 1})'</code>
Code language: Bash (bash)
گام ۵ – ایجاد برنامه FastAPI
مرحله بعدی ایجاد یک برنامه FastAPI است.
در پوشهی کاری خود، فایلی به نام database.py
بسازید:
<code data-shcb-language-name="bash">nano database.py</code>
Code language: HTML, XML (xml)
این کار یک ویرایشگر متنی خالی را باز میکند.
شما باید منطق اتصال دیتابیس خود را در اینجا بنویسید.
from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
<code data-shcb-language-name="python">client = AsyncIOMotorClient(MONGO_DETAILS)db = client.mydatabasecollection = db.mycollection</code>
Code language: Python (python)
با فرض اینکه mycollection
در mydatabase
با دادههایی پر شده است، حالا شما یک فایل main.py
ایجاد میکنید که منطق برنامهی شما در آن قرار دارد.
در برنامهی FastAPI زیر، اتصال به دیتابیس با استفاده از database.py
برقرار شده و مسیرهایی برای پیشبینی هوش مصنوعی تعریف میشود.
با استفاده از این مسیرها، ورودیها اعتبارسنجی میشوند.
nano main.py
Code language: CSS (css)
در ویرایشگر متن، منطق را بنویسید:
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
<code data-shcb-language-name="python"># route_3 برای اضافه کردن یک آیتم جدید به MongoDB
@app.post("/items/")
async def create_item(item: dict):
new_item = await collection.insert_one(item)
created_item = await collection.find_one({"_id": new_item.inserted_id})
return created_item
</code>
Code language: Python (python)
در زیر توضیحی در مورد کارکردهای این برنامه آورده شده است:
- مدل رگرسیون خطی از sklearn: این مدل بر اساس یک ویژگی ورودی، خروجی پیشبینیشدهای تولید میکند.
- InputData از مدل Pydantic: این ساختار ورودی مورد انتظار برای نقطه پایانی پیشبینی را تعریف میکند. در این مورد، یک
float
.
- مسیرهای MongoDB: مسیرها `/items/` و `POST /items/` به شما اجازه میدهند تا مواردی را از مجموعه MongoDB خود بازیابی کنید یا در آن قرار دهید.
گام ششم – اجرای برنامه FastAPI
برای اینکه این برنامه با موفقیت اجرا شود، نیاز است کتابخانهها و بستههای مورد استفاده در برنامه نصب شوند:
pip install pydantic scikit-learn numpy
اکنون، برای اجرای این برنامه از دستور زیر استفاده کنید:
uvicorn main:app --reload
Code language: CSS (css)
خروجی این دستور خواهد بود:
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<code data-shcb-language-name="console">
</code>INFO: Application startup complete
Code language: HTML, XML (xml)
FastAPI به طور خودکار مستندات API تعاملی را با استفاده از Swagger UI تولید کرده است. شما میتوانید با مراجعه به آدرس http://127.0.0.1:8000/docs
به آن دسترسی پیدا کنید.
میتوانید از ابزارهایی مثل curl
یا Postman برای فراخوانی endpoint که یک مقدار را بر اساس ورودی شما پیشبینی میکند، استفاده کنید:
curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'
Code language: JavaScript (javascript)
گام هفتم [اختیاری] – اجرای برنامه با استفاده از Docker Compose
شما میتوانید برنامه خود را کانتینر (Containerize) کرده و با استفاده از docker-compose
آن را اجرا کنید. کانتینر برنامهتان فرآیند استقرار را به وسیله تسهیل استقرار، توسعه و نگهداری برنامه، بهینه میسازد. جهت تعریف برنامهتان به صورت Dockerfile، مراحل ذکر شده در بخش استقرار برنامه FastAPI با استفاده از Docker Compose را دنبال کنید.
نتیجهگیری
در این آموزش، شما نحوه راهاندازی موفقیتآمیز یک برنامه FastAPI با MongoDB را یاد گرفتید که یک برنامه ساده مبتنی بر هوش مصنوعی قادر به ذخیرهسازی و بازیابی پیشبینیهای ورودی میباشد.
ترکیب FastAPI و یک پایگاه داده NoSQL، محیطی قدرتمند و انعطافپذیر برای ساخت و مقیاسبندی برنامههای مبتنی بر هوش مصنوعی را فراهم میکند.
نظرات کاربران