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", f"req_{uuid4().hex[:16]}") request.state.request_id = request_id response = await call_next(request) response.headers["X-Request-Id"] = request_id return response