FastAPI:Pythonで高速なWeb APIを構築するためのフレームワーク

FastAPIは、Pythonで高速かつ高性能なWeb APIを構築するためのモダンなフレームワークです。非同期プログラミングを活用し、高いパフォーマンスを実現しながら、簡潔でわかりやすいコードを書けることが特徴です。FastAPIの基本的な使い方と具体的な例を紹介します。

FastAPIの基本機能

  1. 高性能: FastAPIは、非同期処理により高性能なAPIを実現します。特に、複数の同時リクエストを効率的に処理できます。
  2. 簡潔なコード: Pythonの型ヒントを活用し、入力バリデーションや自動ドキュメント生成が簡単に行えます。
  3. 自動ドキュメント生成: Swagger UIやReDocによるAPIドキュメントが自動的に生成され、開発者にとって非常に便利です。
  4. 非同期処理: asyncioと組み合わせて、非同期処理をサポートしており、高速なI/O操作が可能です。

FastAPIのインストール

まず、FastAPIとASGIサーバーのuvicornをインストールします。

pip install fastapi uvicorn

例題1: 基本的なFastAPIアプリケーションの作成

最初に、基本的なFastAPIアプリケーションを作成し、簡単なエンドポイントを実装します。

アプリケーションの作成以下の内容をmain.pyとして保存します。このアプリケーションは、ルートパスにアクセスすると「Hello, World!」を返します。

from fastapi import FastAPI

app = FastAPI()

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

アプリケーションの実行uvicornを使ってアプリケーションを起動します。

uvicorn main:app --reload

--reloadオプションを使用すると、コードの変更があるたびに自動的にサーバーが再起動されます。

APIのアクセスブラウザでhttp://127.0.0.1:8000/にアクセスすると、以下のようなJSONレスポンスが返されます。

{
    "message": "Hello, World!"
}

    例題2: パスパラメータとクエリパラメータの使用

    次に、パスパラメータとクエリパラメータを使用して、動的なレスポンスを生成する方法を示します。

    パスパラメータの使用パスパラメータを使用して、動的なURLに対応するエンドポイントを定義します。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/items/{item_id}")
    async def read_item(item_id: int):
        return {"item_id": item_id}

    このコードでは、/items/{item_id}にアクセスすると、item_idが動的にレスポンスに含まれます。たとえば、http://127.0.0.1:8000/items/42にアクセスすると、以下のようなJSONレスポンスが返されます。

    {
        "item_id": 42
    }

    クエリパラメータの使用クエリパラメータを使用して、追加の情報をAPIに提供する方法を示します。

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/items/")
    async def read_item(item_id: int, q: str = None):
        if q:
            return {"item_id": item_id, "q": q}
        return {"item_id": item_id}

    このコードでは、クエリパラメータqが指定された場合、その値をレスポンスに含めます。たとえば、http://127.0.0.1:8000/items/?item_id=42&q=search_termにアクセスすると、以下のようなJSONレスポンスが返されます。

    {
        "item_id": 42,
        "q": "search_term"
    }

      例題3: POSTリクエストとデータのバリデーション

      次に、POSTリクエストを受け取り、データのバリデーションを行う方法を示します。

      Pydanticモデルの定義データバリデーションにPydanticモデルを使用します。

      from fastapi import FastAPI
      from pydantic import BaseModel
      
      app = FastAPI()
      
      class Item(BaseModel):
          name: str
          description: str = None
          price: float
          tax: float = None
      
      @app.post("/items/")
      async def create_item(item: Item):
          return item

      POSTリクエストの送信http://127.0.0.1:8000/items/に対して、JSON形式のデータをPOSTリクエストで送信します。たとえば、以下のデータを送信します。

      {
          "name": "Sample Item",
          "description": "This is a sample item",
          "price": 12.5,
          "tax": 1.5
      }

      すると、送信したデータがそのままレスポンスとして返されます。

        例題4: 非同期処理の実装

        FastAPIは、非同期処理をサポートしており、I/Oバウンドな操作を効率的に処理できます。

        非同期処理を行う関数の定義非同期にデータを取得し、それを返す関数を定義します。

        import asyncio
        from fastapi import FastAPI
        
        app = FastAPI()
        
        async def fetch_data():
            await asyncio.sleep(2)
            return {"data": "Fetched data"}
        
        @app.get("/data/")
        async def get_data():
            data = await fetch_data()
            return data

        このコードでは、/data/にアクセスすると、2秒間の待機の後にデータが返されます。非同期処理により、他のリクエストが待機せずに処理されるため、全体の効率が向上します。

          結論

          FastAPIは、Pythonで高速なWeb APIを構築するための非常に強力なフレームワークです。FastAPIの非同期処理機能や型ヒントを活用した自動ドキュメント生成は、開発効率とパフォーマンスを両立させるための重要な要素です。基本的なGETリクエストの実装から、POSTリクエストでのデータバリデーション、非同期処理の活用まで、FastAPIの理解と適用は、現代のWeb開発において非常に有用です。

          タイトルとURLをコピーしました