하위 의존성¶
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}
이 방식은 여러 개의 의존성을 계층적으로 구성할 때 유용하며, 코드의 재사용성과 유지보수성을 높이는 데 도움을 줍니다.