본문 바로가기

FastAPI

[FastAPI] Depends를 이용한 Validation

728x90

이전에 Pydantic을 이용한 데이터 검증을 해봤습니다. (https://run-devops.tistory.com/47)

그러나, 때로는 조금 더 깊히 데이터를 검증할 필요가 있을 것이라고 생각하는데요, 향상된 데이터 검증을 위해 FastAPI 에서는 Depends 기능을 사용해 볼 예정인데, 사실 이 기능은 이름에서도 알 수 있듯이 의존성 주입을 위해서 사용합니다. 그 부분은 다음에 다뤄볼 예정이고 오늘은 Depends를 이용한 데이터 검증을 해보도록 하겠습니다.

 

from fastapi import Depends, FastAPI, HTTPException, Query

app = FastAPI()


def validate_id(id: str = Query()):
    if id in ["a_product", "b_product", "c_product"]:
        return id
    else:
        raise HTTPException(status_code=400, detail="Invalid id")


@app.get("/item")
def create_item(id: str = Depends(validate_id)):
    return {"id": id}

 

위 코드는 다음과 같이 설명 할 수 있습니다.

  • id는 URI에 존재하지 않으므로 Query 파라미터로 인식하여 동작합니다. (굉장히 똑똑합니다..)
  • id에 validate_id 함수를 의존성으로 주입하여 검증을 수행합니다.
  • 리스트에 id와 일치하는 값이 있으면 id를 리턴하고 없으면 400을 리턴합니다.

정말 위 코드가 그렇게 동작하는지 curl 테스트로 검증해 보도록 하겠습니다.

# 정상적인 요청
> curl 'http://localhost:8080/item?id=a_product' 
{"id":"a_product"}

# 비정상적인 요청
> url 'http://localhost:8080/item?id=a_prodaaa' 
{"detail":"Invalid id"}

 

curl 테스트를 결과로 validate_id 함수 안에 있는 리스트에 포함되는 경우 id를 리턴하고 아닌 경우 400과 함께 에러 메세지를 리턴합니다. 비록 간단하게 작성하였지만 검증을 수행하는 함수를 작성할 수 있으므로 필요에 따라 더 복잡한 로직을 구현할 수 있을 것 같습니다.

 

다음에는 Depends를 이용하여 Database를 주입하는 방법에 대해 작성하고자 합니다. 읽어주셔서 감사합니다.

728x90

'FastAPI' 카테고리의 다른 글

[FastAPI] Pydantic을 이용한 Validation  (1) 2024.02.24
[FastAPI] Simple FastAPI  (0) 2024.01.13