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 |
댓글