FastAPI - 20 (APIRouter)
APIRouter
FastAPI 애플리케이션의 경로 작업(route operations)을 구조화하고 모듈화 합니다.
예제 코드를 작성합니다.
디레토리 및 파일 구조
. main.py
└── service
├── notice
├──── notice_route.py
├── qna
└──── qna_route.py
notice_route.py
/service/notice
경로에 대한 경로 작업을 정의합니다.
# 웹 서비스의 경로(엔드포인트)를 생성
from fastapi import APIRouter
# APIRouter의 인스턴스를 생성.
# URL 접두어로 /service/notice를 사용
# 이 라우터에 정의된 모든 경로가 이 URL 접두어로 시작됨을 의미합니다
router = APIRouter(prefix="/service/notice")
# 공지사항 변수 선언 및 초기화
_notices = [
{"id": 1, "title": "Notice 1", "content": "This is the content of Notice 1."},
{"id": 2, "title": "Notice 2", "content": "This is the content of Notice 2."}
]
# /service/notice/에 대한 GET 요청
@router.get("/")
def get_all_notices():
# 모든 공지사항을 반환
return _notices
# 경로 매개변수 /{notice_id}를 포함한 GET 요청의 라우트를 정의
@router.get("/{notice_id}")
def get_notice(notice_id: int):
# _notices 리스트를 loop를 돌면서 id가 notice_id와 일치하는 첫 번째 공지사항을 return
notice = next((notice for notice in _notices if notice["id"] == notice_id), None)
# 공지사항이 있다면
if notice:
return notice
# 공지사항이 없다면
return {"message": "Notice not found"}, 404
qna_route.py
/service/qna
경로에 대한 경로 작업을 정의합니다.
from fastapi import APIRouter
router = APIRouter(prefix="/service/qna")
_qna = [
{"id": 1, "title": "Qna 1", "content": "This is the content of Qna 1."},
{"id": 2, "title": "Qna 2", "content": "This is the content of Qna 2."}
]
@router.get("/")
def get_all_qnas():
return _qna
@router.get("/{qna_id}")
def get_qna(qna_id: int):
qna = next((qna for qna in _qna if qna["id"] == qna_id), None)
if qna:
return qna
return {"message": "Qna not found"}, 404
main.py
FastAPI 애플리케이션의 메인 파일입니다.
/service/notice
경로와 /service/qna
경로를 import 합니다.
from fastapi import FastAPI
# 조금 전 작성 한 service 디렉토리의 notice_route.py와 qna_route.py를 import
from service.notice import notice_route
from service.qna import qna_route
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello World"}
# notice_route를 main 애플리케이션 app에 포함
app.include_router(notice_route.router)
app.include_router(qna_route.router)
실행 및 테스트
FastAPI 애플리케이션을 실행합니다.
uvicorn main:app --reload
notice route 테스트
공지사항 목록을 가져오겠습니다.
http://localhost:8000/service/notice/
APIRouter(prefix="/service/notice")
로 지정한 prefix인 /service/notice
로 접속합니다.
notice_route에 의해 def get_all_notices():
함수가 실행되어 공지사항 리스트가 반환됩니다.
공지사항 1번을 가져오겠습니다.
http://localhost:8000/service/notice/1
notice id 1
을 경로 매개변수로 지정하여 접속합니다.
공지사항 1
번에 대한 정보가 반환됩니다.
qna route 테스트
qna 목록을 가져오겠습니다.
http://localhost:8000/service/qna/
APIRouter(prefix="/service/qna")
로 지정한 prefix인 /service/qna
로 접속합니다.
qna 목록이 반환됩니다.
qna 1번을 가져오겠습니다.
http://localhost:8000/service/qna/1
qna 1번에 대한 정보가 반환됩니다.
해시태그: #fastapi #uvicorn #APIRoute
댓글남기기