Custom middleware for FastAPI application
FastAPI is a Python web framework for building APIs. By using a middleware, we are able to process request and response before/after they get handled by the application.
is a lightweight ASGI framework/toolkit on which FastAPI is based.
class for us to implement custom middleware.
It’s required to override the
async def dispatch(request, call_next) method.
from starlette.middleware.base import BaseHTTPMiddleware class CustomHeaderMiddleware(BaseHTTPMiddleware): def __init__(self, app, header_value='Example'): super().__init__(app) self.header_value = header_value async def dispatch(self, request, call_next): response = await call_next(request) response.headers['Custom'] = self.header_value return response
The example middleware above simply adds a
Custom header to the response.
FastAPI also supports using decorator to create a middleware :
@app.middleware("http") async def custom_middleware(request: Request, call_next): response = await call_next(request) return response
It should have the same effect as overriding the
I personally prefer the below way to programmatically add the middleware to the FastAPI application.
from fastapi import FastAPI app = FastAPI() app.add_middleware(CustomHeaderMiddleware, header_value='Hello')