ホームページ > ウェブフロントエンド > jsチュートリアル > JSON POST リクエストを受信したときに FastAPI の 422 エラーを処理するにはどうすればよいですか?

JSON POST リクエストを受信したときに FastAPI の 422 エラーを処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-16 09:26:10
オリジナル
943 人が閲覧しました

How to Handle FastAPI's 422 Error When Receiving JSON POST Requests?

FastAPI: JSON データ送信時の POST リクエストでエラー 422 が発生する

RESTful API を構築するとき、特に POST リクエストが関係する場合、データ交換に関連する問題が発生することがよくあります。そのような問題の 1 つは、JSON データを送信しようとしているときに「422 Unprocessable Entity」エラーを受信することです。

提供されたコード例では:

from fastapi import FastAPI

app = FastAPI()

@app.post("/")
def main(user):
    return user
ログイン後にコピー

このコードは、JSON を予期する POST エンドポイントを定義します。 「user」キーを含むペイロード。ただし、HTTP クライアントが予期された形式と一致しない JSON データを送信すると、エラーが発生します。これを解決するには、いくつかのオプションがあります:

オプション 1: Pydantic モデルの使用

Pydantic モデルは、事前定義されたスキーマに従って JSON ペイロードを検証および逆シリアル化する方法を提供します:

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post("/")
def main(user: User):
    return user
ログイン後にコピー

オプション 2: ボディ パラメータの使用

ボディ パラメータFastAPI では、Pydantic モデルを定義せずに JSON ペイロードを直接解析できます。

from fastapi import Body

@app.post("/")
def main(user: str = Body(..., embed=True)):
    return {'user': user}
ログイン後にコピー

オプション 3: Dict 型を使用する

あまり推奨されていませんが、Dict 型を使用して、キーと値のペアとしての JSON ペイロード:

from typing import Dict, Any

@app.post("/")
def main(payload: Dict[Any, Any]):
    return payload
ログイン後にコピー

オプション 4: リクエスト本文の使用直接

受信データが有効な JSON であることが確実な場合は、Starlette の Request オブジェクトを使用して解析できます。

from fastapi import Request

@app.post("/")
async def main(request: Request):
    return await request.json()
ログイン後にコピー

オプションのテスト

Python リクエストを使用してこれらのオプションをテストします。ライブラリ:

import requests

url = 'http://127.0.0.1:8000/'
payload = {'user': 'foo'}
resp = requests.post(url=url, json=payload)
print(resp.json())
ログイン後にコピー

JavaScript Fetch API:

fetch('/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({'user': 'foo'})
})
.then(resp => resp.json()) // or, resp.text(), etc
.then(data => {
  console.log(data); // handle response data
})
.catch(error => {
  console.error(error);
});
ログイン後にコピー

これらのアプローチのいずれかを実装することで、422 エラーを解決し、JSON を正常に処理できます。 FastAPI POST エンドポイントのデータ。

以上がJSON POST リクエストを受信したときに FastAPI の 422 エラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート