FastAPIフレームワーク、高性能、習得が容易、コーディングが迅速、本番環境に対応
ドキュメント:https://fastapi.tiangolo.com
ソースコード:https://github.com/tiangolo/fastapi
FastAPI は、標準の Python 型ヒントに基づいて Python 3.7+ で API を構築するための、最新の高速 (高性能) ウェブフレームワークです。
主な機能は次のとおりです。
*内部開発チームでのテストに基づく見積もり、本番アプリケーションの構築。
"[...]私は最近FastAPIをたくさん使っています。[...]私は実際に、マイクロソフトのチームのすべてのMLサービスに使用することを計画しています。それらのいくつかは、コアWindows製品といくつかのOffice製品に統合されています。"
"FastAPIライブラリを採用して、予測を取得するためにクエリできるRESTサーバーを生成しました。[ルートヴィヒの場合]"
"Netflixは、危機管理オーケストレーションフレームワークのオープンソースリリースを発表できることを嬉しく思います。[FastAPIで構築]"
"私はFastAPIに興奮しています。とても楽しいです!"
"正直なところ、あなたが構築したものは非常に堅実で洗練されているように見えます。多くの点で、それは私がHugになりたかったものです-誰かがそれを構築するのを見るのは本当に刺激的です。"
"REST APIを構築するための最新のフレームワークを学びたい場合は、FastAPIをチェックしてください[...]それは速く、使いやすく、学ぶのは簡単です[...]"
"私たちはAPIのためにFastAPIに切り替えました[...]私はあなたがそれを好きになると思います[...]"
Web API の代わりにターミナルで使用する CLI アプリを構築する場合は、Typer を参照してください。
TyperはFastAPIの小さな兄弟です。そして、それはCLIのFastAPIとなることを意図しています。
パイソン 3.7+
FastAPIは巨人の肩の上に立っています:
$ pip install fastapi
---> 100%
また、UvicornやHypercornなどの本番環境には、ASGIサーバーも必要になります。
$ pip install "uvicorn[standard]"
---> 100%
main.py
from typing import Union
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: Union[str, None] = None):
return {"item_id": item_id, "q": q}
async def
コードで / を使用する場合は、次を使用します。
async
await
async def
from typing import Union
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: Union[str, None] = None):
return {"item_id": item_id, "q": q}
メモ:
わからない場合は、「急いで?」を確認してください。ドキュメントの非同期と
に関するセクション。待機
次のようにサーバーを実行します。
$ 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
main: ファイル (Python の "モジュール") です。
main.py
app:内部に作成されたオブジェクトライン付き。
main.py
app = FastAPI()
--reload: コードの変更後にサーバーを再起動します。これは開発のためにのみ行ってください。
http://127.0.0.1:8000/items/5?q=somequery でブラウザを開きます。
JSON 応答は次のように表示されます。
{"item_id": 5, "q": "somequery"}
次のような API が既に作成されています。
/
/items/{item_id}
GET
/items/{item_id}
item_id
int
/items/{item_id}
str
q
次に、http://127.0.0.1:8000/docs に移動します。
自動インタラクティブAPIドキュメント(Swagger UIで提供)が表示されます。
そして今、http://127.0.0.1:8000/redoc に行きます。
代替の自動ドキュメント(ReDoc提供)が表示されます。
次に、ファイルを変更しますから本文を受信するリクエスト。
main.py
PUT
Pydanticのおかげで、標準のPython型を使用して本文を宣言します。
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = 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}
サーバーは自動的にリロードする必要があります(追加したため上記のコマンド)。
--reload
uvicorn
次に、http://127.0.0.1:8000/docs に移動します。
そして今、http://127.0.0.1:8000/redoc に行きます。
要約すると、パラメータの型、本体などを関数パラメータとして一度宣言します。
これは、標準の最新の Python 型で行います。
新しい構文、特定のライブラリのメソッドやクラスなどを学ぶ必要はありません。
ちょうど標準的なPython 3.7+。
たとえば、次の場合です。
int
item_id: int
または、より複雑なモデルの場合:
Item
item: Item
...そして、その単一の宣言であなたは得ます:
str
int
float
bool
list
datetimeオブジェクト。
UUIDオブジェクト。
前のコード例に戻ると、FastAPIは次のようになります。
item_id
GET
PUT
item_id
int
GET
PUT
q
http://127.0.0.1:8000/items/foo?q=somequery
GET
q
= None
None
PUT
PUT
/items/{item_id}
name
str
price
float
is_offer
bool
We just scratched the surface, but you already get the idea of how it all works.
Try changing the line with:
return {"item_name": item.name, "item_id": item_id}
...from:
... "item_name": item.name ...
...to:
... "item_price": item.price ...
...and see how your editor will auto-complete the attributes and know their types:
For a more complete example including more features, see the Tutorial - User Guide.
Spoiler alert: the tutorial - user guide includes:
maximum_length
regex
requests
pytest
Independent TechEmpower benchmarks show FastAPI applications running under Uvicorn as one of the fastest Python frameworks available, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)
詳細については、「ベンチマーク」セクションを参照してください。
によって使用されます ピダンティック:
ujson-JSON
の「解析」を高速化します。email_validator
-電子メールの検証用。スターレットが使用:
要求
- を使用する場合は必須です。TestClient
jinja2
- デフォルトのテンプレート構成を使用する場合は必須です。python-マルチパート-
フォームの「解析」をサポートする場合に必要です。request.form()
その危険
-サポートに必要です。SessionMiddleware
pyyaml
- Starletteのサポートに必要です(おそらくFastAPIでは必要ありません)。SchemaGenerator
ujson
-使用する場合は必須です。UJSONResponse
FastAPI / Starletteによって使用されます:
これらはすべてでインストールできます。
pip install "fastapi[all]"
このプロジェクトは、MITライセンスの条件に基づいてライセンスされています。