Không.
FastAPI cache giá trị dependency theo từng request: nếu nhiều dependency khác cùng phụ thuộc vào get_settings, hàm đó chỉ chạy một lần, kết quả được dùng lại cho mọi nhánh trong request đó.
async def get_db_user(token: Annotated[str, Depends(oauth2)]) -> User: ...
async def require_admin(user: Annotated[User, Depends(get_db_user)]): ...
@app.get("/admin/report")
async def report(
user: Annotated[User, Depends(get_db_user)], # reuses cached value
_: Annotated[None, Depends(require_admin)],
): ...Ở ví dụ trên get_db_user chỉ truy vấn DB một lần dù được khai báo hai chỗ. Khoá cache là cặp (callable, tham số) trong phạm vi request, không phải cache toàn cục.
Muốn ép gọi lại mỗi lần thì tắt: Depends(get_value, use_cache=False) — dùng khi dependency trả về thứ phải mới mỗi lần, ví dụ sinh id hoặc lấy timestamp.
Hai điểm hay bị nhầm:
- Cache không sống qua các request khác nhau. Muốn cache lâu hơn thì dùng functools.lru_cache cho dependency đọc config.
- Dependency khai báo ở tầng APIRouter hoặc app (qua tham số dependencies=[...]) cũng nằm chung cache đó, dùng để gắn kiểm tra quyền cho cả nhóm route mà không cần nhận giá trị trả về.