[Python]FastAPIを使ってみる!

FastAPIというGoやNodejsに匹敵するパフォーマンスがあるらしいPythonのフレームワークがあるということで、気になって触ってみました。

サクッと導入

まずはFastAPIをインストールする。Python3.6以上の環境がいるみたいなのでpipenvpyenvを使って管理するといいと思います。

$ pip install fastapi
$ pip install uvicorn

公式のGithubに書いてあるソースコードをコピーしてとりあえず動かしてみる。

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}

サーバーを起動させてみます。

uvicorn main:app --reload

実際にlocalhost:8000localhost:8000/items/1?q=appleなどにアクセスすると結果が返ってくると思います。

また、APIドキュメントもlocalhost:8000/docsに自動生成されます。

CRUD

Create

@app.post()を使ってデータを作成できます。

from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None



@app.post("/items/")
async def create_item(item: Item):
    return item

実際に先ほどのAPIドキュメントの方でデータの作成ができるかチェックしてみる。

Read

@app.get()でデータの読み込みができます。

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

Update

@app.put()でデータの更新ができます。

@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
    return {"item_id": item_id, **item.dict()}

これもAPIドキュメントの方でデータを試してみましょう。

Delete

@app.delete()でデータの削除ができます。

@app.delete("/items/{item_id}")
async def delete_item(item_id: int, item: Item):
    return {"item_id": item_id, "item": item}

APIドキュメントでこれも試してみましょう。

感想

データベース立ち上げて簡単なAPIサーバーを作ってみようと思った。