본문 바로가기
Web/Python

FastAPI 기초(3) - 경로 매개변수

by SeleniumBindingProtein 2023. 1. 30.
728x90
반응형

파이썬 포맷 문자열이 사용하는 동일한 문법으로 매개변수 또는 변수를 경로에 선언할 수 있음

  • 경로 매개변수 item_id 값은 함수의 item_id 인자로 전달됨
from fastapi import FastAPI

app = FastAPI()


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

 

1. 타입이 있는 매개변수

  • item_id => int로 선언
from fastapi import FastAPI

app = FastAPI()


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

 

2. 순서 문제

  • /users/me를 먼저 선언하지 않으면, /users/{user_id}가 매개변수 user_id의 값을 "me"라고 생각해서 /users/me도 연결하는 문제가 발생함
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}

 

3. 사전정의 값

  • 경로 매개변수를 받는 경로 동작이 있지만, 유효하고 미리 정의할 수 있는 경로 매개변수 값을 원한다면 파이썬 표준 Enum을 사용할 수 있음

3-1) Enum 클래스 생성

  • Enum을 임포트하고 str과 Enum을 상속하는 서브 클래스를 만들고, str을 상속함으로써 API 문서는 값이 string 형이어야 하는 것을 알게 되고 제대로 렌더링 할 수 있게 됨
  • 고정값으로 사용할 수 있는 유효한 클래스 어트리뷰트를 만듦

3-2) 경로 매개변수 선언

  • 생성한 열거형 클래스(ModelName)를 사용하는 타입 어노테이션으로 경로 매개변수를 만듦

 

3-3) 열거형 멤버 비교

  • 열거체 ModelName의 열거형 멤버를 비교할 수 있음
    • if model_name is ModelName.alexnet: return {"model_name": model_name, "message": "Deep Learning FTW!"}

3-4) 열거형 값 갖져오기

  • model_name.value 또는 일반적으로 your_enum_member.value를 이용하여 실제값을 가져올 수 있음

3-5) 열거형 멤버 반환

  • 경로 동작에서 중첩 JSON 본문(예: dict) 역시 열거형 멤버를 반환할 수 있음
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 is 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"}

 

4. 경로를 포함하는 경로 매개변수

  • URL을 사용하여 path를 포함하는 경로 매개변수를 선언 할 수 있음
  • 매개변수의 이름은 file_path이고, :path는 매개변수가 경로와 일치해야 함
from fastapi import FastAPI

app = FastAPI()


@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
    return {"file_path": file_path}
728x90
반응형

'Web > Python' 카테고리의 다른 글

FastAPI 기초(4) - 쿼리 매개변수  (0) 2023.01.30
FastAPI 기초(2) - Python coding style  (1) 2023.01.26
FastAPI 기초(1) - 기본 개념  (0) 2023.01.26

댓글