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 매개변수를 사용할 수 있습니다. 이를 통해 요청 본문을 함수의 필드로 직접 액세스할 수 있습니다.
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
접근 방식 3: Dict 매개변수(덜 권장됨)
덜 권장되는 접근 방식 사전 유형을 매개변수로 사용하는 것과 관련이 있습니다. 그러나 이 방법은 속성에 대한 사용자 정의 유효성 검사를 제공하지 않으며 유연성을 제한합니다.
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
접근 방법 4: FastAPI 요청 객체 사용
들어오는 JSON 데이터에 FastAPI 요청 개체를 사용하여 직접 액세스할 수 있습니다. 이 접근 방식을 사용하려면 비동기 정의로 엔드포인트를 정의해야 한다는 점을 기억하세요.
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
코드 테스트
엔드포인트를 테스트하려면 Python 요청 라이브러리 또는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!