[Fastapi] object 분석하기(FastAPI, APIRouter, ...)

3542 단어 FastAPIBackendBackend

예시 코드를 먼저 확인해봅시다.

from fastapi import FastAPI, APIRouter

# 1
app = FastAPI(
    title="Recipe API", openapi_url="/openapi.json"
) 

# 2
api_router = APIRouter()

# 3
@api_router.get("/", status_code=200)
def root() -> dict:
    """
    Root Get
    """
    return {"msg": "Hello, World!"}

# 4
app.include_router(api_router)


# 5
if __name__ == "__main__":
    # Use this for debugging purposes only
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8001, log_level="debug")

1. FastAPI Class

  • app 인스턴스 선언
  • FastAPI object이자 API를 위한 모든 기능을 제공함

APIRouter

  • api_router 인스턴스 선언
  • API endpoint들을 grouping
  • app.include_router 메소드로 app 인스턴스에 api_router를 등록(register)

왜 FastAPI랑 APIRouter가 분리되어 있을까?

  • 간단한 프로젝트의 경우 FastAPI 객체만 사용해도 무방(객체 자체의 역할은 비슷함)
  • router가 여러 개일 경우 main.py에서
    - FASTAPI 인스턴스를 선언하고
    • 각기 다른 router는 다른 module로부터 import해서
    • 한곳에 추가하는 역할
  • 마지막에 uvicorn을 통해 서버 run

query Parameter

  • path endpoint에 명시된 parameter가 아닌, router function에 인자로 받는 parameter
@api_router.get("/search/", status_code=200)  # 3
def search_recipes(
    keyword: Optional[str] = None, max_results: Optional[int] = 10  # 4 & 5
) -> dict:
  • 위에서 keywordmax_results가 keyword parameter이다.

    - 이것이 URL에서는 아래와 같이 표시될 것이다.

    http://localhost:8001/search/?keyword=chicken&max_results=2

  • keyword parameter는 type 과 default가 명시되기도 한다.(이 때 typing module에 의해 Optional한 argument가 정의되기도 한다.

Query class

  • pydantic 외에 부가적인 조건 및 validation 가능케 함
  • Swagger UI에서 Try it 클릭하면 이 조건이 나옴

예시)

keyword: Optional[str] = Query(None, min_length=3, example="chicken"), 

  • minlength가 추가적으로 표시된 것을 확인

좋은 웹페이지 즐겨찾기