FastAPI به سرعت به عنوان یک چارچوب پیشرو برای ساخت APIها در پایتون ظهور کرده است، که مدیون عملکرد بالا، مستندسازی خودکار و نوعدهی قوی آن است. چه در حال مهاجرت از Flask باشید و چه پروژهای جدید از صفر شروع کنید، درک مکانیکهای اصلی FastAPI برای نوشتن کدی قابل نگهداری و مقیاسپذیر ضروری است.
مفاهیم پایه و راهاندازی
پایه و اساس هر برنامه FastAPI، نمونهای از کلاس `FastAPI` است. این نمونه به عنوان شیء اصلی برنامه عمل میکند که مسیریابی و پیکربندی را مدیریت میکند. برخلاف Flask که به طور گسترده از دکوراتورها برای همه چیز استفاده میکند، FastAPI از نوعدهی استاندارد پایتون برای تعریف طرحهای درخواست و پاسخ استفاده میکند. این رویکرد امکان پشتیبانی بهتر از ابزارها، از جمله تکمیل خودکار در IDEها و اعتبارسنجی خودکار را فراهم میکند.
برای شروع، باید چارچوب و یک سرور درجه تولید مانند Uvicorn را نصب کنید. FastAPI خود تنها یک کتابخانه استاندارد از پیادهسازیهای ASGI (رابط سرور ناهمزمان) است، اما به طور بینظیری با Uvicorn برای مدیریت درخواستهای همزمان جفت میشود. میتوانید وابستگیهای لازم را با استفاده از pip نصب کنید. پس از نصب، میتوانید یک ساختار برنامه پایه ایجاد کنید که به عنوان نقطه ورود برای درخواستهای HTTP شما عمل کند.
پیادهسازی اعتبارسنجی داده با Pydantic
یکی از بزرگترین نقاط قوت FastAPI، یکپارچگی آن با Pydantic است. Pydantic به شما امکان میدهد مدلهای داده را با استفاده از توضیحات نوع پایتون تعریف کنید که FastAPI از آنها برای اعتبارسنجی خودکار دادههای ورودی استفاده میکند. این بدان معناست که نیازی به نوشتن کدهای تکراری برای بررسی اینکه آیا کاربر یک عدد صحیح را جایی که یک رشته انتظار میرفت ارائه داده است، یا برای اطمینان از معتبر بودن یک آدرس ایمیل، ندارید.
با تعریف یک مدل Pydantic، شما یک قرارداد برای API خود ایجاد میکنید. به عنوان مثال، اگر در حال ساخت یک نقطه پایانی برای کاربر هستید، میتوانید یک طرح `UserCreate` را تعریف کنید. FastAPI به طور خودکار بدنه JSON درخواست را تجزیه کرده، آن را بر اساس طرح اعتبارسنجی میکند و در صورت نادرست بودن دادهها، یک خطای اعتبارسنجی دقیق ایجاد میکند. این کار باگها را کاهش میدهد و اطمینان حاصل میکند که منطق کسبوکار شما فقط با انواع دادههای تأیید شده سروکار دارد.
from pydantic import BaseModel, EmailStr
from typing import Optional
class UserBase(BaseModel):
username: str
email: EmailStr
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool = True
در این مثال، نوع `EmailStr` اطمینان حاصل میکند که ایمیل ارائه شده با یک الگوی خاص regex مطابقت دارد. اگر درخواستی با یک ایمیل نامعتبر وارد شود، FastAPI بلافاصله یک خطای 422 Unprocessable Entity با پیامی واضح بازگردانده و از فروپاشی برنامه یا پردازش دادههای بد جلوگیری میکند.
تزریق وابستگی و مسیریابی پیشرفته
FastAPI یک سیستم تزریق وابستگی را پیادهسازی میکند که هم قدرتمند و هم شهودی است. وابستگیها هر فراخوانیپذیری هستند که مقداری را که توسط نقطه پایانی شما نیاز است، برمیگردانند. این میتواند شامل جلسات پایگاه داده، احراز هویت کاربر فعلی یا تنظیمات پیکربندی باشد. با جدا کردن این نگرانیها، دستورات نقطه پایانی شما تمیز و متمرکز بر منطق کسبوکار باقی میمانند.
میتوانید یک وابستگی را به عنوان یک تابع ساده تعریف کرده و سپس آن را به عنوان یک پارامتر در مسیر خود درخواست کنید. FastAPI به طور خودکار ایجاد، اجرا و پاکسازی وابستگی را مدیریت میکند. به عنوان مثال، میتوانید یک وابستگی `get_db` ایجاد کنید که یک جلسه پایگاه داده را فراهم میکند. این جلسه سپس در نقاط پایانی شما تزریق میشود، که اطمینان حاصل میکند هر درخواست به یک اتصال پایگاه داده تازه و به درستی پیکربندی شده دسترسی دارد.
from fastapi import Depends, FastAPI
app = FastAPI()
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
return commons
این الگو بسیار قابل استفاده مجدد است. اگر نیاز به افزودن یک پارامتر جدید به تمام نقاط پایانی مرتبط با آیتمها داشته باشید، تنها کافی است تابع `common_parameters` را بهروزرسانی کنید. این کار اصول DRY (خودت را تکرار نکن) را ترویج میدهد و API شما را برای تست و نگهداری آسانتر میکند.
نتیجهگیری
FastAPI رویکردی مدرن، کارآمد و دوستدار توسعهدهنده برای ساخت REST APIها ارائه میدهد. با ترکیب سرعت پایتون ناهمزمان با ایمنی نوعدهی و اعتبارسنجی Pydantic، توسعهدهندگان میتوانند سیستمهای قدرتمندی با کد کمتر بسازند. مستندسازی خودکار چارچوب از طریق Swagger UI و ReDoc تجربه توسعهدهنده را بیشتر بهبود میبخشد و تست و یکپارچهسازی را بینقص میکند. با به کارگیری این شیوهها، خواهید یافت که نگهداری و مقیاسپذیری API شما به طور قابل توجهی قابل مدیریتتر میشود.