Performance: Shared dependencies across routers
This affects the server response time and resource usage by controlling how often dependencies are created and reused across different routes.
from fastapi import FastAPI, Depends, APIRouter app = FastAPI() async def common_dep(): # expensive setup return 'resource' app_dependency = Depends(common_dep) router1 = APIRouter(dependencies=[app_dependency]) @router1.get('/items') async def items(dep=Depends(common_dep)): return {'dep': dep} router2 = APIRouter(dependencies=[app_dependency]) @router2.get('/users') async def users(dep=Depends(common_dep)): return {'dep': dep} app.include_router(router1) app.include_router(router2)
from fastapi import FastAPI, Depends, APIRouter app = FastAPI() async def common_dep(): # expensive setup return 'resource' router1 = APIRouter() @router1.get('/items') async def items(dep=Depends(common_dep)): return {'dep': dep} router2 = APIRouter() @router2.get('/users') async def users(dep=Depends(common_dep)): return {'dep': dep} app.include_router(router1) app.include_router(router2)
| Pattern | Dependency Calls | CPU Usage | Response Time | Verdict |
|---|---|---|---|---|
| Separate dependency per route | Multiple calls per request | High | Slower | [X] Bad |
| Shared dependency at router level | Single call per request per router | Lower | Faster | [OK] Good |
APIRouter in FastAPI?dependencies, which takes a list of Depends objects.dependencies=[Depends(common_dep)], which is the correct syntax./items/42?
from fastapi import FastAPI, APIRouter, Depends
app = FastAPI()
def common_dep():
print("Common dependency called")
router = APIRouter(dependencies=[Depends(common_dep)])
@router.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
app.include_router(router)from fastapi import APIRouter, Depends
def verify_token():
pass
router = APIRouter(dependencies=Depends(verify_token))
@router.get("/secure")
async def secure_endpoint():
return {"message": "Secure"}router_a and router_b. Which approach correctly shares the dependency without repeating code?Pass the test and this pattern moves unknown