지난 실습에서 Field 정의를 통한 데이터 검증은 진행했으나 실제 각각의 엔드포인트에서의 검증은 진행하지 않았다.
예를 들어 아래 코드와 같은 상황에서 book_id 가 존재하지 않을 경우에 대한 처리를 한다고 하고, book_id 에 유효성 검사(양수이거나 특정 숫자 제한 내에 있어야하거나 등의)를 추가하고 싶다고 하자.
@app.get("/books/{book_id}")
async def read_book(book_id: int):
for book in BOOKS:
if book.id == book_id:
return book
유효성 검사(양수이거나 특정 숫자 제한 내에 있어야하거나 등의)는 필드에서 rating: int = Field(gt=-1, lt=6) 를 통해서도 가능하지만 이를 path 파라미터를 통해서도 비슷하게 가능하다.
이를 위해 다음 한 줄을 추가하여 Path 를 임포트한다.
from fastapi import FastAPI, Path
기존 함수의 인자에서 Path() 를 통해 데이터 검증을 다음처럼 추가할 수 있다.
@app.get("/books/{book_id}")
async def read_book(book_id: int = Path(gt=0)):
for book in BOOKS:
if book.id == book_id:
return book
@app.delete("/books/{book_id}")
async def delete_book(book_id: int = Path(gt=0)):
for i in range(len(BOOKS)):
if BOOKS[i].id == book_id:
BOOKS.pop(i)
break
스웨거에서 실행했을 때 만약 id에 음수값을 넣는다면 다음처럼 Unprocessable Entity 에러가 뜬다.


이번에는 쿼리 파라미터 데이터 검증을 해볼 것이다.
우선 Query 를 임포트해준다.
from fastapi import FastAPI, Path, Query
rating 으로 쿼리를 받는 함수에서 book_rating 에 대한 데이터를 Query() 를 통해 검증해줄 수 있다.
Path 와 사용법은 똑같다.
@app.get("/books/")
async def read_book_by_rating(book_rating: int = Query(gt=0, lt=6)):
books_to_return = []
for book in BOOKS:
if book.rating == book_rating:
books_to_return.append(book)
return books_to_return
스웨거에서 rating 에 -1을 입력하면 다음처럼 422 에러가 뜬다.
