[python] FastAPI에서 문서화하기

FastAPI는 Python 웹 프레임워크로서, 빠르고 실시간성이 뛰어나며 API 서버를 쉽게 구축할 수 있는 기능을 제공합니다. FastAPI를 사용하면서 문서화는 매우 중요한 부분입니다. 문서화를 통해 API 엔드포인트의 목적, 요청 및 응답 형식, 인증 방법 등을 이해하기 쉽게 제공할 수 있습니다.

Swagger 문서 자동 생성

FastAPI는 Swagger UI 또는 ReDoc와 같은 도구를 통해 API 문서를 자동으로 생성합니다. 이를 위해 FastAPI는 Pydantic 모델을 사용하여 엔드포인트의 요청 및 응답 형식을 정의하고, 해당 모델을 기반으로 문서를 생성합니다.

FastAPI 앱 객체에 대한 docs_urlredoc_url 매개변수를 사용하여 문서의 엔드포인트를 지정할 수 있습니다.

from fastapi import FastAPI

app = FastAPI(docs_url="/api/docs", redoc_url="/api/redoc")

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = Query(None, description="Query parameter")):
    """
    아이템을 읽습니다.
    """
    return {"item_id": item_id, "q": q}

위의 예시에서, /api/docs는 Swagger UI를 포함한 문서를 보여주는 엔드포인트이고, /api/redoc는 ReDoc를 이용한 문서를 보여주는 엔드포인트입니다.

엔드포인트 문서화

FastAPI를 사용하여 엔드포인트를 정의할 때, 각 엔드포인트에 대한 설명, 경로 매개변수, 쿼리 매개변수 및 요청/응답 형식을 문서화할 수 있습니다.

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = Query(None, description="Query parameter")):
    """
    아이템을 읽습니다.

    - **item_id**: 아이템의 고유 식별자입니다.
    - **q**: 검색어입니다. (선택적)

    **응답 형태**
    - `item_id`: 아이템의 고유 식별자입니다.
    - `q`: 받은 검색어입니다.
    """
    return {"item_id": item_id, "q": q}

위의 예시에서, @app.get("/items/{item_id}") 데코레이터 아래에 작성된 문자열은 해당 엔드포인트에 대한 설명입니다. 경로 매개변수와 쿼리 매개변수는 각 매개변수 이름을 볼드체로 표시하여 문서화합니다. 또한, 응답 형태 문서도 작성하여 클라이언트가 어떤 형식의 응답을 받을 수 있는지를 알 수 있습니다.

모듈화된 문서 작성

FastAPI는 여러 개의 라우터를 사용하여 큰 규모의 API를 모듈화할 수 있는 기능을 제공합니다. 이를 통해 API 문서를 모듈별로 작성할 수 있습니다.

from fastapi import FastAPI
from .routers import items, users

app = FastAPI()

app.include_router(items.router, prefix="/items", tags=["아이템 관리"])
app.include_router(users.router, prefix="/users", tags=["사용자 관리"])

위의 예시에서, /items 엔드포인트와 /users 엔드포인트는 각각 itemsusers 모듈에 정의된 라우터로 처리됩니다. tags 매개변수를 사용하여 문서에서 각 모듈의 목적을 정의할 수 있습니다.

참고 자료