본문 바로가기
Dev DBAN/개발 이야기

FAST API로 REST API만들기 - APIRouter

by 디반 2022. 1. 18. 20:13
반응형

 

FastAPI로 REST API 만들기

3. APIRouter

 

하나의 파일에 모든 기능들을 만들어서 집어 넣는다면 나중에는 결국 내가 짠 코드가 어디에 어떻게 작동하는지 헤매는 경우가 발생해 오류가 나도 오류를 어디서 어떻게 고쳐야 될지 모르는 상황이 발생하게 됩니다.

그래서 오늘은 그러한 것들을 최대한 방지하기 위해 캡슐화를 FastAPI에서 제공하는 APIRouter를 이용해 한 번 나눠 보려고 합니다.

 

일단 먼저 프로젝트를 아래와 같이 폴더와 파일을 생성해 나눠 줍니다. 

분명 기존에는 D:\python\Testapi 경로 아래에 main, db_class, db_connection 3가지의 파일만 존재했었는데 이 파일들을 api라는 폴더안에 api_get,api_post라는 파일과 conn 폴더 안에 db_class, db_connection 파일 마지막으로 main 파일 이렇게 나뉘게 되었습니다. 

이렇게 나눴다면 새로 생성한 api 폴더 안 파일에 기능을 나눠줄 텐데 main.py 에 존재하는 코드를 가져와 api_get.py과 api_post.py에 원하는 기능들만 작성해 줍니다.

 

api_get.py

from fastapi import APIRouter
from conn.db_connection import engineconn
from conn.db_class import Test

router = APIRouter()
engine = engineconn()
session = engine.sessionmaker()

@router.get("/",tags=["get"])
async def first_get():
    example = session.query(Test).all()
    return example

api_post.py

from fastapi import APIRouter
from pydantic import BaseModel
from conn.db_connection import engineconn
from conn.db_class import Test

router = APIRouter()
engine = engineconn()
session = engine.sessionmaker()

class Item(BaseModel):
    name : str
    number : int

@router.post("/post", tags=["post"])
async def first_post(item:Item):
    addMemo = Test(name=item.name, number=item.number)
    session.add(addMemo)
    session.commit()
    return item

 

여기에 보면 이 전 포스팅과 코드가 조금 씩 다른 것을 볼 수 있습니다.

router = APIRouter()

@router.get("/", tags=["get"])

@router.post("/post", tags=["post"])

 

APIRouter를 이용해 다른 폴더에 있는 Method를 Router를 통해 메인에 보내질 수 있는 통로를 만들어주는 것입니다.

그래서 기존에는 아래와 같이 작성을 했지만 이제는 APIRouter를 이용해서 만들어서 main으로 보내주기만 하면 됩니다.

app = FastAPI

@app.get("/", tags=["get"])

@app.post("/post", tags=["post"])

 

그렇다면 main.py는 어떻게 설정을 해줘야될까요?

main.py

from fastapi import FastAPI
from api import api_get,api_post

def include_router(app):
    app.include_router(api_get.router, prefix='/main')
    app.include_router(api_post.router, prefix='/main')

def start_application():
    app = FastAPI()
    include_router(app)
    return app

app = start_application()

 

그 다음 우리는 main.py를 실행 시켜봅시다.

uvicorn app.main:app --reload

위와 같이 코드를 적고 실행 시키면 아래와 같이 정상적으로 작동이 되는 것을 확인 할 수 있습니다.

 

이제 우리는 하나의 파일에 모든 기능을 적어서 만드는 하드 코딩이 아닌 캡슐화를 통해 조금 더 체계적이고 실용적인 프로젝트를 짤 수 있게 되었습니다 :)

 

 

반응형

댓글


"); wcs_do();