1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonのFast APIを学び忘れた方向けの超簡単なチュートリアル

Posted at

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開発に非常に適しています。ぜひ、実際のプロジェクトで試してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?