ویژگی تصویر

آموزش کار با FastAPI در پایتون

  /  پایتون   /  آموزش کار با FastAPI در پایتون
بنر تبلیغاتی الف

FastAPI یک فریمورک قدرتمند و سریع برای توسعه APIها در پایتون است که با استفاده از Python 3.7+ و توانمندی‌های Pydantic و Starlette، امکان ساخت APIهای مدرن و مستند شده را فراهم می‌کند. در این آموزش به بررسی مفاهیم کلیدی، نحوه استفاده از FastAPI و پیاده‌سازی عملی می‌پردازیم.

چرا از FastAPI استفاده کنیم؟

  • سرعت بالا: به دلیل استفاده از Starlette و Pydantic، FastAPI یکی از سریع‌ترین فریمورک‌های Python برای API است.
  • تولید خودکار مستندات: با استفاده از OpenAPI و Swagger UI، مستندات API به صورت خودکار تولید می‌شوند.
  • Validasyon و Serializasyon: Pydantic به طور پیش‌فرض برای اعتبارسنجی داده‌ها استفاده می‌شود.
  • Support Async/Await: سازگاری کامل با برنامه‌نویسی ناهمزمان (Asynchronous Programming).

نصب و راه‌اندازی اولیه

برای شروع کار با FastAPI، نیاز به نصب پکیج آن دارید:

pip install fastapi uvicorn

در اینجا uvicorn به عنوان سرور ASGI استفاده می‌شود. مثلاً برای اجرای یک برنامه ساده:

uvicorn main:app --reload

این دستور فایل main.py را اجرا کرده و تغییرات را به صورت زنده بارگذاری می‌کند.

ساخت یک API ساده با FastAPI

در اینجا یک برنامه ساده برای شروع آموزش ارائه می‌دهیم:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello World"}

در این کد، یک نمونه از FastAPI ایجاد شده است. سپس یک روت (route) به صورت GET با مسیر “/” تعریف شده است که یک پیام ساده برگرداند.

استفاده از مسیرها (Routes)

FastAPI از مفهوم path parameters و query parameters پشتیبانی می‌کند. به عنوان مثال:

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

این کد یک روت به نام /items/{item_id} ایجاد می‌کند که یک شناسه عددی (item_id) و یک پارامتر اختیاری (q) را دریافت می‌کند.

مدیریت داده‌ها با Pydantic

Pydantic برای اعتبارسنجی داده‌ها و تعریف مدل‌ها استفاده می‌شود. این مدل‌ها به صورت خودکار در مستندات API ظاهر می‌شوند:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.post("/items/")
def create_item(item: Item):
    return item

در این کد، یک مدل Item با فیلد‌های name, price, و is_offer تعریف شده است. سپس در روت POST، یک متد به نام create_item ایجاد شده که یک شیء از نوع Item را دریافت کرده و آن را بازگرداند.

استفاده از HTTP Status Codes

FastAPI به شما اجازه می‌دهد که کد وضعیت HTTP را مشخص کنید:

from fastapi import HTTPException

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id < 0:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item_id": item_id}

در این مثال، اگر شناسه منفی باشد، یک خطای 404 برگردانده می‌شود.

استفاده از Dependency Injection

FastAPI امکان استفاده از Dependency Injection را فراهم می‌کند:

from fastapi import Depends

def get_db():
    # ساختار پایگاه داده
    db = "fake_db"
    return db

@app.get("/items/")
def read_items(db: str = Depends(get_db)):
    return {"db": db}

در این کد، یک وابستگی (dependency) به نام get_db تعریف شده است. هر بار که روت /items/ فراخوانی می‌شود، این وابستگی فراخوانی می‌شود.

API Documentation خودکار با Swagger UI

FastAPI به صورت خودکار مستندات API را در دو محیط نمایش می‌دهد:

  • /docs: Swagger UI
  • /redoc: ReDoc

این امکانات برای تست و مستند کردن APIها بسیار مفید هستند.

بهینه‌سازی عملکرد با Async

FastAPI به صورت کامل از برنامه‌نویسی ناهمزمان پشتیبانی می‌کند:

@app.get("/async-items/{item_id}")
async def read_item_async(item_id: int):
    # فرض کنید این عمل یک API خارجی است
    return {"item_id": item_id}

در این مثال، با استفاده از async/await، کد به صورت ناهمزمان اجرا می‌شود.

مقایسه FastAPI با Flask و Django REST Framework

ویژگیFastAPIFlaskDjango REST Framework
سرعتبسیار سریعمتوسطکندتر
اعتبارسنجی دادهخودکار با Pydanticدستیخودکار
مستندات خودکاربلهنهبله
پشتیبانی از Asyncبلهنهمحدود

نکات مهم در استفاده از FastAPI

  • استفاده از Pydantic: مدل‌های داده را با استفاده از Pydantic تعریف کنید.
  • تجربه توسعه: به دلیل ساختار خودکار مستندات، توسعه APIها سریع‌تر و راحت‌تر است.
  • پشتیبانی از OpenAPI: امکان اتصال به ابزارهایی مثل Postman، Swagger و غیره وجود دارد.

نمونه پروژه کامل

در اینجا یک نمونه ساده از یک API کامل شامل CRUD عملیات است:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List

app = FastAPI()
items_db = []

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.get("/")
def read_root():
    return {"message": "Welcome to FastAPI"}

@app.post("/items/", response_model=Item)
def create_item(item: Item):
    items_db.append(item)
    return item

@app.get("/items/", response_model=List[Item])
def read_items():
    return items_db

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id >= len(items_db):
        raise HTTPException(status_code=404, detail="Item not found")
    return items_db[item_id]

این کد یک API ساده با عملیات GET و POST را ارائه می‌دهد. نسخه خروجی (response) از مدل Item استفاده می‌کند.

جمع‌بندی

FastAPI یک فریمورک پیشرفته و سریع برای توسعه APIها در پایتون است. با استفاده از قابلیت‌هایی مانند اعتبارسنجی خودکار، مستندات خودکار، پشتیبانی از Async و Dependency Injection، FastAPI به عنوان گزینه‌ای مناسب برای توسعه APIهای حرفه‌ای شناخته می‌شود.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: