Files
routesapi/app/middleware/request_id.py

27 lines
802 B
Python

"""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