コンテンツにスキップ

FastAPI

🌐 Translation by AI and humans

This translation was made by AI guided by humans. 🤝

It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖

You can improve this translation by helping us guide the AI LLM better.

English version

FastAPI

FastAPI フレームワーク、高パフォーマンス、学びやすい、素早くコーディングできる、本番運用に対応

Test Coverage Package version Supported Python versions


ドキュメント: https://fastapi.tiangolo.com

ソースコード: https://github.com/fastapi/fastapi


FastAPI は、Python の標準である型ヒントに基づいて Python で API を構築するための、モダンで、高速(高パフォーマンス)な Web フレームワークです。

主な特徴:

  • 高速: NodeJSGo 並みのとても高いパフォーマンス(Starlette と Pydantic のおかげです)。 利用可能な最も高速な Python フレームワークの一つです
  • 高速なコーディング: 開発速度を約 200%〜300% 向上させます。*
  • 少ないバグ: 開発者起因のヒューマンエラーを約 40% 削減します。*
  • 直感的: 素晴らしいエディタサポート。あらゆる場所で 補完 が使えます。デバッグ時間を削減します。
  • 簡単: 簡単に利用・習得できるようにデザインされています。ドキュメントを読む時間を削減します。
  • 短い: コードの重複を最小限にします。各パラメータ宣言から複数の機能を得られます。バグも減ります。
  • 堅牢性: 自動対話型ドキュメントにより、本番環境向けのコードが得られます。
  • Standards-based: API のオープンスタンダードに基づいており(そして完全に互換性があります)、OpenAPI(以前は Swagger として知られていました)や JSON Schema をサポートします。

* 本番アプリケーションを構築している社内開発チームのテストに基づく見積もりです。

Sponsors

Keystone Sponsor

Gold and Silver Sponsors

その他のスポンサー

評価

"[...] 最近 FastAPI を使っています。 [...] 実際に私のチームの全ての Microsoft の機械学習サービス で使用する予定です。 そのうちのいくつかのコアな Windows 製品と Office 製品に統合されつつあります。"

Kabir Khan - Microsoft (ref)

"FastAPIライブラリを採用し、クエリで 予測値 を取得できる REST サーバを構築しました。 [for Ludwig]"

Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)

"Netflix は、危機管理オーケストレーションフレームワーク、Dispatch のオープンソースリリースを発表できることをうれしく思います。 [built with FastAPI]"

Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)

"私は FastAPI にワクワクしています。 めちゃくちゃ楽しいです!"

Brian Okken - Python Bytes podcast host (ref)

"正直、あなたが作ったものは超堅実で洗練されているように見えます。いろんな意味で、それは私が Hug にそうなってほしかったものです。誰かがそれを作るのを見るのは本当に刺激的です。"

Timothy Crosley - Hug creator (ref)

"REST API を構築するための モダンなフレームワーク を学びたい方は、FastAPI [...] をチェックしてみてください。 [...] 高速で、使用・習得が簡単です [...]"

"私たちの APIFastAPI に切り替えました [...] きっと気に入ると思います [...]"

Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)

"本番運用の Python API を構築したい方には、FastAPI を強くおすすめします。美しく設計されており、使いやすく高いスケーラビリティがあります。私たちの API ファースト開発戦略の 主要コンポーネント となり、Virtual TAC Engineer などの多くの自動化やサービスを推進しています。"

Deon Pillsbury - Cisco (ref)

FastAPI ミニドキュメンタリー

2025 年末に公開された FastAPI ミニドキュメンタリーがあります。オンラインで視聴できます:

FastAPI Mini Documentary

Typer、CLI 版 FastAPI

Web API の代わりにターミナルで使用する CLI アプリを構築する場合は、Typer を確認してください。

Typer は FastAPI の弟分です。そして、CLI 版 FastAPI を意図しています。 ⌨️ 🚀

必要条件

FastAPI は巨人の肩の上に立っています。

インストール

virtual environment を作成して有効化し、それから FastAPI をインストールします。

$ pip install "fastapi[standard]"

---> 100%

: すべてのターミナルで動作するように、"fastapi[standard]" は必ずクォートで囲んでください。

アプリケーション例

作成

main.py ファイルを作成し、以下のコードを入力します。

from fastapi import FastAPI

app = FastAPI()


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}
または async def を使います...

コードで async / await を使用する場合は、async def を使います。

from fastapi import FastAPI

app = FastAPI()


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


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

:

わからない場合は、ドキュメントの asyncawait"In a hurry?" セクションを確認してください。

実行

以下のコマンドでサーバーを起動します。

$ fastapi dev main.py

 ╭────────── FastAPI CLI - Development mode ───────────╮
 │                                                     │
 │  Serving at: http://127.0.0.1:8000                  │
 │                                                     │
 │  API docs: http://127.0.0.1:8000/docs               │
 │                                                     │
 │  Running in development mode, for production use:   │
 │                                                     │
 │  fastapi run                                        │
 │                                                     │
 ╰─────────────────────────────────────────────────────╯

INFO:     Will watch for changes in these directories: ['/home/user/code/awesomeapp']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [2248755] using WatchFiles
INFO:     Started server process [2248757]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
fastapi dev main.py コマンドについて

fastapi dev コマンドは main.py ファイルを読み取り、その中の FastAPI アプリを検出し、Uvicorn を使用してサーバーを起動します。

デフォルトでは、fastapi dev はローカル開発向けに自動リロードを有効にして起動します。

詳しくは FastAPI CLI docs を参照してください。

動作確認

ブラウザで http://127.0.0.1:8000/items/5?q=somequery を開きます。

以下の JSON のレスポンスが確認できます。

{"item_id": 5, "q": "somequery"}

すでに以下の API が作成されています。

  • パス //items/{item_id} で HTTP リクエストを受け取ります。
  • 両方の パスGET 操作(HTTP メソッド としても知られています)を取ります。
  • パス /items/{item_id}int であるべき パスパラメータ item_id を持ちます。
  • パス /items/{item_id} はオプションの str クエリパラメータ q を持ちます。

自動対話型 API ドキュメント

次に、http://127.0.0.1:8000/docs にアクセスします。

自動対話型 API ドキュメントが表示されます(Swagger UI が提供しています)。

Swagger UI

代替 API ドキュメント

次に、http://127.0.0.1:8000/redoc にアクセスします。

代替の自動ドキュメントが表示されます(ReDoc が提供しています)。

ReDoc

アップグレード例

次に、PUT リクエストからボディを受け取るために main.py ファイルを修正しましょう。

Pydantic によって、標準的な Python の型を使ってボディを宣言します。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: bool | None = None


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

fastapi dev サーバーは自動でリロードされるはずです。

自動対話型 API ドキュメントのアップグレード

次に、http://127.0.0.1:8000/docs にアクセスします。

  • 自動対話型 API ドキュメントは新しいボディも含めて自動でアップデートされます。

Swagger UI

  • 「Try it out」ボタンをクリックします。パラメータを入力して API と直接やりとりできます。

Swagger UI interaction

  • 次に、「Execute」ボタンをクリックします。ユーザーインターフェースは API と通信し、パラメータを送信し、結果を取得して画面に表示します。

Swagger UI interaction

代替 API ドキュメントのアップグレード

次に、http://127.0.0.1:8000/redoc にアクセスします。

  • 代替のドキュメントにも新しいクエリパラメータやボディが反映されます。

ReDoc

まとめ

要約すると、関数のパラメータとして、パラメータやボディなどの型を 一度だけ 宣言します。

標準的な最新の Python の型を使います。

新しい構文や特定のライブラリのメソッドやクラスなどを覚える必要はありません。

単なる標準的な Python です。

例えば、int の場合:

item_id: int

または、より複雑な Item モデルの場合:

item: Item

...そして、この一度の宣言で、以下のようになります。

  • 以下を含むエディタサポート:
    • 補完。
    • 型チェック。
  • データの検証:
    • データが無効な場合に自動で明確なエラーを返します。
    • 深い入れ子になった JSON オブジェクトでも検証が可能です。
  • 入力データの 変換: ネットワークから Python のデータや型へ。以下から読み取ります:
    • JSON。
    • パスパラメータ。
    • クエリパラメータ。
    • Cookie。
    • ヘッダー。
    • フォーム。
    • ファイル。
  • 出力データの 変換: Python のデータや型からネットワークデータへ(JSON として)変換します:
    • Python の型(strintfloatboollist など)の変換。
    • datetime オブジェクト。
    • UUID オブジェクト。
    • データベースモデル。
    • ...などなど。
  • 2 つの代替ユーザーインターフェースを含む自動対話型 API ドキュメント:
    • Swagger UI。
    • ReDoc。

前のコード例に戻ると、FastAPI は次のように動作します。

  • GET および PUT リクエストのパスに item_id があることを検証します。
  • GET および PUT リクエストに対して item_idint 型であることを検証します。
    • そうでない場合、クライアントは有用で明確なエラーを受け取ります。
  • GET リクエストに対して、q という名前のオプションのクエリパラメータ(http://127.0.0.1:8000/items/foo?q=somequery のような)が存在するかどうかを調べます。
    • q パラメータは = None で宣言されているため、オプションです。
    • None がなければ必須になります(PUT の場合のボディと同様です)。
  • PUT リクエストを /items/{item_id} に送信する場合、ボディを JSON として読み込みます:
    • 必須の属性 name があり、str であるべきことを確認します。
    • 必須の属性 price があり、float でなければならないことを確認します。
    • オプションの属性 is_offer があり、存在する場合は bool であるべきことを確認します。
    • これらはすべて、深くネストされた JSON オブジェクトに対しても動作します。
  • JSON への/からの変換を自動的に行います。
  • OpenAPI ですべてを文書化し、以下で利用できます:
    • 対話型ドキュメントシステム。
    • 多くの言語に対応した自動クライアントコード生成システム。
  • 2 つの対話型ドキュメント Web インターフェースを直接提供します。

まだ表面的な部分に触れただけですが、仕組みはすでにイメージできているはずです。

以下の行を変更してみてください。

    return {"item_name": item.name, "item_id": item_id}

...以下の:

        ... "item_name": item.name ...

...を:

        ... "item_price": item.price ...

...に変更し、エディタが属性を自動補完し、その型を知ることを確認してください。

editor support

より多くの機能を含む、より完全な例については、Tutorial - User Guide を参照してください。

ネタバレ注意: tutorial - user guide には以下が含まれます。

  • ヘッダーCookieフォームフィールドファイルなど、他のさまざまな場所からの パラメータ 宣言。
  • maximum_lengthregex のような 検証制約 を設定する方法。
  • 非常に強力で使いやすい 依存性注入 システム。
  • JWT トークンを用いた OAuth2HTTP Basic 認証のサポートを含む、セキュリティと認証。
  • 深くネストされた JSON モデルを宣言するための、より高度な(しかし同様に簡単な)手法(Pydantic のおかげです)。
  • Strawberry および他のライブラリによる GraphQL 統合。
  • 以下のようなたくさんのおまけ機能(Starlette のおかげです):
    • WebSockets
    • HTTPX と pytest に基づく極めて簡単なテスト
    • CORS
    • Cookie Sessions
    • ...などなど。

アプリをデプロイ(任意)

必要に応じて FastAPI アプリを FastAPI Cloud にデプロイできます。まだの場合はウェイティングリストに参加してください。 🚀

すでに FastAPI Cloud アカウント(ウェイティングリストから招待されました 😉)がある場合は、1 コマンドでアプリケーションをデプロイできます。

デプロイ前に、ログインしていることを確認してください。

$ fastapi login

You are logged in to FastAPI Cloud 🚀

次に、アプリをデプロイします。

$ fastapi deploy

Deploying to FastAPI Cloud...

✅ Deployment successful!

🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev

これで完了です!その URL でアプリにアクセスできます。 ✨

FastAPI Cloud について

FastAPI CloudFastAPI の作者と同じチームによって作られています。

最小限の労力で API を 構築デプロイアクセス するためのプロセスを効率化します。

FastAPI でアプリを構築するのと同じ 開発者体験 を、クラウドへの デプロイ にももたらします。 🎉

FastAPI Cloud は FastAPI and friends オープンソースプロジェクトの主要スポンサーであり、資金提供元です。 ✨

他のクラウドプロバイダにデプロイ

FastAPI はオープンソースであり、標準に基づいています。選択した任意のクラウドプロバイダに FastAPI アプリをデプロイできます。

各クラウドプロバイダのガイドに従って、FastAPI アプリをデプロイしてください。 🤓

パフォーマンス

独立した TechEmpower のベンチマークでは、Uvicorn で動作する FastAPI アプリケーションが、利用可能な最も高速な Python フレームワークの一つであり、Starlette と Uvicorn(FastAPI で内部的に使用されています)にのみ下回っていると示されています。(*)

詳細は Benchmarks セクションをご覧ください。

依存関係

FastAPI は Pydantic と Starlette に依存しています。

standard 依存関係

FastAPI を pip install "fastapi[standard]" でインストールすると、standard グループのオプション依存関係が含まれます。

Pydantic によって使用されるもの:

Starlette によって使用されるもの:

  • httpx - TestClient を使用したい場合に必要です。
  • jinja2 - デフォルトのテンプレート設定を使用したい場合に必要です。
  • python-multipart - request.form() とともに、フォームの 「parsing」 をサポートしたい場合に必要です。

FastAPI によって使用されるもの:

  • uvicorn - アプリケーションをロードして提供するサーバーのため。これには uvicorn[standard] も含まれ、高性能なサービングに必要な依存関係(例: uvloop)が含まれます。
  • fastapi-cli[standard] - fastapi コマンドを提供します。
    • これには fastapi-cloud-cli が含まれ、FastAPI アプリケーションを FastAPI Cloud にデプロイできます。

standard 依存関係なし

standard のオプション依存関係を含めたくない場合は、pip install "fastapi[standard]" の代わりに pip install fastapi でインストールできます。

fastapi-cloud-cli なし

標準の依存関係を含めつつ fastapi-cloud-cli を除外して FastAPI をインストールしたい場合は、pip install "fastapi[standard-no-fastapi-cloud-cli]" でインストールできます。

追加のオプション依存関係

追加でインストールしたい依存関係があります。

追加のオプション Pydantic 依存関係:

追加のオプション FastAPI 依存関係:

  • orjson - ORJSONResponse を使用したい場合に必要です。
  • ujson - UJSONResponse を使用したい場合に必要です。

ライセンス

このプロジェクトは MIT ライセンスの条項の下でライセンスされています。