middlewares
Un "middleware" es una función/clase que trabaja con cada petición(request) antes de que sea procesada por cualquier operación de ruta específica(route). Y también con cada respuesta(response) antes de devolverla.
Normalmente, un middleware interviene en las siguientes, acciones permitiendo (si se desea) interceptar y/o modificar el flujo de datos:
- Preprocesamiento de la solicitud (por ejemplo, validación de cabeceras, normalización de rutas, etc.)
- Modificación del estado de la aplicación (por ejemplo, sesiones, caché, etc.)
- Postprocesamiento de una respuesta (por ejemplo, log)
Nota
Se recomienda cargar(registrar) los middlewares, utilizando add_middleware
de FastApi.
Defina estas funciones después de la instancia principal del BackEnd.
El uso de estas funciones se encuentra en el archivo app/server.py.
veamos un ejemplo de como funcionan los middlewares en FastApi y la forma en como se ejecutan:
Importante
El orden en que se utilizan los middlewares influye directamente en el comportamiento de tu BackEnd, por lo que definir el orden correcto de ejecución, es muy importante.
En consecuencia, el primer middleware registrado en la cadena del constructor, es el primero en ejecutarse durante el procesamiento de la solicitud (LogRequestMiddleware
), seguido por los demás en el orden en que los defines (CORSMiddleware
y GZipMiddleware
).
Si se utilizan dependencias(Depend
), estas también seguirán el orden en que fueron declaradas, y finalmente, cuando la respuesta se envía de vuelta, esta recorre la misma cadena de middlewares, pero en orden inverso.
Nota
Para más información consulta el módulo middlewares.
GZipMiddleware
Gestiona las respuestas GZip para cualquier solicitud que incluya "gzip" en la cabecera Accept-Encoding
. El middleware gestionará tanto las respuestas estándar como las de streaming.
ForceGZipMiddleware
Comprueba si la cabecera Accept-Encoding: gzip, deflate
viene en la petición. Si no es así, modifica la solicitud entrante para forzar al BackEnd a responder el contenido compreso con Gzip.
CORS
CORS o "Cross-Origin Resource Sharing" se refiere a las situaciones en las que un frontend que se ejecuta en un navegador tiene código JavaScript que se comunica con un backend, y el backend se encuentra en un "origen" diferente al del frontend.
LogRequestMiddleware
Una clase que actua como middleware ASGI para FastApi/Starlette, con la información para armar un log e imprimirlo.