Fast API 사용해보기 - Path Parameter

JinWooHyun·2021년 8월 10일
1

Fast API 프로젝트

목록 보기
2/6

FastAPI에서 Path Parameter 를 다루는 방법도 간단합니다.

타입이 없는 파라미터의 경우

@app.get("/items/{item_id}")
async def read_item(item_id):
    return {"item_id": item_id}

타입이 있는 파라미터의 경우

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

FastAPI에서는 타입 선언을 하면 자동으로 요청을 해당 타입으로 파싱해주고, 데이터 검증을 실시합니다. 만약 int타입으로 선언한 함수에 str를 전달하면

{
  "detail": [
    {
      "loc": [
        "path",
        "item_id"
      ],
      "msg": "value is not a valid integer",
      "type": "type_error.integer"
    }
  ]
}

위와 같이 에러가 난 지점과 에러를 반환하게 됩니다.

공식 문서에 따르면 모든 데이터 검증은 Pydantic에 의해 수행되며, str, float, int 외 다른 복잡한 데이터 타입도 가능하다고 명시되어 있습니다.

먄약 미리 정의할수 있는 path parameter 값을 쓰고 싶을 때는 파이썬 enum 하위 클래스를 만들어 사용할 수 있습니다

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을 상속함으로써 API 문서도 타입을 제대로 렌더링 할 수 있게 됩니다.
(str을 상속받지 않아도 문서는 똑같은 형태로 렌더링이 되는 것으로 확인됩니다. ^^;)

실제 경로를 포함하는 path parameter를 사용하기 위해서는

@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
    return {"file_path": file_path}

:path를 이용해 path parameter가 경로와 일치해야함을 알려주어야 합니다.

profile
Unicorn Developer

0개의 댓글