FastAPI 목차
경로 매개변수
- 파이썬 포맷 문자열이 사용하는 동일한 문법으로 "매개변수" 또는 "변수"를 경로(URL)에 선언할 수 있습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id):
return {"user_id": user_id}
위의 코드에서는 "user_id"가 매개변수입니다.
Path에 선언한 변수를, 함수에서 전달받아 사용할 수 있습니다.
user_id에 1을 대입하여 "http://localhost:8000/users/1"를 호출 시 리턴하는 데이터는 정수일까요? 문자열일까요?
보다시피 문자열의 "1"에 대해서 응답받습니다.
원하는 값이 문자열이었다면 문제가 없었겠지만 만약 받고 싶었던 데이터가 정수형을 받고 싶었다면 어떻게 해야 할까요?
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int): # 타입힌트 제공 (int)
return {"user_id": user_id}
위와 같이 user_id에 대하여 int값을 지정후
다시 "http://localhost:8000/users/1"를 호출하게 된다면 정수형의 응답을 받게 됩니다.
또한 정수형이 아닌 다른 값을 기입하게 된다면 오류 메시지를 전달합니다.
이전에 확인해본 Swagger API를 보면, 선언한 타입이 정수형 임을 확인할 수 있습니다.
순서 문제
경로를 만들 때 순서에 대한 문제가 발생될 수 있습니다.
"/users/me"와 같이 현재 사용자 데이터를 가져오는 것과,
"/users/{user_id}"와 같이 사용자 아이디를 통하여 특정 사용자를 가져올 수 있다고 정의를 해봅시다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
def get_current_user():
return {"user_id": 1}
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}
경로 동작은 순차적으로 평가되기에 "/users/me"가 먼저 선언되어야 합니다.
그렇지 않으면 매개변수 user_id의 값을 me로 인지하면서, 정수형이 아니기에 에러로 반환됩니다.
{"detail":[{"loc":["path","user_id"],"msg":"value is not a valid integer","type":"type_error.integer"}]}
'Programming > Python' 카테고리의 다른 글
[FastAPI] 응답 모델 (0) | 2022.08.13 |
---|---|
[FastAPI] 요청 본문 (0) | 2022.08.12 |
[FastAPI] 쿼리 매개변수 (0) | 2022.08.11 |
[FastAPI] FastAPI 설치 (0) | 2022.08.09 |
[FastAPI] FastAPI 소개 (0) | 2022.08.08 |