데코레이터 내에서의 의존성 사용¶
경우에 따라 경로 핸들러 내부에서 의존성의 반환 값이 필요하지 않을 수 있습니다. 혹은, 해당 의존성이 값을 반환하지 않더라도 실행되어야 할 수도 있습니다.
이러한 상황에서는 경로 핸들러의 매개변수로 Depends
를 선언하는 대신,
데코레이터의 dependencies
매개변수를 활용할 수 있습니다.
dependencies
매개변수 활용하기¶
Nexify의 경로 데코레이터는 선택적으로 dependencies
매개변수를 받을 수 있으며, 이 매개변수는 Depends
인스턴스를 포함하는 리스트(list[Depends]
)여야 합니다.
from typing import Annotated
from nexify import Depends, Header, Nexify
from nexify.exceptions import HTTPException
app = Nexify()
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")
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")
@app.get("/items", dependencies=[Depends(verify_token), Depends(verify_key)])
def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
이렇게 하면 verify_token
의존성이 실행되지만, 반환 값은 read_items
함수에 전달되지 않습니다.
의존성과 예외 처리¶
평소에 사용하던대로 같은 의존성 함수를 사용할 수 있습니다.
의존성 요구사항¶
헤더 같은 요청 요구사항이나 하위-의존성을 선언할 수 있습니다:
from typing import Annotated
from nexify import Depends, Header, Nexify
from nexify.exceptions import HTTPException
app = Nexify()
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")
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")
@app.get("/items", dependencies=[Depends(verify_token), Depends(verify_key)])
def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
예외 발생시키기¶
의존성 함수는 일반적인 방식으로 예외를 발생시킬 수 있으며, 예외 발생 시 해당 요청은 즉시 중단됩니다.
from typing import Annotated
from nexify import Depends, Header, Nexify
from nexify.exceptions import HTTPException
app = Nexify()
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")
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")
@app.get("/items", dependencies=[Depends(verify_token), Depends(verify_key)])
def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
값 반환하기¶
의존성 함수가 값을 반환할 수도 있지만, dependencies
에 선언된 의존성의 경우 반환 값은 사용되지 않습니다.
from typing import Annotated
from nexify import Depends, Header, Nexify
from nexify.exceptions import HTTPException
app = Nexify()
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")
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")
@app.get("/items", dependencies=[Depends(verify_token), Depends(verify_key)])
def read_items():
return [{"item": "Foo"}, {"item": "Bar"}]
이 기능을 활용하면, 특정 요청에 대해 반드시 실행해야 하는 로직(예: 인증, 요청 검증 등)을 핸들러 함수 내부가 아닌 의존성에서 손쉽게 관리할 수 있습니다.