機能¶
FastAPI の機能¶
FastAPI は以下の機能を提供します
オープンスタンダードに基づいています¶
- OpenAPI は API 作成のために、パス 操作、パラメータ、リクエストボディ、セキュリティなどの宣言を含みます。
- JSON スキーマ を使用した自動データモデルドキュメント(OpenAPI 自体も JSON スキーマに基づいています)。
- これらの標準に忠実に、綿密な調査の後に設計されています。後付けのレイヤーではありません。
- これにより、多くの言語で自動的なクライアントコード生成も可能になります。
自動ドキュメント¶
インタラクティブな API ドキュメントと探索のための Web ユーザーインターフェース。このフレームワークは OpenAPI に基づいているため、複数のオプションがあり、2 つがデフォルトで含まれています。
- インタラクティブな探索、ブラウザから直接 API を呼び出してテストできる Swagger UI。
- 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。
- メールアドレス。
- UUID。
- ...その他。
すべての検証は、定評のある堅牢な Pydantic によって処理されます。
セキュリティと認証¶
セキュリティと認証が統合されています。データベースやデータモデルとの妥協はありません。
OpenAPI で定義されているすべてのセキュリティスキーム、以下を含む
- HTTP ベーシック認証。
- OAuth2 (JWT トークンも)。JWT を使用した OAuth2 のチュートリアルを確認してください。
- API キー
- ヘッダー。
- クエリパラメータ。
- クッキーなど。
さらに、Starlette のすべてのセキュリティ機能 (セッションクッキーを含む)。
すべて再利用可能なツールとコンポーネントとして構築されており、システム、データストア、リレーショナルデータベース、NoSQL データベースなどとの統合が簡単です。
依存性注入¶
FastAPI には、非常に使いやすいながらも非常に強力な 依存性注入 システムが含まれています。
- 依存関係自体が依存関係を持つこともでき、依存関係の階層、つまり「依存関係のグラフ」を作成します。
- すべてフレームワークによって自動的に処理されます。
- すべての依存関係は、リクエストからデータを要求でき、パス操作の制約と自動ドキュメントを拡張できます。
- 依存関係で定義されたパス操作パラメータに対しても自動検証が行われます。
- 複雑なユーザー認証システム、データベース接続などをサポートします。
- データベース、フロントエンドなどとの妥協は一切ありません。しかし、それらすべてとの統合は簡単です。
無制限の「プラグイン」¶
あるいは、それらが不要な場合、必要なコードをインポートして使用するだけです。
どの統合も(依存関係を使って)非常にシンプルに使えるように設計されており、アプリケーションの「プラグイン」を、パス操作と同じ構造と構文を使って、たった2行のコードで作成できます。
テスト済み¶
- 100% の テストカバレッジ。
- 100% 型アノテーション付きのコードベース。
- 本番環境アプリケーションで使用されています。
Starlette の機能¶
FastAPI は Starlette と完全に互換性があり、これに基づいています。したがって、追加の Starlette コードも機能します。
FastAPI
は実際には Starlette
のサブクラスです。したがって、Starlette を既に知っている、または使用している場合、ほとんどの機能は同じように動作します。
FastAPI を使用すると、Starlette のすべての機能を利用できます (FastAPI は Starlette に改良を加えたものにすぎません)
- 驚くべきパフォーマンス。これは、NodeJS や Go に匹敵する、最も高速な Python フレームワークの 1 つです。
- WebSocket サポート。
- プロセス内バックグラウンドタスク。
- 起動イベントとシャットダウンイベント。
- HTTPX 上に構築されたテストクライアント。
- CORS、GZip、静的ファイル、ストリーミング応答。
- セッションとクッキーのサポート。
- 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% のテストカバレッジ。