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