"""Request ID middleware for request tracing.""" import uuid from fastapi import Request from starlette.middleware.base import BaseHTTPMiddleware from starlette.responses import Response class RequestIDMiddleware(BaseHTTPMiddleware): """Middleware to add unique request ID to each request.""" async def dispatch(self, request: Request, call_next): # Generate or retrieve request ID request_id = request.headers.get("X-Request-ID") or str(uuid.uuid4()) # Add request ID to request state request.state.request_id = request_id # Process request response = await call_next(request) # Add request ID to response headers response.headers["X-Request-ID"] = request_id return response