特徴¶
FastAPI の特徴¶
FastAPI は以下を提供します
オープンスタンダードに基づく¶
- API 作成のための OpenAPI。これには パス 操作、パラメーター、リクエストボディ、セキュリティなどの宣言が含まれます。
- OpenAPI 自体が JSON Schema に基づいているため、JSON Schema を使用した自動データモデルドキュメント。
- これらの標準を綿密に研究した上で設計されています。後から追加されたレイヤーではありません。
- これにより、多くの言語で自動的な クライアントコード生成 も可能になります。
自動ドキュメント¶
対話型 API ドキュメントと探索 Web ユーザーインターフェース。フレームワークは OpenAPI に基づいているため、複数のオプションがあり、2 つがデフォルトで含まれています。
- Swagger UI は、対話的に探索し、ブラウザから直接 API を呼び出してテストできます。

- ReDoc を使用した代替 API ドキュメント。

純粋なモダン Python¶
すべて標準の Python 型 宣言に基づいています (Pydantic のおかげです)。新しい構文を学ぶ必要はありません。標準的なモダン Python です。
Python の型の使い方 (FastAPI を使わなくても) の 2 分間の復習が必要な場合は、短いチュートリアルを参照してください: Python の型。
型を使用して標準的な Python を書きます
from datetime import date
from pydantic import BaseModel
# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
そして、次のように使用できます
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
my_second_user: User = User(**second_user_data)
情報
**second_user_data は次の意味です
second_user_data 辞書のキーと値を直接キーワード引数として渡します。これは User(id=4, name="Mary", joined="2018-11-30") と同等です。
エディターのサポート¶
フレームワーク全体は使いやすく直感的に設計されており、最高の開発体験を保証するために、開発を開始する前から複数のエディターで決定事項がテストされました。
Python 開発者アンケートでは、最も使用されている機能の 1 つが「オートコンプリート」であることが明らかです。
FastAPI フレームワーク全体はそれを満たすように構築されています。オートコンプリートはどこでも機能します。
ドキュメントに戻る必要はめったにありません。
エディターがどのように役立つかを示します

- PyCharm で

以前は不可能だと思っていたコードでも補完機能を利用できます。たとえば、リクエストから送られてくる JSON ボディ内の price キー (入れ子になっている場合もあります) などです。
間違ったキー名をタイプしたり、ドキュメントを行ったり来たりしたり、username と user_name のどちらを使ったかを確かめるために上下にスクロールしたりする必要はもうありません。
簡潔¶
すべてに合理的な デフォルト値 があり、どこでもオプション設定が可能です。すべてのパラメーターは、必要なことを実行し、必要な API を定義するために微調整できます。
しかし、デフォルトでは、すべて 「ただ機能する」 のです。
バリデーション¶
-
ほとんど(またはすべて?)の Python データ型 のバリデーション。以下を含む
- JSON オブジェクト (
dict)。 - 項目型を定義する JSON 配列 (
list)。 - 最小および最大長を定義する文字列 (
str) フィールド。 - 最小および最大値を持つ数値 (
int,float) など。
- JSON オブジェクト (
-
さらに特殊な型のバリデーション。以下を含む
- URL。
- Eメール。
- UUID。
- ...その他。
すべてのバリデーションは、定評があり堅牢な Pydantic によって処理されます。
セキュリティと認証¶
セキュリティと認証が統合されています。データベースやデータモデルとの妥協はありません。
OpenAPI で定義されているすべてのセキュリティスキーム。以下を含む
- HTTP Basic。
- OAuth2 (JWT トークン も含む)。JWT を使用した OAuth2 のチュートリアルを確認してください。
- API キー
- ヘッダー。
- クエリパラメーター。
- Cookie など。
さらに Starlette のすべてのセキュリティ機能 (セッション Cookie を含む)。
すべて再利用可能なツールおよびコンポーネントとして構築されており、システム、データストア、リレーショナルデータベース、NoSQL データベースなどとの統合が容易です。
依存性注入¶
FastAPI には、非常に使いやすいながらも非常に強力な 依存性注入 システムが含まれています。
- 依存関係自体が依存関係を持つこともでき、依存関係の階層、または 「グラフ」 を作成します。
- すべてフレームワークによって 自動的に処理されます。
- すべての依存関係はリクエストからデータを要求し、パス操作の 制約と自動ドキュメントを 強化する ことができます。
- 依存関係で定義された パス操作 パラメーターに対しても 自動バリデーション が行われます。
- 複雑なユーザー認証システム、データベース接続 などに対応します。
- データベース、フロントエンドなどとの 妥協はありません。しかし、それらすべてとの統合は容易です。
無制限の「プラグイン」¶
別の言い方をすれば、それらは不要で、必要なコードをインポートして使用するだけです。
どのような統合も、(依存関係を使用して) 非常にシンプルに使えるように設計されており、自分の パス操作 に使用するのと同じ構造と構文を使用して、わずか 2 行のコードでアプリケーションの「プラグイン」を作成できます。
テスト済み¶
- 100% テストカバレッジ。
- 100% 型アノテーション付きのコードベース。
- 本番環境のアプリケーションで使用されています。
Starlette の機能¶
FastAPI は Starlette と完全に互換性があり、これに基づいています。したがって、Starlette の追加コードもすべて機能します。
FastAPI は実際には Starlette のサブクラスです。そのため、すでに Starlette を知っている、または使用している場合、ほとんどの機能は同じように動作します。
FastAPI では、Starlette のすべての機能 (FastAPI は Starlette の強化版にすぎないため) を利用できます
- 本当に驚くべきパフォーマンスです。これは 利用可能な Python フレームワークの中で最も高速なものの 1 つであり、NodeJS や Go に匹敵します。
- WebSocket サポート。
- プロセス内バックグラウンドタスク。
- 起動およびシャットダウンイベント。
- HTTPX 上に構築されたテストクライアント。
- CORS、GZip、静的ファイル、ストリーミングレスポンス。
- セッションと Cookie のサポート。
- 100% のテストカバレッジ。
- 100% 型注釈付きのコードベース。
Pydantic の機能¶
FastAPI は Pydantic と完全に互換性があり、これに基づいています。したがって、Pydantic の追加コードもすべて機能します。
Pydantic に基づく外部ライブラリも含まれます。例えば、データベース用の ORM、ODM などです。
これは、多くの場合、リクエストから取得したオブジェクトを 直接データベースに 渡すことができることを意味します。すべて自動的に検証されるためです。
逆もまた同様で、多くの場合、データベースから取得したオブジェクトを 直接クライアントに 渡すことができます。
FastAPI を使用すると、Pydantic のすべての機能 (FastAPI はすべてのデータ処理に Pydantic を使用しているため) を利用できます
- 複雑なことはありません:
- 新しいスキーマ定義のマイクロ言語を学ぶ必要はありません。
- Python の型を知っていれば、Pydantic の使い方もわかります。
- IDE/リンター/頭 とうまく連携します
- Pydantic のデータ構造は、定義したクラスのインスタンスにすぎません。オートコンプリート、リンティング、mypy、そして直感はすべて、検証されたデータと適切に連携するはずです。
- 複雑な構造 を検証します
- 階層的な Pydantic モデル、Python
typingのListおよびDictなどを使用します。 - そして、バリデーターを使用すると、複雑なデータスキーマを JSON Schema として明確かつ簡単に定義、チェック、および文書化できます。
- 深く ネストされた JSON オブジェクトを持ち、それらすべてを検証して注釈を付けることができます。
- 階層的な Pydantic モデル、Python
- 拡張可能:
- Pydantic ではカスタムデータ型を定義でき、バリデーターデコレーターで装飾されたモデルのメソッドを使用して検証を拡張できます。
- 100% のテストカバレッジ。