개요
2024.10.29-[Python] FastAPI 란에서 FastAPI에 대해 소개하고 기본 구조에 대해서 알아보았다. 이번 글에서는 FastAPI를 사용했을 때 요청 데이터에 접근하는 방법에 대해 알아본다.
경로 매개변수
애플리케이션의 경로 매개변수는 매핑된 함수의 매개변수로 전달된다.
from fastapi import FastAPI
import json
app = FastAPI()
@app.post('/index/{cmd}')
async def mgnt_index(cmd):
response = {'cmd': cmd}
return json.dumps(response)
경로 매개변수 타입 지정
매핑된 함수의 매개변수에 타입 어노테이션을 사용함으로써 경로 매개변수의 데이터형을 지정할 수 있다.
from fastapi import FastAPI
import json
app = FastAPI()
@app.post('/index/{cmd}/{object}')
async def mgnt_index(cmd: str, object: int):
response = {'cmd': cmd,
'type_cmd': type(cmd).__name__,
'object': object,
'type_object': type(object).__name__
}
return json.dumps(response)
타입 어노테이션을 사용하면 FastAPI가 요청 데이터를 자동으로 파싱 한다. 만약 데이터형에 맞지 않은 값이 요청되면 아래와 같이 데이터 타입이 맞지 않다고 응답한다.
경로 순서
경로와 메서드를 지정할 때 고정 경로와 동적 경로가 함께 사용되는 경우가 있다. 경로는 순차적으로 실행되기 때문에 우선순위가 높은 경로부터 나열해주어야 한다.
@app.post('/index/create')
async def create_index():
response = {'cmd': None}
return json.dumps(response)
@app.post('/index/{cmd}/{object}')
async def mgnt_index(cmd: str, object: int):
response = {'cmd': cmd,
'type_cmd': type(cmd).__name__,
'object': object,
'type_object': type(object).__name__
}
return json.dumps(response)
Enum으로 매개변수 제한
만약 처리할 경로 매개변수의 값을 제한하고 싶다면 Enum을 활용하면 된다.
먼저 다음과 같이 Enum과 사용할 데이터 타입에 해당하는 클래스를 상속한 클래스를 생성한다. 이 글에서는 str를 상속했다.
from enum import Enum
class indexCmd(str, Enum):
create = 'create'
remove = 'remove'
update = 'update'
delete = 'delete'
그리고 타입 어노테이션으로 경로에 매핑된 함수의 매개변수에 정의한 클래스를 전달한다.
@app.post('/index/{cmd}/{object}')
async def mgnt_index(cmd: indexCmd, object: int):
response = {'cmd': cmd,
'type_cmd': type(cmd).__name__,
'object': object,
'type_object': type(object).__name__
}
return json.dumps(response)
참고 문서
https://fastapi.tiangolo.com/ko/tutorial/path-params/