<점프 투 FastAPI>을 읽고 공부한 내용을 정리한 글입니다.
app.get과 router.get의 코드가 둘 다 get이나 post를 쓰고 뒤에 URL이 온다는 점에서 쓰임새가 똑같아 보이는데 언제는 app.get을 쓰고 router.get을 쓰길래 둘의 차이가 궁금해졌다.
app은 FastAPI 객체를 만들고
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
def hello():
return {"message": "Hello World"}
router는 APIRouter 객체를 만든다.
from fastapi import APIRouter, FastAPI
app = FastAPI()
router = APIRouter()
@router.get("/items/")
def read_items():
return [{"name": "Empanada"}, {"name": "Arepa"}]
app.include_router(router)
이 때, APIRouter 클래스는 엔드포인트를 그룹화하고 모듈화 할 수 있다는 차이가 있다.
(엔드포인트란 클라이언트가 서버에 request를 보낼 때 처리되는 URL과 그에 따른 HTTP 요청 방식(GET, POST 등)을 말한다.)
예를 들어, 블로그 어플리케이션을 만든다고 할 때, APIRouter 클래스는 아래와 같이 사용자 관련 엔드포인트와 게시물 관련 엔드포인트로 그룹화하고 모듈화하여 코드를 더 구조화 할 수 있다. 따라서 대규모 어플리케이션에서는 APIRouter를 사용하는 것이 더 효율적이다.
from fastapi import FastAPI, APIRouter
app = FastAPI()
# 사용자 관련 엔드포인트를 담을 라우터 생성
user_router = APIRouter()
@user_router.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}
@user_router.post("/users/")
def create_user():
# 새로운 사용자 생성 로직
pass
# 게시물 관련 엔드포인트를 담을 라우터 생성
post_router = APIRouter()
@post_router.get("/posts/{post_id}")
def get_post(post_id: int):
return {"post_id": post_id}
@post_router.post("/posts/")
def create_post():
# 새로운 게시물 생성 로직
pass
# 애플리케이션에 라우터 추가
app.include_router(user_router, prefix="/users")
app.include_router(post_router, prefix="/posts")
FastAPI 클래스는 어플리케이션 레벨에서 엔드포인트를 설정하고 관리한다. 하지만 그 자체로 코드를 모듈화하고 엔드포인트를 그룹화하여 관리하는 용도로는 사용할 수 없다.
챗지피티가 정리한 app.get과 router.get의 차이
- app.get():
- FastAPI 인스턴스인 **app**에 직접적으로 라우팅 경로와 핸들러 함수를 추가하는 방법입니다.
- 이 방식은 작은 규모의 애플리케이션에서 라우팅을 정의하고 관리하기에 간단한 방법을 제공합니다.
- 단일 파일이나 작은 규모의 프로젝트에서 사용하기 좋습니다.
- 라우팅이 FastAPI 인스턴스에 직접 추가되므로, 애플리케이션 규모가 커질수록 코드 관리 및 유지보수에 어려움이 있을 수 있습니다.
- router.get():
- APIRouter 인스턴스인 **router**를 만들어서 거기에 라우팅 경로와 핸들러 함수를 추가하는 방법입니다.
- 이 방식은 라우터를 모듈화하고 기능 별로 묶어 애플리케이션을 조직화하는 데 사용됩니다.
- 큰 규모의 애플리케이션에서 라우팅을 모듈화하여 코드를 더 쉽게 유지하고 관리할 수 있습니다.
- **app.include_router(router)**를 사용하여 **APIRouter**를 FastAPI 인스턴스에 포함시킵니다.
'Tech > FastAPI' 카테고리의 다른 글
alembic 에러 (0) | 2024.01.16 |
---|---|
FastAPI Depends 클래스 - Dependency Injection 의존성 주입 (1) | 2024.01.12 |
FastAPI 시작하기 - FastAPI 설치 및 실행 (1) | 2024.01.09 |