전역 의존성

전역 의존성 (Global Dependencies)

"모든 API에 공통으로 검증 같은 걸 적용하고 싶다" — 예를 들어 모든 요청이 특정 헤더 토큰을 들고 있는지 확인해야 하는 상황이죠. 이럴 때 path operation 하나하나에 의존성을 달지 말고, 앱 전체에 한 번에 등록할 수 있어요. 그게 전역 의존성(Global Dependencies)입니다.

출처: 공식문서

어떤 종류의 애플리케이션에서는 의존성을 전체 애플리케이션에 추가하고 싶을 수 있어요.

path operation 데코레이터에 dependencies를 추가하는 것과 비슷하게, FastAPI 애플리케이션에도 추가할 수 있습니다.

그렇게 하면 그 의존성들은 앱 안의 모든 path operation에 적용돼요:

from typing import Annotated

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_token(x_token: Annotated[str, Header()]):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


async def verify_key(x_key: Annotated[str, Header()]):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])


@app.get("/items/")
async def read_items():
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]


@app.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]

여기서 FastAPI(dependencies=[...])에 인증용 의존성 두 개를 넣었어요. 이제 /items//users/든 어떤 요청이 오든, 그 두 의존성이 먼저 실행되면서 X-TokenX-Key 헤더를 확인하게 됩니다. 검증에 실패하면 해당 요청은 바로 400 오류로 거부되고요.

path operation 데코레이터에 의존성을 추가할 때 배운 모든 개념이 여전히 적용되지만, 이 경우 대상이 앱의 모든 path operation이라는 점만 다르답니다.

path operation 그룹을 위한 의존성

나중에 Bigger Applications - Multiple Files를 읽다 보면, 파일을 여럿 쓰는 더 큰 애플리케이션을 어떻게 구성하는지 배우게 되는데, 거기서 path operation 그룹 하나에 대해 dependencies 파라미터 하나를 선언하는 방법을 알게 될 거예요.

더 알아보기 (Learn more)