Consignation des corps de requête/réponse HTTP bruts dans Python FastAPI
Dans Python FastAPI, vous pouvez enregistrer les corps JSON bruts d'une requête/réponse spécifique routes en utilisant un middleware ou des classes APIRoute personnalisées.
Option 1 : Utilisation Middleware
Le middleware vous permet de gérer les demandes et les réponses avant qu'elles ne soient traitées par les points de terminaison. Pour créer un middleware :
@app.middleware("http") async def middleware(request: Request, call_next): # ... return await call_next(request)
Utilisez les méthodes request.body() ou request.stream() pour consommer le corps de la requête. Stockez le corps dans une BackgroundTask pour une journalisation ultérieure.
Pour le corps de la réponse, utilisez un code personnalisé pour le lire et le stocker :
res_body = b'' async for chunk in response.body_iterator: res_body += chunk
Vous pouvez ensuite enregistrer à la fois les corps de requête et de réponse dans la BackgroundTask pour éviter d'avoir un impact sur le temps de réponse.
Option 2 : Utilisation d'APIRoute personnalisée Classe
Créez une classe APIRoute personnalisée pour gérer les corps de requête et de réponse :
class LoggingRoute(APIRoute): # ... async def custom_route_handler(request: Request) -> Response: # ... return response
Dans le gestionnaire de route personnalisé, consommez le corps de la requête et gérez le corps de la réponse de la même manière que l'option 1. En utilisant cette approche, vous pouvez limiter la journalisation à des itinéraires spécifiques à l'aide de . APIRouters.
Considérations
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!