FastAPI는 Python 웹 프레임워크로서, 빠르고 실시간성이 뛰어나며 API 서버를 쉽게 구축할 수 있는 기능을 제공합니다. FastAPI를 사용하면서 문서화는 매우 중요한 부분입니다. 문서화를 통해 API 엔드포인트의 목적, 요청 및 응답 형식, 인증 방법 등을 이해하기 쉽게 제공할 수 있습니다.
Swagger 문서 자동 생성
FastAPI는 Swagger UI 또는 ReDoc와 같은 도구를 통해 API 문서를 자동으로 생성합니다. 이를 위해 FastAPI는 Pydantic 모델을 사용하여 엔드포인트의 요청 및 응답 형식을 정의하고, 해당 모델을 기반으로 문서를 생성합니다.
FastAPI 앱 객체에 대한 docs_url
및 redoc_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
엔드포인트는 각각 items
와 users
모듈에 정의된 라우터로 처리됩니다. tags
매개변수를 사용하여 문서에서 각 모듈의 목적을 정의할 수 있습니다.
참고 자료
- FastAPI 공식 문서: https://fastapi.tiangolo.com/
- FastAPI Github 저장소: https://github.com/tiangolo/fastapi