首頁 >後端開發 >Python教學 >如何在FastAPI中有效處理帶有JSON資料的POST請求?

如何在FastAPI中有效處理帶有JSON資料的POST請求?

DDD
DDD原創
2024-12-29 01:22:09834瀏覽

How to Effectively Handle POST Requests with JSON Data in FastAPI?

FastAPI:使用 JSON 資料處理 POST 要求

建置 API 時,處理不同類型的 HTTP 請求至關重要。雖然 GET 請求工作順利,但 POST 請求經常遇到錯誤,尤其是在發送 JSON 資料時。為了解決 FastAPI 中 POST 請求常見的「422 Unprocessable Entity」錯誤,我們探索了定義需要 JSON 資料的端點的不同方法。

方法 1:使用 Pydantic 模型

要定義接受 JSON 資料的請求正文,您可以使用 Pydantic 模型。使用所需欄位建立模型並將其合併到端點定義中。

from pydantic import BaseModel

class User(BaseModel):
    user: str

@app.post('/')
def main(user: User):
    return user

方法 2:使用 Embed 的主體參數

如果您不想使用 Pydantic模型,您可以將 Body 參數與 embed 選項一起使用。這允許您直接將請求正文作為函數中的欄位進行存取。

from fastapi import Body

@app.post('/')
def main(user: str = Body(..., embed=True)):
    return {'user': user}

方法 3:字典參數(不太推薦)

不太建議的方法涉及使用字典類型作為參數。但是,此方法不提供屬性的自訂驗證,並且限制了靈活性。

from typing import Dict, Any

@app.post('/')
def main(payload: Dict[Any, Any]): 
    return payload

方法 4:使用 FastAPI 請求物件

如果您有信心傳入的 JSON 數據,您可以使用 FastAPI Request 物件直接存取它。請記住,此方法需要使用 async def 定義您的端點。

from fastapi import Request

@app.post('/')
async def main(request: Request): 
    return await request.json()

測試您的程式碼

要測試您的端點,您可以使用 Python requests 函式庫或JavaScript Fetch API。

使用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);
    });

根據您的要求選擇適當的方法並考慮各種測試選項,您可以在FastAPI 中有效處理帶有JSON 資料的POST請求。

以上是如何在FastAPI中有效處理帶有JSON資料的POST請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn