FastAPI (original) (raw)

FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

Build Status Coverage Package version


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

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


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

主な特徴:

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

Other 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**にワクワクしています。 めちゃくちゃ楽しいです!"


"正直、超堅実で洗練されているように見えます。いろんな意味で、それは私がハグしたかったものです。"

Timothy Crosley - Hug creator (ref)


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

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


Typer, the FastAPI of CLIs

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

**Typer**は FastAPI の弟分です。そして、**CLI 版 の FastAPI**を意味しています。

必要条件

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

インストール

`$ pip install fastapi

---> 100% `

本番環境では、Uvicorn または、 Hypercornのような、 ASGI サーバーが必要になります。

`$ pip install "uvicorn[standard]"

---> 100% `

アプリケーション例

アプリケーションの作成

`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): 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): return {"item_id": item_id, "q": q} `

:

わからない場合は、ドキュメントのasync と awaitにある"In a hurry?"セクションをチェックしてください。

実行

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

`$ uvicorn main:app --reload

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [28720] INFO: Started server process [28722] INFO: Waiting for application startup. INFO: Application startup complete. `

uvicorn main:app --reloadコマンドについて

uvicorn main:appコマンドは以下の項目を参照します:

動作確認

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

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

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

もうすでに以下の API が作成されています:

自動対話型の 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

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

@app.get("/items/{item_id}") def read_item(item_id: int, q: str = 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} `

サーバーは自動でリロードされます。(上述のuvicornコマンドで--reloadオプションを追加しているからです。)

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

http://127.0.0.1:8000/docsにアクセスしましょう。

Swagger UI

Swagger UI interaction

Swagger UI interaction

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

http://127.0.0.1:8000/redocにアクセスしましょう。

ReDoc

まとめ

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

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

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

単なる標準的な**3.8 以降の Python**です。

例えば、intの場合:

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

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


コード例に戻りましょう、FastAPI は次のようになります:


まだ表面的な部分に触れただけですが、もう全ての仕組みは分かっているはずです。

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

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

...以下を:

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

...以下のように:

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

...そして、エディタが属性を自動補完し、そのタイプを知る方法を確認してください。:

editor support

より多くの機能を含む、より完全な例については、チュートリアル - ユーザーガイドをご覧ください。

ネタバレ注意: チュートリアル - ユーザーガイドは以下の情報が含まれています:

パフォーマンス

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

詳細はベンチマークセクションをご覧ください。

オプションの依存関係

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

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

FastAPI / Starlette に使用されるもの:

これらは全て pip install fastapi[all]でインストールできます。

ライセンス

このプロジェクトは MIT ライセンスです。