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中文網其他相關文章!