Query parameter와 같이 Path parameter에도 유효성 기준을 설정할 수 있다.
Query
때와 마찬가지로 fastapi
에서 Path
를 import 해온다.
from fastapi import FastAPI, Path, Query
from typing import Optional
app = FastAPI()
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는 항상 필수 요소이기 때문에 ...
로 필수라는 표시를 해줘야한다.
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)가 되어야 한다.
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