Fast API, Path Parameters and Numeric Validations (유효성 검사)

Junha Kim·2021년 1월 6일
0

FastAPI

목록 보기
9/16
post-custom-banner

Query parameter와 같이 Path parameter에도 유효성 기준을 설정할 수 있다.

Query때와 마찬가지로 fastapi에서 Path를 import 해온다.

from fastapi import FastAPI, Path, Query
from typing import Optional

app = FastAPI()

Declare metadata

Query와 다를 바 없다. 똑같이 title metadata를 설정할 수 있다.

@app.get("/items/{item_id}")
async def read_items(
    item_id: int = Path(..., title="The ID of the item to get"),
    q: Optional[str] = Query(None, alias="item-query"),
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

다만, Path parameter는 항상 필수 요소이기 때문에 ...로 필수라는 표시를 해줘야한다.


Order the parameters as you need

q가 필수적으로 필요한 str이고, Path를 사용하여 Path parameter를 정의한다고 하자.

파이썬 기본 문법에서는 기본값 매개변수 뒤에 일반 매개변수는 올 수 없었다. 하지만 Fast API에서는 그러한 문제는 상관이 없기에 Order는 상관 없다.

@app.get("/items/{item_id}")
async def read_items(
    q: str, item_id: int = Path(..., title="The ID of the item to get")
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

이렇게 쓰면 Fast API라서 괜찮은 것이지, 이를 모르는 개발자들은 의문을 제기할 것이다. 그러므로 원래의 문법에 따르는 표기를 하고자 *라는 parameter를 넘겨준다.

@app.get("/items/{item_id}")
async def read_items(
    *, item_id: int = Path(..., title="The ID of the item to get"), q: str
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

*는 어떠한 의미도 없으며, 단지 parameter 자리를 채울 뿐이다. 하지만 * 다음의 parameter들은 기본 값이 없더라도, Keyword args(kwargs)가 되어야 한다.


Number validations: greater than or equal

Path/Query parameter에 숫자에 대한 유효성을 걸 수 있다.

  • ge : ~이상
  • le : ~ 이하
  • gt : ~초과
  • lt: ~미만
@app.get("/items/{item_id}")
async def read_items(
    *,
    item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000),
    q: str,
    size: float = Query(..., gt=0, lt=10.5)
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results
post-custom-banner

0개의 댓글