Skip to content

28. Dependencies in path operation decorators


1. Dependencies in path operation decorators

  • path operation function 내에서 dependency의 반환 값이 실제로 필요하지 않거나 dependency가 값을 반환하지 않는 경우가 있다.
  • 이런 경우 Depends를 사용하여 path operation function 매개변수를 선언하는 대신 path operation 데코레이터에 dependencieslist를 추가할 수 있다.


2. Add dependencies to the path operation decorator

  • 다음과 같이 path operation 데코레이터는 optional 인수 dependencies를 받을 수 있는데, Depends()list이어야만 한다.


from fastapi import Depends, FastAPI, Header, HTTPException

app = FastAPI()

async def verify_token(x_token: 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: str = Header(...)):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")

    return x_key

@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
    return [{"item": "Foo"}, {"item": "Bar"}]


  • 위의 예제를 실행하면, dependencies는 일반적인 dependencies와 같은 방식으로 실행된다.
  • 하지만 그 값(dependencies가 반환하는 경우)은 path operation function에 전달되지 않는다.


3. Dependencies errors and return values

  • 다음과 같은 dependency 함수를 사용할 수 있다.


1) Dependency requirements

  • headers와 같은 request 요구 사항 또는 다른 sub-dependencies를 선언할 수 있다.


from fastapi import Depends, FastAPI, Header, HTTPException

app = FastAPI()

async def verify_token(x_token: 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: str = Header(...)):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")

    return x_key

@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
    return [{"item": "Foo"}, {"item": "Bar"}]


2) Raise exceptions

  • 이러한 dependencies는 일반적인 dependencies와 마찬가지로 예외를 raise할 수 있다.


from fastapi import Depends, FastAPI, Header, HTTPException

app = FastAPI()

async def verify_token(x_token: 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: str = Header(...)):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")

    return x_key

@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
    return [{"item": "Foo"}, {"item": "Bar"}]


3) Return values

  • 값을 반환할 수도 있고 반환하지 않을 수도 있지만, 결과적으로 값은 사용되지 않는다.
  • 따라서 이미 다른 곳에서 사용하고 있는 값을 반환하는 일반적인 dependencies를 다시 사용할 수 있으며, 값이 사용되지 않더라도 dependency는 실행될 것이다.


from fastapi import Depends, FastAPI, Header, HTTPException

app = FastAPI()

async def verify_token(x_token: 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: str = Header(...)):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")

    return x_key

@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key)])
async def read_items():
    return [{"item": "Foo"}, {"item": "Bar"}]

References