[FastAPI Docs] Path Params

JeongChaeJin·2022년 8월 23일
0
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):
  • 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으로 경로 매개변수를 만든다.

  • 문서에서도 정상 적용이 되는 것을 확인해볼 수 있다.
profile
OnePunchLotto

0개의 댓글