from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
Type이 있는 매개 변수
async def read_item(item_id: int):
Pydantic
- 데이터 검증이 내부적으로 수행된다.
- str, float, bool과 다른 복잡한 데이터 타입 선언 가능하다.
순서 문제
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
- 경로 동작은 순차적으로 진행
- user_id 이전에 me를 선언해야 me에 대한 데이터를 정확히 가져올 수 있다.
- /user/me를 하면 user_id 값을 me라고 생각해 처리할 수 있기 때문이다.
사전 정의 값
- 경로 매개변수를 받는 경로 동작이 있지만, 유효하고 미리 정의할 수 있는 경로 매개 변수 값을 원하면 Enum(Python 표준)사용 가능
Enum Class 생성
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name == ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
- str, Enum 상속하는 서브 클래스 생성
- str 상속 함으로서 API 문서는 string 형이어야한다는 것을 알게 되고, 제대로 렌더링 하게 된다.
- 고정 값으로 사용할 수 있는 유효 클래스 Attribute를 만든다.
async def get_model(model_name: ModelName):
- 열거형 클래스를 사용하는 Type Annotation으로 경로 매개변수를 만든다.
- 문서에서도 정상 적용이 되는 것을 확인해볼 수 있다.