اگر دنبال یک فریمورک سریع، مدرن و سبک برای ساخت API هستی، FastAPI یکی از بهترین انتخابهاست! توی این آموزش، قدمبهقدم یه API کامل با FastAPI میسازیم که قابلیتهای زیر رو داره:
تعریف مدل دادهها
دریافت و ارسال داده با JSON
اتصال به دیتابیس SQLite
ساخت مسیرهای GET, POST, PUT, DELETE
مستندسازی خودکار با Swagger
اول باید کتابخونههای مورد نیاز رو نصب کنیم:
pip install fastapi uvicorn sqlalchemy
myapi/├── main.py├── models.py├── schemas.py├── database.py└── crud.py
۱. اتصال به دیتابیس - database.py
from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmaker, declarative_baseSQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)Base = declarative_base()
۲. تعریف مدلها - models.py
from sqlalchemy import Column, Integer, Stringfrom .database import Baseclass Item(Base):__tablename__ = "items"id = Column(Integer, primary_key=True, index=True)name = Column(String, index=True)description = Column(String)
۳. تعریف اسکیمای Pydantic - schemas.py
from pydantic import BaseModelclass ItemBase(BaseModel):name: strdescription: strclass ItemCreate(ItemBase):passclass Item(ItemBase):id: intclass Config:orm_mode = True
۴. عملیات CRUD - crud.py
from sqlalchemy.orm import Sessionfrom . import models, schemasdef get_items(db: Session):return db.query(models.Item).all()def create_item(db: Session, item: schemas.ItemCreate):db_item = models.Item(**item.dict())db.add(db_item)db.commit()db.refresh(db_item)return db_item
۵. اپلیکیشن FastAPI - main.py
from fastapi import FastAPI, Dependsfrom sqlalchemy.orm import Sessionfrom . import models, schemas, crudfrom .database import SessionLocal, engine, BaseBase.metadata.create_all(bind=engine)app = FastAPI()def get_db():db = SessionLocal()try:yield dbfinally:db.close()@app.get("/items/", response_model=list[schemas.Item])def read_items(db: Session = Depends(get_db)):return crud.get_items(db)@app.post("/items/", response_model=schemas.Item)def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):return crud.create_item(db, item)
اجرای پروژه
uvicorn main:app --reload
الان با رفتن به http://127.0.0.1:8000/docs میتونی مستندات API رو با Swagger ببینی و تست کنی!