Estoy trabajando en el proyecto django, que actúa como un servidor de distribución para otro servidor cuando solicitan ciertos datos a través de una llamada API, estos datos están en forma de JSON y son muy grandes. Así que estaba pensando si hay alguna manera de configurar mi respuesta DRF APIView para que sirva la respuesta JSON generada con gzip configurado para la codificación de contenido para reducir el tamaño del contenido, cuando lo consumen los otros servidores.
Actualmente, mi aplicación se ejecuta en gunicorn con nginx en el frente como proxy.
Django tiene un middleware gzip incorporado.
Si está utilizando la versión django <= 1.10, en su settings.py
:
MIDDLEWARE_CLASSES = [ 'django.middleware.gzip.GZipMiddleware', ... ]
Si está utilizando la versión django> 1.10:
MIDDLEWARE = [ 'django.middleware.gzip.GZipMiddleware', ... ]
Este middleware debe colocarse antes que cualquier otro middleware que necesite leer o escribir el cuerpo de la respuesta para que la compresión ocurra después.
¿Por qué? Porque para una solicitud entrante, Django procesa la solicitud utilizando middlewares de arriba a abajo como se define en su configuración. Para los middlewares de respuesta salientes, se denominan bottom to top.
Por lo tanto, declarar el middleware gzip
como el primer middleware permitirá que la solicitud entrante se descomprima para que la lean otros middlewares; y la respuesta saliente se comprimirá justo antes de salir, para que no interfiera con las operaciones de otros middlewares.