らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python の FastAPI Web アプリで pydantic を使わずに POST メソッドを処理する

PythonFastAPI を使ったアプリケーションを Web アプリケーションを作成する際、POST メソッドで渡されるリクエストの処理は公式サイトの Request Body 説明ページ によると pydantic を使ったクラスで処理するサンプルが掲載されています。 しかし、例えば「POST されてくる JSON のフォーマットが一定では無い」といったケースだと pydantic ではやや困る場合があるかも知れません。 そういった場合は pydantic を使わず、Body を使ってリクエストを受け取り、json として処理する方法があります。 下記は FastAPI を mangumAWS へデプロイすることを前提にしたサンプルです。

from fastapi import Body, FastAPI
from mangum import Mangum

app = FastAPI()

@app.post('/')
def read_root(body=Body(...)):
    return {'Body': body}

handler = Mangum(app, enable_lifespan=False)

Body は辞書型

仮に以下のような JSON を POST するとします。

{
    "name": "John",
    "age": 25
}

body は辞書型です。 リクエストで受け取ったデータにアクセスするには下記のように処理します (辞書型で受け取っているので、処理が簡単です)。

import json

from fastapi import Body, FastAPI
from mangum import Mangum

app = FastAPI()

@app.post('/')
def read_root(body=Body(...)):
    return {'name': body['name']}

handler = Mangum(app, enable_lifespan=False)