Python開発入門49 FastAPIの使い方

Python

はじめに

PythonのFastAPIは、Web APIを高速かつ効率的に開発するためのモダンなフレームワークです。型ヒントを活用したシンプルで直感的な設計と、高速な動作が特徴で、非同期処理にも対応しています。

この記事では、FastAPIの基本的な使い方、Web APIの作成方法、さらに高度な応用までをわかりやすく解説します。

FastAPIとは

FastAPIの概要

FastAPIは、Pythonで高速なWeb APIを開発するためのフレームワークで、以下の特徴を持っています:

  • 高速なパフォーマンス
    非同期I/O(asyncio)を活用し、高速なリクエスト処理が可能。
  • 型ヒントを活用
    Pythonの型ヒントを利用することで、堅牢でメンテナンスしやすいコードを実現。
  • 自動ドキュメント生成
    OpenAPIとJSON Schemaに基づいたAPIドキュメントが自動生成されます。

FastAPIの主な特徴

  1. 高いパフォーマンス
    Node.jsやGoに匹敵するパフォーマンスを発揮します。
  2. 直感的なコーディング
    型ヒントやデコレーターを活用して、シンプルかつ明確なコードを書くことができます。
  3. 優れた開発者体験
    自動生成されるAPIドキュメントで開発がスムーズ。
  4. 非同期処理対応
    asyncioを活用した非同期APIの構築が可能です。

FastAPIのインストールとセットアップ

FastAPIのインストール

以下のコマンドでFastAPIをインストールします:

pip install fastapi uvicorn

補足:
uvicornはASGIサーバーで、FastAPIアプリケーションを起動するために必要です。

インストール確認

以下のコードを実行して、FastAPIが正しくインストールされているか確認します:

import fastapi
print(fastapi.__version__)

FastAPIアプリケーションの基本構造

FastAPIアプリケーションは、以下のコンポーネントで構成されます:

  1. アプリケーションの作成
  2. ルーティングの定義
  3. リクエストとレスポンスの処理
  4. アプリケーションの起動

基本構造の例

以下は、FastAPIアプリケーションの基本的なコード例です。

from fastapi import FastAPI

app = FastAPI()

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

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

説明:

  1. アプリケーションの作成
    FastAPI()でアプリケーションを作成します。
  2. ルート定義
    @app.get("/")でルート/に対するGETリクエストを定義します。
  3. 非同期ハンドラー
    async defを使い、非同期処理を定義します。
  4. アプリの起動
    uvicornでアプリケーションを起動します。

FastAPIの主要機能

パスパラメータ

URLパスから動的な値を取得できます。

例:パスパラメータの使用
@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

アクセス例:

http://localhost:8000/items/123

クエリパラメータ

URLに付加されたクエリ文字列を取得できます。

例:クエリパラメータの使用
@app.get("/search/")
async def search_items(q: str = "default"):
    return {"query": q}

アクセス例:

http://localhost:8000/search/?q=FastAPI

リクエストボディ

POSTリクエストのJSONデータを受け取ることが可能です。

例:リクエストボディの処理
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

リクエスト例:

{
    "name": "Apple",
    "price": 1.2
}

レスポンスモデル

Pydanticモデルを使用してレスポンスの型を定義できます。

例:レスポンスモデルの使用
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
    return {"name": "Apple", "price": 1.2}

自動生成されるAPIドキュメント

FastAPIは、Swagger UIとReDocによる自動ドキュメント生成をサポートしています。

アクセス方法:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

FastAPIの応用例

RESTful APIの構築

FastAPIは、CRUD操作を含むRESTful APIの構築に最適です。

items = {}

@app.post("/items/")
async def create_item(name: str, price: float):
    item_id = len(items) + 1
    items[item_id] = {"name": name, "price": price}
    return {"item_id": item_id}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return items.get(item_id, {"error": "Item not found"})

WebSocketサポート

リアルタイム通信にWebSocketを活用できます。

例:WebSocketの使用
from fastapi.websockets import WebSocket

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"受信: {data}")

FastAPIを使う際の注意点

  1. 型ヒントの活用
    FastAPIでは型ヒントを活用することで、エラーを防ぎやすくなります。
  2. 非同期処理の設計
    非同期処理を前提として設計すると、パフォーマンスが向上します。
  3. セキュリティの考慮
    認証・認可機能を適切に設定し、APIのセキュリティを確保しましょう。

まとめ

FastAPIは、高速で効率的なWeb API開発を可能にするPythonフレームワークです。非同期処理や自動ドキュメント生成といった特徴を活用することで、開発スピードが大幅に向上します。この記事を参考に、FastAPIを活用してモダンなWeb APIを構築してみてください!

最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
Pythonプログラミング

コメント