앞에서 간단하게 FastAPI 프로그램을 만들어보았는데,  이대로 작성을 하면, API가 늘어날 수록 main.py 파일 점점 내용이 많아지고 커질거에요. 그러면, 코드 유지보수에 문제가 있으니, API들을 분류를 해서 분리할 필요가 있습니다. 보통 컨트롤러(controller)라는 이름으로 분리를 합니다. FastAPI 에서는 이것을 라우터(router)라고 표현합니다. 저는 router 라는 이름보다는 controller 를 선호합니다.

 

기존에 작성했던 코드에서 /items API가 이었는데, 이것을 별도의 컨트롤러로 분리를 해봅시다. C:\work\fapi 폴더 아래에 controller 폴더를 만듭니다.

그리고, 비어있는 __init__.py 파일을 만들어주고, items.py 도 만들어줍니다.

# controller/items.py
from fastapi import APIRouter
from typing import Union

router = APIRouter(
    prefix="/items",
    tags=["items"],
    responses={404: {"description": "Not found"}},
)

@router.get("/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

main.py 는 아래처럼 수정해줍니다.

from fastapi import FastAPI
from controller import items

app = FastAPI()

app.include_router(items.router)

@app.get("/")
def read_root():
    return {"Hello": "World"}

웹브라우저에서 http://localhost:8000/items/5?q=what 이라고 입력해봅니다. 기존과 같은 결과가 나왔다면 잘 된 것입니다.

이번에는 users 컨트롤러를 추가로 만들어볼까요? controller/users.py 파일을 만들어 주고,

from fastapi import APIRouter

router = APIRouter(
    prefix="/users",
    tags=["users"],
    responses={404: {"description": "Not found"}},
)

@router.get("/{user_id}")
def read_user(user_id: int):
    return {"user_id": user_id}

main.py 을 수정해줍니다.

from fastapi import FastAPI
from controller import items, users

app = FastAPI()

app.include_router(items.router)
app.include_router(users.router)

@app.get("/")
def read_root():
    return {"Hello": "World"}

그리고, 웹브라우저에서 http://localhost:8000/users/10 이라고 입력하면, 아래와 같이 나옵니다.

이렇게 하면, API가 계속 추가되어도 무리없이 작업을 할 수 있을 거에요.

다음번에는 DB(PostgreSQL)을 붙여봅시다.

 

+ Recent posts