일반적으로 FAST API에서 Post 메소드는 아래의 예제와 같이 BaseModel을 상속받아서 Request Body 데이터모델을 클래스로 선언해준다.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
그런데 상황에 따라서 Request Body의 값을 따로 수정하지 않고 바로 Return 하거나 다른 경로에 전달해야 하는 경우가 있다. 물론 그렇다 하더라도 위와 동일한 방식으로 Class를 선언해서 사용해도 되지만 불필요하게 클래스를 선언하고 싶지 않아 방법을 찾아봤다.
Request Body가 딕셔너리 형태를 엄격하게 따른다면 아래와 같이 사용한다.
from typing import Any, Dict
from fastapi import FastAPI
app = FastAPI()
@app.post("/items/")
async def forward_item(item: Dict[Any, Any]):
return item
Request Body값이 딕셔너리 형태에서 벗어 날 가능성이 있고, 더 유하게 데이터를 받기 위해서는 아래와 같이 사용한다.
from typing import Any, Dict, List, Union
from fastapi import FastAPI
app = FastAPI()
@app.post("/items/")
async def forward_item(item: Union[List,Dict,Any]=None):
return item
참고:
https://stackoverflow.com/questions/62267292/fastapi-pydantic-accept-arbitrary-post-request-body
'Amazon AWS > Lambda' 카테고리의 다른 글
도커 컨테이너 이미지로 Lambda 함수 배포 (0) | 2023.10.15 |
---|---|
Lambda 이용해서 Cloudwatch Error 로그를 Slack으로 알림 보내기 (0) | 2023.09.07 |
AWS Lambda에서 파이썬 모듈 추가하기 (0) | 2022.12.11 |