APIRouter 클래스는 FastAPI 클래스와 동일한 방식으로 작동하지만 uvicorn으로 실행하려면 메인 애플리케이션에 include_router메서드를 통해 라우터를 인스턴스로 추가해줘야 한다.
uvicorn 실행 커맨드
uvicorn main:app --port 8000 --reload
Request body(요청 바디)
from pydantic import BaseModel
class Todo(BaseModel):
id: int
item: str
악의적인 공격의 위험을 막고, 요청 바디의 데이터가 적절한지 확인하기 위해 pydantic을 사용할 수 있다.
pydantic이란?
파이썬의 type annotation을 사용해서 데이터를 검증하는 파이썬 라이브러리이다.
스웨거 문서(애플리케이션 주소 뒤 /docs를 붙인 주소)에서 정보를 확인할 수 있다.
리독 문서(애플리케이션 주소 뒤 /redoc를 붙인 주소)에서도 확인이 가능하다.
class Todo(BaseModel):
id: int
item: str
class Config:
schema_extra = {
"example": {
"id": 1,
"item": "Example Schema"
}
}
샘플 데이터는 모델 클래스 안에 Config 클래스로 정의하면 된다.
Path parameters(경로 매개변수)
@todo_router.get("/todo/{todo_id}")
async def get_single_todo(todo_id: int) -> dict:
for todo in todo_list:
if todo.id == todo_id:
return {
"todo": todo
}
return {
"message": "Todo with supplied ID doesn't exist."
}
요청의 경로 매개변수{todo_id}로 받은 값을 라우터 함수에서 활용할 수 있다.
Path 클래스
from fastapi import Path
@todo_router.get("/todo/{todo_id}")
async def get_single_todo(todo_id: int = Path(..., title="The ID of the todo to retrieve.")) -> dict:
for todo in todo_list:
if todo.id == todo_id:
return {
"todo": todo
}
return {
"message": "Todo with supplied ID doesn't exist."
}