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?

FastAPIのスキーマとモデル、どっちがどっち?となる自分のためのメモ。

1
Last updated at Posted at 2026-07-18

ソースではBaseModelを継承するけど概念としてはスキーマってことらしい

FastAPIの勉強中です。

  • スキーマ(Schema): APIの入出力のための定義(Pydantic用)
    📥 リクエストモデル(入力): クライアントからのデータ検証(バリデーション)用
    📤 レスポンスモデル(出力): クライアントへのデータ返却(フィルタリング・型変換)用
  • モデル(Model): DBのための定義(SQLAlchemyやSQLModelなどORM用)

クライアントからのリクエストが届いてからデータベースへアクセスし、レスポンスが返却されるまでの処理フローをシーケンス図で整理してみました。

処理フロー(リクエスト → DB → レスポンス)

  • Uvicorn:クライアントとAppの間に位置するWebサーバー(ASGIサーバー)
  • App: FastAPIのメインインスタンス(main.py の app)
  • Router: ルーティングを振り分ける APIRouter
  • Endpoint: スキーマ(Pydantic)によるバリデーションを行う個別の関数
    例)@router.post("/users")

クリーンアーキテクチャ(Clean Architecture)を採用しているプロジェクトの場合

クリーンアーキにおける4つの定義の役割

用語 クリーンアーキでの位置づけ 役割・依存関係
リクエスト / レスポンスモデル
(Pydantic)
DTO (Data Transfer Object)
※Presentation層
外界(クライアント)とのデータのやり取り専用。バリデーションやレスポンスのフィルタリングを行う。
エンティティ (Entity)
(純粋なPythonクラス/非ORM)
Domain Model
※Domain (UseCase)層
システムの中心(コア)。 データベースやフレームワークの都合(SQLAlchemyなど)を一切排除した、純粋なビジネスルールとデータ構造を持つ。
ORMモデル
(SQLAlchemyなど)
Data Model
※Infrastructure層
データベースのテーブル構造と1対1で対応する定義。エンティティのデータをDBに保存・取得するためだけに使う。
  • 📥 入力(リクエスト時):
    Pydantic(リクエストDTO) ➔ Domainエンティティ ➔ ORMモデル
  • 📤 出力(レスポンス時):
    ORMモデル ➔ Domainエンティティ ➔ Pydantic(レスポンスDTO)

参考リンク

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?