Global dependencies let you run shared code for many parts of your app automatically. This helps keep your code clean and avoid repeating yourself.
Global dependencies in FastAPI
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
FastAPI
from fastapi import FastAPI, Depends app = FastAPI(dependencies=[Depends(your_dependency_function)])
The dependencies list in FastAPI() applies to all routes automatically.
Each dependency function can return values or perform actions before the route runs.
Examples
FastAPI
from fastapi import FastAPI, Depends async def common_parameters(): return {"q": "default"} app = FastAPI(dependencies=[Depends(common_parameters)])
FastAPI
from fastapi import FastAPI, Depends, Header, HTTPException async def verify_token(x_token: str = Header(...)): if x_token != "secret-token": raise HTTPException(status_code=400, detail="Invalid Token") app = FastAPI(dependencies=[Depends(verify_token)])
Sample Program
This FastAPI app uses a global dependency to check a header token on every request. If the token is wrong, it returns an error. Otherwise, it returns a list of items.
FastAPI
from fastapi import FastAPI, Depends, Header, HTTPException async def verify_token(x_token: str = Header(...)): if x_token != "secret-token": raise HTTPException(status_code=400, detail="Invalid Token") app = FastAPI(dependencies=[Depends(verify_token)]) @app.get("/items/") async def read_items(): return {"items": ["apple", "banana"]}
Important Notes
Global dependencies run before each request handler automatically.
You can combine global dependencies with route-specific dependencies.
Use global dependencies to keep your code DRY (Don't Repeat Yourself).
Summary
Global dependencies apply shared logic to all routes in your FastAPI app.
They help with authentication, database connections, and common validations.
Defined once, they run automatically for every request.
Practice
1. What is the main purpose of global dependencies in FastAPI?
easy
Solution
Step 1: Understand what global dependencies do
Global dependencies are functions or classes that run for every request to apply shared logic.Step 2: Identify their main use
They help with tasks like authentication, database connections, or validations that apply to all routes.Final Answer:
To run shared logic automatically for every request -> Option DQuick Check:
Global dependencies = shared logic for all requests [OK]
Hint: Global dependencies run once per request for all routes [OK]
Common Mistakes:
- Thinking global dependencies are for styling
- Confusing global with route-specific dependencies
- Assuming they create database models
2. Which of the following is the correct way to add a global dependency in FastAPI?
easy
Solution
Step 1: Recall FastAPI global dependency syntax
Global dependencies are passed as a list to the 'dependencies' parameter when creating the FastAPI app.Step 2: Match the correct syntax
app = FastAPI(dependencies=[Depends(common_dependency)]) uses 'dependencies=[Depends(common_dependency)]', which is the correct pattern.Final Answer:
app = FastAPI(dependencies=[Depends(common_dependency)]) -> Option AQuick Check:
Global dependencies use dependencies=[Depends(...)] [OK]
Hint: Use dependencies=[Depends(...)] in FastAPI() constructor [OK]
Common Mistakes:
- Using wrong parameter names like global_dep or use_global
- Calling the dependency function instead of passing Depends()
- Passing a single dependency without a list
3. Given this code snippet, what will be printed when a request is made to
/items/42?
from fastapi import FastAPI, Depends
app = FastAPI()
def common_dep():
print("Global dependency called")
@app.get("/items/{item_id}")
def read_item(item_id: int, dep=Depends(common_dep)):
return {"item_id": item_id}medium
Solution
Step 1: Check how common_dep is used
common_dep is used as a route dependency only on the read_item function, not as a global dependency.Step 2: Understand when common_dep runs
It runs only when the /items/{item_id} route is called, printing the message once per request to that route.Final Answer:
Global dependency called printed once per request -> Option BQuick Check:
Route dependency prints only when route is called, not global [OK]
Hint: Route dependencies run per route, not global unless set globally [OK]
Common Mistakes:
- Assuming common_dep is global when it's route-specific
- Expecting multiple prints per request
- Confusing global and route dependencies
4. Identify the error in this FastAPI app code that tries to use a global dependency:
from fastapi import FastAPI, Depends
def common_dep():
print("Running global dependency")
app = FastAPI(dependencies=Depends(common_dep))medium
Solution
Step 1: Check the dependencies parameter type
The 'dependencies' argument expects a list of Depends instances, not a single Depends object.Step 2: Identify the fix
Wrap Depends(common_dep) inside a list: dependencies=[Depends(common_dep)]Final Answer:
dependencies parameter expects a list, not a single Depends -> Option CQuick Check:
dependencies=[Depends(...)] requires a list [OK]
Hint: Always pass dependencies as a list, even if one item [OK]
Common Mistakes:
- Passing Depends(...) directly without list
- Defining dependency after app creation
- Confusing Depends usage with function call
5. You want to add a global dependency that checks user authentication and also logs request info. Which is the best way to combine these in FastAPI?
hard
Solution
Step 1: Understand global dependencies list
FastAPI allows multiple global dependencies by passing a list to the dependencies parameter.Step 2: Combine auth and logging as separate dependencies
Adding both as separate Depends in the list keeps concerns separated and runs both for every request.Step 3: Evaluate other options
Create one dependency function that calls both auth check and logging, then add it globally mixes concerns in one function, B is inconsistent, D mixes middleware and dependencies unnecessarily.Final Answer:
Add both auth check and logging as separate global dependencies in the dependencies list -> Option AQuick Check:
Multiple global dependencies = dependencies=[Depends(...), Depends(...)] [OK]
Hint: Use a list of Depends for multiple global dependencies [OK]
Common Mistakes:
- Combining unrelated logic in one dependency
- Using middleware instead of dependencies for all tasks
- Adding some logic only per route, not globally
