본문 바로가기
Development/Python

[FastAPI] request body의 필수값 존재 여부에 따른 응답

by 폴피드 2024. 3. 20.
728x90
반응형

FastAPI 와 Pydantic 을 이용해서 API 작성을 하면서 request body로 들어오는 값의 존재 유무에 따라서 어떻게 세팅 되는지 확인이 필요했다.

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool | None = True
    address: str = "seoul"
    address1: str | None = None


@app.post("/items")
def insert_item(item: Item):
    return item

아주 간단한 API 이다. name 과 price 는 필수 값이고 is_offer 는 bool 타입으로 None 이 허용된다.

1. name, price 만 존재할 경우 -> 필드가 존재 하지 않을 경우 default 값으로 설정된다. 

 
{
    "name": "test",
    "price": 500.0,
    "is_offer": true,
    "address": "seoul",
    "address1": null
}

2. is_offer 에 null 이 들어간 경우 -> null 그대로 리턴 (None 을 허용했기 때문)

{
    "name": "test",
    "price": 500.0,
    "is_offer": null,
    "address": "seoul",
    "address1": null
}

3. address 에 null 이 들어간 경우 -> Error

{
    "detail": [
        {
            "type": "string_type",
            "loc": [
                "body",
                "address"
            ],
            "msg": "Input should be a valid string",
            "input": null,
        }
    ]
}

4. 결론
None 을 허용할 경우 값이 null 이 허용된다. 하지만 null 경우 default 값으로 값이 설정되지는 않는다. 그냥 null 로 설정된다.

 

728x90
반응형