Chuyển đến nội dung chính

レッスン 1: FastAPI の紹介 - 最新の Python フレームワーク

FastAPI とは何かを調べ、Django、Flask、Litestar と比較してください。 ASGI アーキテクチャ、非同期ファースト、タイプヒント、自動ドキュメント。エコシステムと実際の使用例。

💻 プログラミング — レッスン 1 レッスン 1: FastAPI の紹介 - フレームワーク 最先端のPython

Python FastAPI: 基本から高度まで

パート 1: Python の基礎と FastAPI

xdev.asia

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 + ReDocDRF スペクタキュラーフラスコ-RESTXSwagger + ReDoc
ORMSQLAlchemy/カメジャンゴ ORMSQLアルケミーSQLアルケミー
管理者パネルSQL管理者/FastAPI管理者内蔵Flask管理者コミュニティ
学習曲線低~中中~高低い平均
コミュニティ非常に大きい (70k+ ⭐)とても大きいとても大きい開発中
適切なAPI、マイクロサービスフルスタック、CMSMVP、小規模 APIAPI、エンタープライズ

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 には、多くのサポート ライブラリを備えた充実したエコシステムがあります。

フィールド図書館説明
ORMSQLAlchemy、Tortoise-ORM、SQLModelPython 用データベース ORM
移住アレンビックデータベーススキーマの移行
認証python-jose、Passlib、AuthlibJWT、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. パート 1: 基礎 - Python の基礎、FastAPI の基礎、リクエスト/レスポンス
  2. パート 2: データベース - Pydantic、SQLAlchemy、Alembic、CRUD、リポジトリ パターン
  3. パート 3: セキュリティ - 認証、認可、OAuth2、セキュリティのベスト プラクティス
  4. パート 4: 上級者向け - ミドルウェア、WebSocket、バックグラウンド タスク、キャッシュ、非同期ディープ ダイビング
  5. パート 5: 制作 - クリーンなアーキテクチャ、テスト、Docker、CI/CD、デプロイメントとモニタリング

各レッスンには実践的なコード例が含まれており、シリーズの終わりまでに、本番環境に対応した FastAPI アプリケーションを構築するための十分な知識が得られます。

概要

FastAPI は、高いパフォーマンスと優れた開発者エクスペリエンスを組み合わせた、API を構築するための最新の Python フレームワークです。次の記事では、FastAPI に入る前に必要な Python の知識を確認します。