web에서 일어나는 현상들은 api를 이용해 이루어진다. 이를 위해 Router가 필요하다. 질문관련 api들을 파일 하나로, 답변 관련 api들을 파일 하나로, 나머지들도 이런 형식으로 모은다. 이를 위해 domain이라는 폴더하위에 answer, question, user폴더를 만든다. 그리고 question폴더 하위에 question_router.py파일을 만든다.
router를 만드는 전체적인 흐름은 다음과 같다. question_router.py같은 파일을 만든다. 그 안에 api를 정의한다. 정의한 api를 main.py의 app에 등록한다. 이것을 question부터 실시해본다.
[domain / question / question_router.py]
1. question_router.py
- APIRouter를 통해 question관련된 api들은 /api/question가 앞에 붙을것이라고 알려준다.
- 즉, question_list함수가 실행되기 위해서는 127.0.0.1:8000/api/question/list url이 필요하다.
- db세션을 시작하고 close하지 않으면 커넥션이 발생하지 않아 오류 나타남
from fastapi import APIRouter #blueprint같은 존재
from database import SessionLocal
from models import Question
router = APIRouter(prefix="/api/question") #blueprint
@router.get("/list")
def question_list():
db = SessionLocal() #db 정의
question_list = db.query(Question).order_by(Question.create_date.desc()).all() #create_date를 내림차순으로 다가져오기
db.close() #커넥션 했음을 알려주는것
return question_list
1. main.py
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
from domain.question import question_router
app = FastAPI()
#---------- CORS 예외처리
origins = [
'http://localhost:5173',
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
#---------- router 등록
app.include_router(question_router.router)
3. 서버 구동(uvicorn main:app --reload): 127.0.0.1:8000/docs
- docs를 통해 api를 확인한다
- api/question/list 의 경우 question_list를 return 하도록 했다.
- 아래 사진에서도 확인할 수 있듯이 code:200에, response: json 으로 잘 출력되고 있음을 볼 수 있다.
'FrameWork > FastAPI' 카테고리의 다른 글
Pydantic & 스키마 (0) | 2024.05.26 |
---|---|
db커넥션 관리 (0) | 2024.05.25 |
database 구축 (0) | 2024.05.24 |
프로젝트 구조 (0) | 2024.05.24 |
FastAPI 준비 (0) | 2024.05.24 |