출처: https://fastapi.tiangolo.com/tutorial/path-params-numeric-validations/
아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다.
Path 사용
Path를 사용 하여 유효성 검사 및 메타데이터를 선언 할 수 있습니다.
from typing import Union
from fastapi import FastAPI, Path, Query # Path import
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
# Path를 사용하여 item_id의 메타데이터(title)를 지정
# Annotated를 사용
item_id: Annotated[int, Path(title="The ID of the item to get")],
q: Annotated[Union[str, None], Query(alias="item-query")] = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
숫자 제약 조건
Query
, Path
를 사용 하여 숫자 제약 조건을 지정 할 수 있습니다.
from fastapi import FastAPI, Path
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
# ge=1 - item_id는 1 이상의 값이어야 함
item_id: Annotated[int, Path(title="The ID of the item to get", ge=1)], q: str
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
http://localhost:8000/items/1?q=foo
위의 URL로 접속하면 item_id
의 값이 1
로 1이상 이므로 아래의 결과가 나옵니다.
{"item_id":1,"q":"foo"}
http://localhost:8000/items/0?q=foo
위의 URL로 접속하면 item_id
의 값이 0
으로 1미만 이므로 아래와 같이 에러가 발생합니다.
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "Input should be greater than or equal to 1",
"input": "0",
"ctx": {
"ge": 1
},
"url": "https://errors.pydantic.dev/2.4/v/greater_than_equal"
}
]
}
참고로 아래의 URL로 접속하면 q
의 값이 문자열 타입의 필수 이므로 q
의 값이 없어 에러가 발생합니다.
http://localhost:8000/items/1
조건
gt
: greater thanle
: less than or equal
'웹 프레임워크 > FastAPI' 카테고리의 다른 글
FastAPI - 08 (응답 모델: Response Model) (0) | 2023.12.18 |
---|---|
FastAPI - 07 (헤더(Header) 매개변수) (0) | 2023.12.18 |
FastAPI - 05 (쿼리 매개변수와 문자열 유효성 검사) (0) | 2023.12.17 |
FastAPI - 04 (Request Body) (0) | 2023.12.17 |
FastAPI - 03 (쿼리(Query) 매개변수) (0) | 2023.12.15 |