Skip to content

하위 의존성

Nexify에서는 의존성 주입을 중첩하여 사용할 수 있습니다. 즉, 하나의 의존성이 또 다른 의존성을 가질 수 있습니다. 이를 "하위 의존성"이라고 합니다.

첫 번째 "의존성"

먼저, 기본적인 의존성을 정의할 수 있습니다.

from typing import Annotated

from nexify import Cookie, Depends, Nexify, Query

app = Nexify()


def query_extractor(q: Annotated[str | None, Query()] = None):
    return q


def query_or_cookie_extractor(
    q: Annotated[str, Depends(query_extractor)],
    last_query: Annotated[str | None, Cookie()] = None,
):
    if not q:
        return last_query
    return q


@app.get("/items")
def read_query(
    query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
    return {"q_or_cookie": query_or_default}

이 의존성은 선택적 쿼리 매개변수 q를 선언한 후 이를 반환합니다.

두 번째 "의존성"

이제 첫 번째 의존성을 사용하는 또 다른 의존성을 정의할 수 있습니다.

from typing import Annotated

from nexify import Cookie, Depends, Nexify, Query

app = Nexify()


def query_extractor(q: Annotated[str | None, Query()] = None):
    return q


def query_or_cookie_extractor(
    q: Annotated[str, Depends(query_extractor)],
    last_query: Annotated[str | None, Cookie()] = None,
):
    if not q:
        return last_query
    return q


@app.get("/items")
def read_query(
    query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
    return {"q_or_cookie": query_or_default}

이제 주요 개념을 살펴보겠습니다.

  • 이 함수 자체가 의존성이지만, 동시에 또 다른 의존성을 필요로 합니다.
  • 이를 통해 보다 유연하고 모듈화된 의존성 관리를 할 수 있습니다.

의존성 사용하기

이제 이러한 의존성을 엔드포인트에서 사용할 수 있습니다.

from typing import Annotated

from nexify import Cookie, Depends, Nexify, Query

app = Nexify()


def query_extractor(q: Annotated[str | None, Query()] = None):
    return q


def query_or_cookie_extractor(
    q: Annotated[str, Depends(query_extractor)],
    last_query: Annotated[str | None, Cookie()] = None,
):
    if not q:
        return last_query
    return q


@app.get("/items")
def read_query(
    query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
    return {"q_or_cookie": query_or_default}

이 방식은 여러 개의 의존성을 계층적으로 구성할 때 유용하며, 코드의 재사용성과 유지보수성을 높이는 데 도움을 줍니다.