機能¶
FastAPI の機能¶
FastAPI は次のものを提供します
オープンスタンダードに基づく¶
- OpenAPI は、パス オペレーション、パラメーター、リクエストボディ、セキュリティなどの宣言を含む API 作成用です。
- 自動データモデルドキュメントと JSON Schema (OpenAPI 自体が JSON Schema に基づいているため)。
- 綿密な調査の後、これらの標準を中心に設計されています。後付けのレイヤーではありません。
- これにより、多くの言語で自動クライアントコード生成を使用することもできます。
自動ドキュメント¶
インタラクティブな API ドキュメントと探索Webユーザーインターフェイス。フレームワークは OpenAPI に基づいているため、デフォルトで含まれる2つのオプションなど、複数のオプションがあります。
- Swagger UI、インタラクティブな探索を使用すると、ブラウザーから直接APIを呼び出してテストできます。
- ReDocを使用した代替APIドキュメント。
モダンな Python¶
すべて、標準のPython の型宣言 (Pydantic のおかげで) に基づいています。学ぶべき新しい構文はありません。標準的なモダン Python のみです。
Pythonの型の使い方を2分で復習する必要がある場合(FastAPIを使用していなくても)、短いチュートリアルを確認してください: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 Basic。
- 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コードもすべて機能します。
データベースのORM、ODMなど、Pydanticに基づいた外部ライブラリも含まれます。
これは、多くの場合、リクエストから取得したオブジェクトをデータベースに直接渡すことができることも意味します。すべてが自動的に検証されるためです。
同じことが逆の場合にも当てはまり、多くの場合、データベースから取得したオブジェクトをクライアントに直接渡すことができます。
FastAPIを使用すると、Pydanticのすべての機能を利用できます(FastAPIはすべてのデータ処理にPydanticに基づいているため)。
- 難解な処理は不要:
- 学習する新しいスキーマ定義マイクロ言語はありません。
- Pythonの型がわかっていれば、Pydanticの使い方がわかります。
- IDE/リンター/頭脳とうまく連携します。
- Pydanticのデータ構造は、定義したクラスのインスタンスであるため、オートコンプリート、リンティング、mypy、および直感的な操作は、検証済みのデータで適切に機能するはずです。
- 複雑な構造を検証します。
- 階層的なPydanticモデル、Python
typing
のList
およびDict
などを使用します。 - また、バリデーターを使用すると、複雑なデータスキーマを明確かつ簡単に定義、チェック、およびJSONスキーマとしてドキュメント化できます。
- 深くネストされたJSONオブジェクトを作成し、すべてを検証およびアノテーションすることができます。
- 階層的なPydanticモデル、Python
- 拡張可能:
- Pydanticでは、カスタムデータ型を定義したり、バリデーターデコレーターで装飾されたモデルのメソッドで検証を拡張したりできます。
- 100%テストカバレッジ。