파이썬 웹 프레임워크 중 가장 빠른 속도를 지닌 프레임워크이다.
속도와 개발 속도 모두 엄청 빠르다.
FastAPI에서 operation은 HTTP의 method를 의미한다.
@app.get("/api/~")
async def getItem():
return ~
from pydantic import BaseModel
from typing import List, Dict
class ContainerSummaryDTO(BaseModel):
name: str
cpu_usage: str
memory_usage: str
FastAPI의 라우팅은 매우 유연하고, 번거로운 일을 처리해준다.
routing이란, 클라이언트가 서버로 보내는 HTTP request들을 처리하는 과정을 말한다.
HTTP request들은 정해진 routes로 전달되며, 이는 정해진 핸들러를 통해서 요청과 응답을 처리한다.
@app.get('/')
def read_root():
return {"message": "API is running"}
라우팅은 app 변수로부터 다뤄진다. uvicorn을 사용하여 FastAPI 인스턴스를 지정해주고 application을 실행시킬 수 있다.
uvicorn src.app:app --host 0.0.0.0 --port 8000 --reload
todo_list = []
@todo_router.post("/todo")
async def add_todo(todo: dict) -> dict:
todo_list.append(todo)
return {"message": "Todo added successfully"}
@todo_router.get("/todo")
async def retrieve_todos() -> dict:
return {"todos": todo_list}
만약 이렇게 route 경로에 파일을 만들고 api를 작성한다면
@app.get('/')
def read_root():
return {"message": "API is running"}
app.include_router(router=todo_router)
app.include_router로 APIRouter 클래스로 정의된 route들을 등록해줘야한다.
DTO는 Data Transfer Object이다.
네트워크를 통해 보낼 데이터를 매핑하는 클래스이다.
데이터를 네트워크에서 주고받기 위해 사용된다.
즉, DB에서 데이터를 얻어 service나 controller(router)등으로 보낼 때 사용하는 객체이다.
-> DTO와 모델은 역할이 다르기 때문에 반드시 값이 일치할 필요는 없다.
FastAPI에서는 sqlalchemy를 활용하여 관계형 데이터베이스를 모델링하는데,
models는 FastAPI에서 데이터베이스 테이블(스키마)를 뜻한다.
class Photo(Base):
__tablename__ = "photo"
photo_id = Column(Integer, primary_key=True)
filename = Column(String(255), default="unknown")
type = Column(String(255), default="unknown")
src = Column(String(255), default="unknown") # 이미지 저장 경로
created_time = Column(DateTime, default=datetime.now)
https://lucky516.tistory.com/86
https://velog.io/@chappi/FastAPI%EB%A5%BC-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90-2%EC%9D%BC%EC%B0%A8-Routing-APIRouter-Pydantic-Model-Query-Route-Request-Parameter
https://mopil.tistory.com/62