Performance: Sub-dependencies
Sub-dependencies affect the server response time and resource usage by adding layers of function calls during request handling.
Jump into concepts and practice - no test required
from fastapi import Depends, FastAPI app = FastAPI() def get_user(): # combine token extraction and user retrieval token = "token" return {"user": "user_data"} @app.get("/items/") async def read_items(user: dict = Depends(get_user)): return {"user": user}
from fastapi import Depends, FastAPI app = FastAPI() def get_token(): # simulate token extraction return "token" def get_user(token: str = Depends(get_token)): # simulate user retrieval return {"user": "user_data"} @app.get("/items/") async def read_items(user: dict = Depends(get_user)): return {"user": user}
| Pattern | Function Calls | CPU Usage | Response Latency | Verdict |
|---|---|---|---|---|
| Nested sub-dependencies | Multiple per request | Higher due to overhead | Increased by several ms | [X] Bad |
| Flattened combined dependency | Single per request | Lower CPU usage | Reduced latency | [OK] Good |
/items/42?
from fastapi import FastAPI, Depends
app = FastAPI()
def sub_dep():
return "sub-data"
def main_dep(data: str = Depends(sub_dep)):
return f"main uses {data}"
@app.get("/items/{item_id}")
async def read_item(item_id: int, info: str = Depends(main_dep)):
return {"item_id": item_id, "info": info}read_item endpoint depends on main_dep, which depends on sub_dep. The value from sub_dep is passed to main_dep.sub_dep() returns "sub-data". main_dep returns "main uses sub-data". So info in read_item is "main uses sub-data".from fastapi import FastAPI, Depends
app = FastAPI()
def sub_dep():
return "data"
def main_dep(data: str = Depends(sub_dep)):
return data
@app.get("/test")
async def test_endpoint(info: str = Depends(main_dep())):
return {"info": info}