파이썬으로 웹 애플리케이션을 개발할 수 있게 해주는 고성능 웹 프레임워크 고성능 비동기 웹 애플리케이션을 쉽게 개발할 수 있도록 설계 REST API 개발에 적합
파이썬에서 ASGI 애플리케이션을 실행하기 위한 고성능 비동기 웹 서버 개발 환경 뿐 아니라, 프로덕션 환경에서도 사용 가능
웹 애플리케이션에서 클라이언트의 요청을 특정 함수나 로직에 매핑하는 과정 FastAPI에서는 경로 운영자 데코레이터(path operation decorator)를 이용해서 정의
APIRouter 클래스는 라우팅을 모듈화하고 그룹화하는 데 사용
pydantic은 데이터 유효성 검사와 데이터 직렬화를 자동으로 처리 ⇒ 요청 본문에 포함된 데이터를 쉽게 검증할 수 있음
from pydantic import BaseModel
class Todo(BaseModel):
id: int
item: str
URL의 일부로 전달되는 변수 URL 경로에 중괄호를 사용해 표시 클라이언트가 서버로 요청을 보낼 때, 특정 리소스를 지정할 수 있게 함 /users/{user_id} ⇐ /users/100
@todo_router.get("/todo/**{todo_id}**")
async def retrive_todo(**todo_id**: int) -> dict:
# [ { id: 3, item: "할 일" }, { id: 12, item: "할 일" } ]
for todo in todo_list:
if todo.id == todo_id:
return {"todo": todo}
return {"message": "일치하는 할 일이 없습니다."}
● https://fastapi.tiangolo.com/tutorial/path-params/ ● Path 클래스는 경로 매개변수에 대한 추가적인 메타데이터 및 유효성 검사를 제공하는 데 사용 ● 경로 매개변수에 기본값 설정, 유효성 검사, 설명 추가 등의 작업이 가능 ● OpenAPI 기반 문서(Swagger, ReDoc 등)를 자동 생성할 때 라우트 관련 정보를 함께 문서화하도록 도움
@todo_router.get("/todo/{todo_id}")
async def retrive_todo(todo_id: int = **Path(..., title="조회할 할 일의 ID", ge=1)**) -> dict:
# [ { id: 3, item: "할 일" }, { id: 12, item: "할 일" } ]
for todo in todo_list:
if todo.id == todo_id:
return {"todo": todo}
return {"message": "일치하는 할 일이 없습니다."}
URL 경로에 포함되지 않고 ? 뒤에 추가되는 매개변수 쿼리 매개변수는 주로 필터링, 정렬, 페이징 등의 작업을 위해 사용 http://example.com/items/?name=foo&limit=10
@todo_router.get("/todo/search")
async def search_todos(item: str) -> dict:
result = []
for todo in todo_list:
if item in todo.item:
result.append(todo)
return {"todos": result}
curl -X POST <http://localhost:8000/todo> -H "Content-Type: application/json" -d "{ \\"id\\": 1, \\"item\\": \\"First
Todo\\" }"