ホームページ  >  記事  >  バックエンド開発  >  FastAPI の基礎を理解する: FastAPI、Uvicorn、Starlette、Swagger UI、および Pydantic のガイド

FastAPI の基礎を理解する: FastAPI、Uvicorn、Starlette、Swagger UI、および Pydantic のガイド

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 22:01:03599ブラウズ

Understanding FastAPI Fundamentals: A Guide to FastAPI, Uvicorn, Starlette, Swagger UI, and Pydantic

FastAPI は、Python で API を構築するための最新の高性能 Web フレームワークであり、開発者は最小限の労力で強力で効率的なアプリケーションを作成できます。非同期プログラミングを念頭に置いて設計されているため、非常に高速で、複数のリクエストを同時に処理できます。 FastAPI を強化する主要なコンポーネントには、Uvicorn、Starlette、Swagger UI、Pydantic などがあります。このガイドでは、これらの各コンポーネントを調べ、それらが FastAPI でどのように組み合わされるかを、主要な概念を示すコード例とともに確認します。


1. FastAPI のコア

FastAPI は 2 つの主要な基盤に基づいて構築されています:

  • 非同期プログラミング: Python の async と await を活用することで、FastAPI は多くのリクエストを同時に処理できるため、同時実行性を必要とするアプリケーションを効率的に実行できます。
  • 型アノテーション: FastAPI は Python の型ヒントを使用して、リクエストとレスポンスのデータを自動的に検証およびシリアル化するため、開発がより迅速かつ安全になります。

その構造を理解するために、単純な FastAPI アプリから始めましょう:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

これは、{"Hello": "World"} の JSON 応答を返す単一のルート (/) を持つ基本的な FastAPI アプリケーションです。

このアプリを実行するには、非同期 Web アプリケーションを提供するように設計された ASGI サーバーである Uvicorn を使用します。


2. Uvicorn: ASGI サーバー

Uvicorn は、非同期コードの処理用に最適化された超高速 ASGI サーバーです。これは、受信した HTTP リクエストを処理し、これらのリクエストのライフサイクルを管理するため、FastAPI アプリケーションの実行に不可欠です。

Uvicorn で FastAPI アプリを実行するには、次のコマンドを使用します:

uvicorn main:app --reload
  • main:app は、Uvicorn が main.py ファイル内でアプリ インスタンスを探すように指定します。
  • --reload は開発中のホットリロードを有効にするため、変更を保存するたびにサーバーが自動的にリロードされます。

このコマンドを実行すると、Uvicorn が FastAPI アプリの提供を開始し、http://127.0.0.1:8000 でアクセスできるようになります。


3. Starlette: FastAPI の Web フレームワーク基盤

FastAPI は、ルーティング、ミドルウェア、WebSocket サポートなどのコア HTTP 操作を処理する軽量の ASGI フレームワークである Starlette 上に構築されています。 Starlette は、FastAPI が HTTP リクエストを管理するために使用する低レベルのツールを提供し、Web アプリケーションを構築するための安定したパフォーマンスの高い基盤となります。

FastAPI は Starlette のルーティング システムを利用して API エンドポイントを定義します。例:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

この例では:

  • @app.get("/items/{item_id}") は、パス パラメーター item_id を使用してルートを定義します。
  • FastAPI は、Starlette のルーティング システムとその型チェックおよび検証を統合することで、このパス パラメーター タイプ (ここでは int) を処理します。

Starlette では、CORS (Cross-Origin Resource Sharing)、要求ログ、カスタム認証の処理など、さまざまな操作用の ミドルウェア を追加することもできます。

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

Starlette のこの柔軟性により、FastAPI は高度に構成可能になり、開発者は必要に応じてカスタム ミドルウェアを簡単に追加できます。


4. Swagger UI: インタラクティブ API ドキュメント

FastAPI は、Swagger UI を使用してインタラクティブな API ドキュメントを自動的に生成します。このドキュメントはデフォルトで /docs にあり、開発者はブラウザから直接エンドポイントをテストできます。

これを実際に確認するには、FastAPI アプリを起動し、http://127.0.0.1:8000/docs にアクセスしてください。すべてのルート、そのパラメーター、および予期される応答をリストした対話型の Swagger UI が表示されます。

別のドキュメント インターフェイスである ReDoc も、デフォルトで /redoc に提供されており、API 仕様のより詳細なビューを提供します。


5. Pydantic: データの検証とシリアル化

FastAPI の最も強力な側面の 1 つは、データ検証に Pydantic を使用することです。 Pydantic モデルを使用すると、厳密な型制約と自動検証を使用してリクエスト データとレスポンス データの構造を定義できます。

例に Pydantic モデルを追加してみましょう:

uvicorn main:app --reload

このコード内:

  • Item モデルは BaseModel から継承し、name、price、is_offer の 3 つのフィールドを定義します。これらのフィールドには特定のデータ型と、is_offer.
  • のオプションのデフォルト値があります。
  • JSON データを使用してリクエストを /items/{item_id} に送信すると、FastAPI は Pydantic を使用してデータを項目モデルに対して検証し、可能であればデータ型を自動的に変換します。

/docs で Swagger UI を使用して次のようなリクエストを送信してみてください:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

FastAPI はデータを検証し、データが予期された型と一致しない場合は自動的にエラーを返します。たとえば、価格が文字列 (「20」など) として指定された場合、FastAPI は詳細な検証エラーで応答します。


6. すべてをまとめる

さらにルートを追加し、これまでに学習したことをすべて組み合わせて、アプリを拡張してみましょう:

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

このセットアップでは:

  • ルーティングとパラメータの処理: @app.get("/items/{item_id}") エンドポイントは、パス パラメータとクエリ パラメータ (例: q) を示します。
  • 例外処理: カスタム エラー応答 (項目が見つからない場合など) に HTTPException を使用します。
  • CORS: CORS ミドルウェアを使用すると、Web アプリのフロントエンドとバックエンドの通信に不可欠な、さまざまなドメインからリクエストを行うことができます。

アプリケーションの実行

このアプリケーションを実行するには、Uvicorn を使用します:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

http://127.0.0.1:8000/docs に移動して対話型ドキュメントを参照するか、cURLPostman などのツールを使用してさまざまなエンドポイントにリクエストを送信します。


まとめ

FastAPI は、非同期プログラミングのパフォーマンス上の利点と Python の型ヒントのシンプルさを組み合わせて、高速で使いやすく、運用アプリケーションに適したフレームワークを作成します。 Uvicorn、Starlette、Swagger UI、Pydantic を統合することにより、FastAPI は API 開発への驚くほど合理化されたアプローチを提供し、ラピッド プロトタイピングと運用グレードのアプリケーションの両方に最適な選択肢となります。

これらの中核となる基礎が整ったので、FastAPI の世界にさらに深く入り込み、スケーラブルで高性能なアプリケーションを構築する準備が整いました。

参照

  1. FastAPI ドキュメント
  2. Uvicorn ドキュメント
  3. スターレットのドキュメント
  4. ピダンチックなドキュメント
  5. Swagger UI ドキュメント

以上がFastAPI の基礎を理解する: FastAPI、Uvicorn、Starlette、Swagger UI、および Pydantic のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。