FastAPI 목차
쿼리 매개변수
쿼리란 URL에서 ?
후에 나오고 &
으로 구분되는 키와 값의 집합입니다.
예를 들어서 https://ssue-dev.tistory.com?category_id=1&post_id=1
와 같은 URL이 있을 때
쿼리 매개변수는 category_id
: 값 1
을 가지며, post_id
: 값 1
을 가집니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users(limit: int):
return {"limit": limit}
해당 코드를 작성한 뒤 http://127.0.0.1:8000/users?limit=100
를 호출하게 된다라면 {"limit":100}
의 값을 확인할 수 있습니다.
경로 매개변수가 아닌 다른 함수의 매개변수를 선언할 때 "쿼리"의 매개변수로 인식하게 됩니다.
함수의 매개변수를 선언하게 될 경우 쿼리에 해당 키와 밸류를 반드시 전달해야 합니다.
전달하지 않은 경우 이와 같은 에러를 확인할 수 있습니다.
{"detail":[{"loc":["query","limit"],"msg":"field required","type":"value_error.missing"}]}
그렇다면 매개변수가 선언된 경우 전달하는 방법밖에 없을까요?
아닙니다, 매개변수의 기본값을 추가할 수도 있고, 혹은 선택적으로 표현할 수도 있습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users(limit: int = 100): # 추가: 기본값
return {"limit": limit}
이 처럼 limit 값을 100으로 미리 지정을 해둘 수 있고,
limit 없이 호출하게 된다면 값이 100
으로 노출되어집니다.
선택적으로 표현할 때에는 기본값에 None
을 지정하게 되면 해당 쿼리를 전달하지 않아도 실행이 됩니다.
쿼리 매개변수 형 변환
FastAPI에서 타입을 bool
로 선언을 할 때
참의 값을 전달하기 위해서는 해당 목록 중 어떤 값을 보내야 참이라는 것을 알 수 있을까요?
True
, true
, 1
, on
, yes
정답은 위의 어떠한 값을 입력하여도 "참"이라는 것을 인지하게 됩니다.
어떤 값이 오더라도 참이라는 것을 확인할 수 있으나
정해진 규칙 없이 A라는 사람은 True로 B라는 사람은 1로 보내는 것보다,
정해진 규칙 혹은 값으로 보낸다면 의사소통이 더 원활해지겠죠?
문자열 열거형의 등장 (Enum)
from enum import Enum
from fastapi import FastAPI
app = FastAPI()
class UserLevel(str, Enum):
a = "a"
b = "b"
c = "c"
@app.get("/users")
def get_users(grade: UserLevel = UserLevel.a): #기본값을 지정시 하드코딩보다 직접 작성
return {"grade": grade}
위와 같이 작성 시 grade
의 매개변수는 UserLevel에서 지정된 a, b, c 중 하나의 값이어야만 합니다.
만약 grade에 대한 기본 값을 지정하고 싶다라면 하드코딩보다는 직접 작성하는 것이 좋다.
추후 a라는 값이 사라질 때, Python의 실행 단계에서 에러임을 확인할 수 있기 때문이다.
'Programming > Python' 카테고리의 다른 글
[FastAPI] 응답 모델 (0) | 2022.08.13 |
---|---|
[FastAPI] 요청 본문 (0) | 2022.08.12 |
[FastAPI] 경로 매개변수 (0) | 2022.08.10 |
[FastAPI] FastAPI 설치 (0) | 2022.08.09 |
[FastAPI] FastAPI 소개 (0) | 2022.08.08 |