1. FastAPIとは何ですか?
FastAPI は、Python 用の最新の高性能 Web フレームワークであり、API を迅速かつ簡単に構築できるように設計されています。作成者 セバスティアン・ラミレス 2018 年、FastAPI は、その卓越したパフォーマンス、優れた開発者エクスペリエンス、強力な型ヒント システムのおかげで、すぐにバックエンド API で最も人気のある Python フレームワークになりました。
FastAPIはバックグラウンドで実行されます スターレット (ASGI フレームワーク) と使用 ピダンティック データ検証では、多くのベンチマークで Node.js や Go に匹敵する速度を実現します。
FastAPI を選択する理由
高性能: Starlette と async/await のおかげで、最速の Python フレームワークの 1 つ
タイプヒントネイティブ: 自動検証、シリアル化、ドキュメント化に Python 型ヒントを使用する
自動文書化: コードから Swagger UI と ReDoc を自動的に作成します。個別のドキュメントを作成する必要はありません。
開発者の経験: 優れたエディターのサポート、オートコンプリート、型チェックによりバグが軽減されます。
非同期ファースト: ネイティブの非同期/待機をサポートし、I/O バウンドのアプリケーションに適しています
標準ベース: OpenAPI (Swagger)、JSON スキーマ、OAuth2 標準に基づく
2. FastAPI と他のフレームワークを比較する
| 基準 | ファストAPI | ジャンゴ | フラスコ | ライトスター |
|---|---|---|---|---|
| 型システム | ネイティブ (ピダンティック) | オプション | オプション | ネイティブ (attrs/msgspec) |
| パフォーマンス | 非常に高い | 平均 | 平均 | 非常に高い |
| 非同期のサポート | ネイティブ | 部分的 (Django 5+) | フラスコ 2+ (限定) | ネイティブ |
| 自動ドキュメント | Swagger + ReDoc | DRF スペクタキュラー | フラスコ-RESTX | Swagger + ReDoc |
| ORM | SQLAlchemy/カメ | ジャンゴ ORM | SQLアルケミー | SQLアルケミー |
| 管理者パネル | SQL管理者/FastAPI管理者 | 内蔵 | Flask管理者 | コミュニティ |
| 学習曲線 | 低~中 | 中~高 | 低い | 平均 |
| コミュニティ | 非常に大きい (70k+ ⭐) | とても大きい | とても大きい | 開発中 |
| 適切な | API、マイクロサービス | フルスタック、CMS | MVP、小規模 API | API、エンタープライズ |
3. FastAPI アーキテクチャ
FastAPI は、次の 3 つの強固な基盤に基づいて構築されています。
┌──────────────────────────────────────────────┐
│ FastAPI Application │
├──────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Routes │ │ Deps │ │ Models │ │
│ │ (Path │ │ (DI │ │ (Pydantic│ │
│ │ Ops) │ │ System)│ │ V2) │ │
│ └──────────┘ └──────────┘ └───────────┘ │
│ │
├──────────────────────────────────────────────┤
│ Starlette (ASGI) │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │Middleware │ │ Routing │ │ WebSocket │ │
│ └──────────┘ └──────────┘ └───────────┘ │
├──────────────────────────────────────────────┤
│ Uvicorn / Hypercorn (Server) │
└──────────────────────────────────────────────┘
主な成分:
ユビコーン: ASGI サーバー、FastAPI アプリケーションを実行、HTTP/1.1 および WebSocket をサポート
スターレット: ルーティング、ミドルウェア、WebSocket、バックグラウンド タスクを提供する軽量の ASGI フレームワーク
ピダンティック: 型ヒントに基づいたデータ検証とシリアル化
オープンAPI: OpenAPI 3.1 標準に従って API ドキュメントを自動的に生成します
4. FastAPI エコシステム
FastAPI には、多くのサポート ライブラリを備えた充実したエコシステムがあります。
| フィールド | 図書館 | 説明 |
|---|---|---|
| ORM | SQLAlchemy、Tortoise-ORM、SQLModel | Python 用データベース ORM |
| 移住 | アレンビック | データベーススキーマの移行 |
| 認証 | python-jose、Passlib、Authlib | JWT、OAuth2、パスワードハッシュ |
| キャッシング | fastapi-cache2、Redis | 応答のキャッシュ |
| タスクキュー | セロリ、ARQ、SAQ | バックグラウンドタスクの処理 |
| テスト | pytest、httpx | テストフレームワークと非同期クライアント |
| 管理者 | SQL管理者、FastAPI管理者 | 管理者ダッシュボード |
| モニタリング | プロメテウス-fastapi-instrumentator | メトリクスとモニタリング |
5. FastAPI を使用した Hello World
最も単純な FastAPI アプリケーションを見てみましょう。
# main.py
from fastapi import FastAPI
app = FastAPI(
title="My First API",
description="Learning FastAPI from scratch",
version="1.0.0"
)
@app.get("/")
async def root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
アプリケーションを実行します。
# Cài đặt
pip install fastapi uvicorn
# Chạy development server
uvicorn main:app --reload
# Server sẽ chạy tại http://127.0.0.1:8000
# Swagger UI: http://127.0.0.1:8000/docs
# ReDoc: http://127.0.0.1:8000/redoc
わずか数行のコードで次のことが実現します。
- パス パラメーターを含む REST API エンドポイント (
アイテムID) は次のように自動的に検証されます。整数 - クエリパラメータはオプション (
q) タイプヒント付き - インタラクティブ API ドキュメント (Swagger UI)
- 代替ドキュメント (ReDoc)
- リクエスト/レスポンスのJSONスキーマ
6. WSGI と ASGI - ASGI が重要なのはなぜですか?
WSGI と ASGI の違いを理解することは、FastAPI が高速である理由を理解するための鍵となります。
WSGI (Web サーバー ゲートウェイ インターフェイス) - 従来型
# Flask (WSGI) - synchronous, blocking
@app.route("/data")
def get_data():
result1 = db.query("SELECT ...") # Block - đợi DB
result2 = requests.get("https://api.example.com") # Block - đợi HTTP
return jsonify(result1, result2)
# Tổng thời gian = time(query) + time(http_call)
ASGI (非同期サーバー ゲートウェイ インターフェイス) - 最新
# FastAPI (ASGI) - asynchronous, non-blocking
@app.get("/data")
async def get_data():
result1, result2 = await asyncio.gather(
db.query("SELECT ..."), # Non-blocking
httpx.get("https://api.example.com") # Non-blocking
)
return {"db": result1, "api": result2}
# Tổng thời gian = max(time(query), time(http_call))
ASGI を使用すると、FastAPI は多くのスレッドやプロセスを必要とせずに、数千の同時リクエストを処理できます。
7. FastAPI をいつ使用する必要がありますか?
FastAPI は次の場合に使用する必要があります。
- REST API または GraphQL API を構築する
- マイクロサービスアーキテクチャ
- リアルタイム アプリケーション (WebSocket、SSE)
- 機械学習モデルの提供
- IoTバックエンドサービス
- 同時実行性の高い I/O バウンドのアプリケーション
次の場合は、別のフレームワークを検討してください。
- サーバーレンダリングされた HTML を使用したフルスタック Web アプリ → ジャンゴ
- CMS、管理負荷の高いアプリケーション → ジャンゴ
- 迅速なプロトタイプ、シンプルな API → フラスコ
- msgspec で最大速度が必要 → ライトスター
8. コースのロードマップ
このシリーズでは、5 つのパートに分かれた 20 のレッスンを学習します。
- パート 1: 基礎 - Python の基礎、FastAPI の基礎、リクエスト/レスポンス
- パート 2: データベース - Pydantic、SQLAlchemy、Alembic、CRUD、リポジトリ パターン
- パート 3: セキュリティ - 認証、認可、OAuth2、セキュリティのベスト プラクティス
- パート 4: 上級者向け - ミドルウェア、WebSocket、バックグラウンド タスク、キャッシュ、非同期ディープ ダイビング
- パート 5: 制作 - クリーンなアーキテクチャ、テスト、Docker、CI/CD、デプロイメントとモニタリング
各レッスンには実践的なコード例が含まれており、シリーズの終わりまでに、本番環境に対応した FastAPI アプリケーションを構築するための十分な知識が得られます。
概要
FastAPI は、高いパフォーマンスと優れた開発者エクスペリエンスを組み合わせた、API を構築するための最新の Python フレームワークです。次の記事では、FastAPI に入る前に必要な Python の知識を確認します。