쿼리매개변수와 경로매개변수 Body요청 유효성검사의 차이점
쿼리매개변수: Query
경로매개변수: Path
Body 요청: Field
Query, Path, Field 의 사용법은 거의 다 동일하다.
형식: [Query | Path | Field](기본값, 유효성검사필드…)
1. 기본검사
[code]
from fastapi import FastAPI, Query
# from fastapi import Path # 경로 매개변수 검사용
app = FastAPI()
@app.get(“/items/”)
aysnc def read_items(q: Optional[str] = Query(None, min_length=10, max_length=50)):
pass
[/code]
2. 정규식으로 검사
[code]
aysnc def read_items(q: Optional[str] = Query(None, regex=”^fixedquery$”)):
pass
[/code]
3. required
1) required 외에 다른 검사가 필요할 경우
[code]
async def read_items(q: Optional[str] = Query(…, min_length=3)):
pass
[/code]
2) required 만 필요할 경우
[code]
async def read_items(q: str):
pass
[/code]
4. 쿼리매개변수를 List 로 받을 때
ex) /items/?q=foo&q=bar
1) 매개변수가 선택사항일때
[code]
async def read_items(q: Optional[List[str]] = Query(None)):
pass
[/code]
2) 기본값을 List 로 할때
[code]
async def read_items(q: List[str] = Query([“foo”, “bar”])):
pass
[/code]
5. 매개변수에 문서를 위한 메타데이터 추가
# title, description
# deprecated=True: 더 이상 사용되지 않는 매개변수 표시
[code]
async def read_items(q: Optional[str] = Query(None, title=”Query String”, description=”This is Query String”, min_length=3)):
pass
[/code]
6. Body 유효성 검사 예
데이터 모델에 Field 로 선언한다.
[code]
class Item(BaseModel):
name:str
desc: Optional[str] = Field(None, title=”item description”, min_length=3) # 선택
price: float = Field(…, gt=0, description=”This is price”) # 필수, 0보다 커야 함
tax: Optional[float] = None # 선택
async def itme(item_id: int, item:Item):
return {
“item_id”: item_id,
“item”: item
}
[/code]