کتابخانه fastapi در پایتون
کتابخانه FastAPI یکی از جدیدترین و قدرتمندترین فریمورکهای زبان پایتون برای توسعه APIهای مدرن است. این کتابخانه با تمرکز بر سرعت، سادگی و استفاده از تایپها (type hints) طراحی شده است و به کمک آن میتوان برنامههای تحت وب با عملکرد بسیار بالا نوشت. در این مقاله، با ساختار، مفاهیم کلیدی، نحوه پیادهسازی، و بهترین شیوههای کدنویسی در FastAPI آشنا میشویم.
FastAPI چیست؟
FastAPI یک فریمورک متنباز (Open Source) است که برای ساخت RESTful APIها و سرویسهای وب در پایتون طراحی شده است. این فریمورک بر پایه Starlette (برای بخشهای asynchronous) و Pydantic (برای اعتبارسنجی دادهها) ساخته شده است.
ویژگیهای کلیدی FastAPI
- سرعت بالا: سرعت پردازش FastAPI در سطح فریمورکهایی مانند Node.js و Go است.
- استفاده از تایپها: پشتیبانی از type hints باعث میشود خطاها سریعتر شناسایی شوند و مستندات بهصورت خودکار تولید شوند.
- تولید خودکار مستندات: مستندات OpenAPI و Swagger بهصورت خودکار ایجاد میشوند.
- پشتیبانی از async و await: FastAPI از async I/O برای مدیریت درخواستهای همزمان پشتیبانی میکند.
- امنیت بالا: دارای ابزارهای داخلی برای احراز هویت، JWT و OAuth2 است.
نصب FastAPI و Uvicorn
برای اجرای FastAPI نیاز به یک ASGI سرور مانند Uvicorn داریم. نصب آنها بهصورت زیر انجام میشود:
pip install fastapi uvicorn
پس از نصب، میتوانید پروژه خود را ایجاد کنید. فایل اصلی معمولاً main.py نام دارد.
ایجاد اولین API با FastAPI
در مثال زیر یک API ساده برای نمایش پیام “Hello World” ایجاد میکنیم:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello World"}
در این کد، ابتدا شیء app از کلاس FastAPI ساخته میشود. سپس با استفاده از دکوراتور @app.get یک مسیر (endpoint) تعریف میکنیم. وقتی کاربر به مسیر اصلی (/) درخواست میفرستد، پاسخ JSON بازگردانده میشود.
اجرای برنامه
uvicorn main:app --reload
گزینه --reload باعث میشود با هر تغییر در کد، سرور بهصورت خودکار ریاستارت شود. پس از اجرای دستور، با مراجعه به آدرس http://127.0.0.1:8000 میتوانید نتیجه را ببینید.
کار با مسیرها (Routes) در FastAPI
FastAPI از متدهای مختلف HTTP مانند GET، POST، PUT و DELETE پشتیبانی میکند. در مثال زیر چند مسیر مختلف پیادهسازی میکنیم:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def read_user(user_id: int):
return {"user_id": user_id}
@app.post("/users/")
def create_user(name: str, age: int):
return {"name": name, "age": age}
در این مثال، مسیر اول از پارامتر مسیر (path parameter) استفاده میکند و مسیر دوم از پارامترهای query برای ایجاد کاربر جدید.
مدیریت دادهها با Pydantic
یکی از نقاط قوت FastAPI استفاده از Pydantic برای مدیریت دادهها و اعتبارسنجی است. شما میتوانید مدلهایی برای دادهها تعریف کنید تا درخواستها بهصورت خودکار بررسی شوند.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post("/users/")
def create_user(user: User):
return {"message": f"User {user.name} created successfully!"}
در اینجا، هر درخواستی که به مسیر /users/ ارسال شود، باید شامل دادههایی مطابق با مدل User باشد. در غیر این صورت، FastAPI بهصورت خودکار خطای 422 (Unprocessable Entity) برمیگرداند.
توضیح درباره Type Hints و مزایای آن
Type Hints در پایتون به FastAPI کمک میکند تا دادهها را اعتبارسنجی و مستندات Swagger را ایجاد کند. مثلاً وقتی مینویسید user_id: int، FastAPI میداند که ورودی باید عدد صحیح باشد.
مزایای استفاده از Type Hints:
- کاهش خطاهای زمان اجرا
- بهبود خوانایی کد
- ایجاد مستندات خودکار
- افزایش سازگاری با ابزارهای IDE
مدیریت خطاها در FastAPI
FastAPI امکان مدیریت استثناها (Exception Handling) را بهشکل حرفهای فراهم میکند. میتوانید استثناهای سفارشی ایجاد کرده و پاسخ مناسب برای کلاینت بفرستید.
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}
در این مثال، اگر مقدار item_id برابر صفر باشد، خطای ۴۰۴ با جزئیات مشخص به کاربر بازگردانده میشود.
مستندات خودکار (Swagger و ReDoc)
یکی از ویژگیهای جذاب FastAPI این است که بهصورت خودکار مستندات API را تولید میکند. کافی است به یکی از مسیرهای زیر مراجعه کنید:
این صفحات به توسعهدهندگان اجازه میدهند تا بدون نوشتن حتی یک خط کد اضافی، API را تست و مستند کنند.
پشتیبانی از عملیات غیرهمزمان (Asynchronous)
FastAPI بهصورت کامل از async و await پشتیبانی میکند. این قابلیت برای برنامههایی که درخواستهای زیادی بهصورت همزمان دریافت میکنند، بسیار مفید است.
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/wait/")
async def wait_example():
await asyncio.sleep(2)
return {"message": "Done after 2 seconds!"}
در این مثال، مسیر /wait/ بهصورت غیرهمزمان دو ثانیه صبر میکند و سپس پاسخ میدهد، بدون اینکه سایر درخواستها را مسدود کند.
اتصال به پایگاه داده در FastAPI
برای اتصال به پایگاه داده، میتوانید از ORMهایی مانند SQLAlchemy یا Tortoise ORM استفاده کنید. در اینجا مثالی ساده با SQLAlchemy آوردهایم:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
در این کد، پایگاه داده SQLite ایجاد شده و مدل User برای ذخیره اطلاعات کاربران تعریف میشود. میتوانید این ساختار را در FastAPI برای عملیات CRUD بهکار ببرید.
بهترین شیوههای کدنویسی با FastAPI
- استفاده از مدلهای Pydantic برای اعتبارسنجی ورودیها
- تفکیک فایلها در پوشههای جداگانه مانند
routers،schemas،models - استفاده از
async defدر صورت نیاز به عملکرد بالا - نوشتن تستهای واحد با pytest
- فعالسازی CORS در برنامههای فرانتاند و بکاند مشترک
مقایسه FastAPI با فریمورکهای دیگر
| ویژگی | FastAPI | Flask | Django |
|---|---|---|---|
| سرعت | بسیار بالا (async) | متوسط | پایینتر در APIها |
| پشتیبانی از async | بله | خیر (در نسخه کلاسیک) | محدود |
| تولید مستندات خودکار | بله | خیر | بهصورت دستی |
| مناسب برای | APIهای مدرن و سریع | پروژههای سبک | وباپلیکیشنهای پیچیده |
جمعبندی
FastAPI یکی از بهترین انتخابها برای توسعهدهندگان پایتون در حوزهی API است. ترکیب سرعت، امنیت، و تایپمحور بودن، آن را به گزینهای ایدهآل برای ساخت سیستمهای مقیاسپذیر تبدیل کرده است. با رعایت اصول معماری، تستنویسی، و مدیریت صحیح استثناها، میتوانید از FastAPI برای ساخت پروژههای حرفهای استفاده کنید.
آیا این مطلب برای شما مفید بود ؟




