コンテンツへスキップ

特徴

FastAPI の特徴

FastAPI は以下を提供します

オープンスタンダードに基づく

  • API 作成のための OpenAPI。これには パス 操作、パラメーター、リクエストボディ、セキュリティなどの宣言が含まれます。
  • OpenAPI 自体が JSON Schema に基づいているため、JSON Schema を使用した自動データモデルドキュメント。
  • これらの標準を綿密に研究した上で設計されています。後から追加されたレイヤーではありません。
  • これにより、多くの言語で自動的な クライアントコード生成 も可能になります。

自動ドキュメント

対話型 API ドキュメントと探索 Web ユーザーインターフェース。フレームワークは OpenAPI に基づいているため、複数のオプションがあり、2 つがデフォルトで含まれています。

  • Swagger UI は、対話的に探索し、ブラウザから直接 API を呼び出してテストできます。

Swagger UI interaction

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

ReDoc

純粋なモダン 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 フレームワーク全体はそれを満たすように構築されています。オートコンプリートはどこでも機能します。

ドキュメントに戻る必要はめったにありません。

エディターがどのように役立つかを示します

editor support

editor support

以前は不可能だと思っていたコードでも補完機能を利用できます。たとえば、リクエストから送られてくる JSON ボディ内の price キー (入れ子になっている場合もあります) などです。

間違ったキー名をタイプしたり、ドキュメントを行ったり来たりしたり、usernameuser_name のどちらを使ったかを確かめるために上下にスクロールしたりする必要はもうありません。

簡潔

すべてに合理的な デフォルト値 があり、どこでもオプション設定が可能です。すべてのパラメーターは、必要なことを実行し、必要な API を定義するために微調整できます。

しかし、デフォルトでは、すべて 「ただ機能する」 のです。

バリデーション

  • ほとんど(またはすべて?)の Python データ型 のバリデーション。以下を含む

    • JSON オブジェクト (dict)。
    • 項目型を定義する JSON 配列 (list)。
    • 最小および最大長を定義する文字列 (str) フィールド。
    • 最小および最大値を持つ数値 (int, float) など。
  • さらに特殊な型のバリデーション。以下を含む

    • URL。
    • Eメール。
    • UUID。
    • ...その他。

すべてのバリデーションは、定評があり堅牢な Pydantic によって処理されます。

セキュリティと認証

セキュリティと認証が統合されています。データベースやデータモデルとの妥協はありません。

OpenAPI で定義されているすべてのセキュリティスキーム。以下を含む

  • HTTP Basic。
  • OAuth2 (JWT トークン も含む)。JWT を使用した OAuth2 のチュートリアルを確認してください。
  • API キー
    • ヘッダー。
    • クエリパラメーター。
    • Cookie など。

さらに Starlette のすべてのセキュリティ機能 (セッション Cookie を含む)。

すべて再利用可能なツールおよびコンポーネントとして構築されており、システム、データストア、リレーショナルデータベース、NoSQL データベースなどとの統合が容易です。

依存性注入

FastAPI には、非常に使いやすいながらも非常に強力な 依存性注入 システムが含まれています。

  • 依存関係自体が依存関係を持つこともでき、依存関係の階層、または 「グラフ」 を作成します。
  • すべてフレームワークによって 自動的に処理されます
  • すべての依存関係はリクエストからデータを要求し、パス操作の 制約と自動ドキュメントを 強化する ことができます。
  • 依存関係で定義された パス操作 パラメーターに対しても 自動バリデーション が行われます。
  • 複雑なユーザー認証システム、データベース接続 などに対応します。
  • データベース、フロントエンドなどとの 妥協はありません。しかし、それらすべてとの統合は容易です。

無制限の「プラグイン」

別の言い方をすれば、それらは不要で、必要なコードをインポートして使用するだけです。

どのような統合も、(依存関係を使用して) 非常にシンプルに使えるように設計されており、自分の パス操作 に使用するのと同じ構造と構文を使用して、わずか 2 行のコードでアプリケーションの「プラグイン」を作成できます。

テスト済み

  • 100% テストカバレッジ
  • 100% 型アノテーション付きのコードベース。
  • 本番環境のアプリケーションで使用されています。

Starlette の機能

FastAPIStarlette と完全に互換性があり、これに基づいています。したがって、Starlette の追加コードもすべて機能します。

FastAPI は実際には Starlette のサブクラスです。そのため、すでに Starlette を知っている、または使用している場合、ほとんどの機能は同じように動作します。

FastAPI では、Starlette のすべての機能 (FastAPI は Starlette の強化版にすぎないため) を利用できます

Pydantic の機能

FastAPIPydantic と完全に互換性があり、これに基づいています。したがって、Pydantic の追加コードもすべて機能します。

Pydantic に基づく外部ライブラリも含まれます。例えば、データベース用の ORMODM などです。

これは、多くの場合、リクエストから取得したオブジェクトを 直接データベースに 渡すことができることを意味します。すべて自動的に検証されるためです。

逆もまた同様で、多くの場合、データベースから取得したオブジェクトを 直接クライアントに 渡すことができます。

FastAPI を使用すると、Pydantic のすべての機能 (FastAPI はすべてのデータ処理に Pydantic を使用しているため) を利用できます

  • 複雑なことはありません:
    • 新しいスキーマ定義のマイクロ言語を学ぶ必要はありません。
    • Python の型を知っていれば、Pydantic の使い方もわかります。
  • IDE/リンター/頭 とうまく連携します
    • Pydantic のデータ構造は、定義したクラスのインスタンスにすぎません。オートコンプリート、リンティング、mypy、そして直感はすべて、検証されたデータと適切に連携するはずです。
  • 複雑な構造 を検証します
    • 階層的な Pydantic モデル、Python typingList および Dict などを使用します。
    • そして、バリデーターを使用すると、複雑なデータスキーマを JSON Schema として明確かつ簡単に定義、チェック、および文書化できます。
    • 深く ネストされた JSON オブジェクトを持ち、それらすべてを検証して注釈を付けることができます。
  • 拡張可能:
    • Pydantic ではカスタムデータ型を定義でき、バリデーターデコレーターで装飾されたモデルのメソッドを使用して検証を拡張できます。
  • 100% のテストカバレッジ。