28. Dependencies in path operation decorators
1. Dependencies in path operation decorators
- path operation function 내에서 dependency의 반환 값이 실제로 필요하지 않거나 dependency가 값을 반환하지 않는 경우가 있다.
- 이런 경우
Depends
를 사용하여 path operation function 매개변수를 선언하는 대신 path operation 데코레이터에 dependencies
의 list
를 추가할 수 있다.
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