[FastAPI] Validation

도톨이·2024년 3월 5일

FastAPI

목록 보기
8/17
post-thumbnail

Path Parameter Validation

지난 실습에서 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 Parameter Validation

이번에는 쿼리 파라미터 데이터 검증을 해볼 것이다.

우선 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 에러가 뜬다.

profile
Kotlin, Flutter, AI | Computer Science

0개의 댓글