Dependency injection is a powerful technique in software development that promotes loose coupling and testability. In FastAPI, it’s commonly used to inject dependencies like database sessions, configuration settings, and services into your endpoints. In this section, we’ll demonstrate how to use dependency injection to fetch the current user in your FastAPI routes.
Creating a Dependency Function
Import Necessary Modules:
Python
from fastapi import Depends, HTTPException, Request
from app.utils import get_current_user
Create a Dependency Function:
Python
def get_current_user(request: Request) -> User:
# … implementation
This function will retrieve the current user based on the access token in the request headers.
Using the Dependency in Endpoints
Inject the Dependency:
Python
@app.get(“/profile”)
async def get_profile(current_user: User = Depends(get_current_user)):
return current_user
Explanation
- The
Depends
decorator automatically injects thecurrent_user
object into the endpoint function. - The
get_current_user
function retrieves the current user based on the access token.
Additional Factors
- Error Handling: Implement appropriate error handling to deal with cases where the user cannot be retrieved or is unauthorized.
- Caching: Consider caching the current user object to improve performance.
- Security: Ensure that the access token is validated and protected against unauthorized access.
By using dependency injection to fetch the current user in your FastAPI endpoints, you can promote code reusability, testability, and maintainability. This approach also makes it easier to manage dependencies and centralize configuration.