FastAPIで始めるPython Web開発
FastAPIは、PythonでAPIを迅速に開発するためのモダンなフレームワークです。以下では、FastAPIを使用して基本的なCRUD(Create, Read, Update, Delete)アプリケーションを構築する方法を詳しく説明します。
FastAPIの基本
FastAPIは、Pythonの型ヒントを活用して、開発者が少ないコードで強力なAPIを構築できるように設計されています。これにより、開発速度が向上し、バグを減らすことができます。また、FastAPIは非同期処理をサポートしており、高速なパフォーマンスを実現します。
インストール
まず、FastAPIとASGIサーバーのuvicorn
をインストールします。
pip install fastapi uvicorn
プロジェクトのセットアップ
FastAPIプロジェクトをセットアップするために、ディレクトリ構造を以下のようにします。
fastapi-crud-example/
│ db.py
│ main.py
├─users
│ │ models.py
│ │ router.py
│ └─schemas.py
└─utils
dbutils.py
データベース接続
データベースにはSQLAlchemy
を使用します。以下はdb.py
の例です。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_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()
モデルとスキーマの定義
データベースモデルとPydanticスキーマを定義します。
モデル
users/models.py
でユーザーモデルを定義します。
from sqlalchemy import Column, Integer, String
from db import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
email = Column(String, unique=True, index=True)
スキーマ
users/schemas.py
でPydanticスキーマを定義します。
from pydantic import BaseModel
class UserBase(BaseModel):
name: str
email: str
class UserCreate(UserBase):
pass
class User(UserBase):
id: int
class Config:
orm_mode = True
CRUD操作の実装
users/router.py
でCRUD操作を実装します。
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from db import SessionLocal
from . import models, schemas
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = models.User(name=user.name, email=user.email)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
@router.get("/users/{user_id}", response_model=schemas.User)
def read_user(user_id: int, db: Session = Depends(get_db)):
db_user = db.query(models.User).filter(models.User.id == user_id).first()
if db_user is None:
raise HTTPException(status_code=404, detail="User not found")
return db_user
アプリケーションの起動
main.py
でFastAPIアプリケーションを起動します。
from fastapi import FastAPI
from users.router import router as user_router
from db import Base, engine
Base.metadata.create_all(bind=engine)
app = FastAPI()
app.include_router(user_router, prefix="/api/v1")
アプリケーションを起動するには、以下のコマンドを実行します。
uvicorn main:app --reload
テスト
FastAPIは自動的にSwagger UIを生成するため、ブラウザでhttp://127.0.0.1:8000/docs
にアクセスしてAPIをテストできます。これにより、エンドポイントの動作を簡単に確認できます。
このブログ記事を通じて、FastAPIを使用した基本的なCRUDアプリケーションの構築方法を学びました。FastAPIはその高速性と使いやすさから、PythonでのAPI開発に非常に適しています。ぜひ、実際のプロジェクトで試してみてください。