Skip to content

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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 するとします。

1
2
3
4
{
    "name": "John",
    "age": 25
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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)