6

POST FastAPI メソッドがあります。クラスもクエリ文字列も構築したくありません。そこで、Body()メソッドを適用することにしました。

@app.post("/test-single-int")
async def test_single_int(
    t: int = Body(...)
):
    pass

これがリクエストです

POST http://localhost:8000/test-single-int/

{
  "t": 10
}

そして、これが応答です

HTTP/1.1 422 Unprocessable Entity
date: Fri, 22 May 2020 10:00:16 GMT
server: uvicorn
content-length: 83
content-type: application/json
connection: close

{
  "detail": [
    {
      "loc": [
        "body",
        "s"
      ],
      "msg": "str type expected",
      "type": "type_error.str"
    }
  ]
}

しかし、多くのサンプルを試した結果、複数ある場合はエラーにならないことがわかりましたBody()。例えば、

@app.post("/test-multi-mix")
async def test_multi_param(
    s: str = Body(...),
    t: int = Body(...),
):
    pass

リクエスト

POST http://localhost:8000/test-multi-mix/

{
  "s": "test",
  "t": 10
}

応答

HTTP/1.1 200 OK
date: Fri, 22 May 2020 10:16:12 GMT
server: uvicorn
content-length: 4
content-type: application/json
connection: close

null

誰かが私の実装について何か考えを持っていますか? 間違っていますか?それはベストプラクティスではありませんか?それともバグですか?

4

2 に答える 2