from uuid import uuid4 from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request class RequestIdMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): request_id = request.headers.get("X-Request-ID") or str(uuid4()) request.state.request_id = request_id response = await call_next(request) response.headers["X-Request-ID"] = request_id return response