Quizás te hayas encontrado en una situación donde estás utilizando una API REST de un servicio de terceros, por algún motivo falla inesperadamente y no tienes forma de revisar ¿qué sucedió? porque no hay registros de la solicitud, ni de la respuesta. Si esto te ha sucedido y usas la librería requests de Python, estás en el lugar correcto.

Hace unos meses estaba trabajando en un proyecto implementando la API de una pasarela de pagos de un amigo y sucedía que algunas veces el pago se realizaba, pero otras veces fallaba sin tener idea de porqué este comportamiento. Por otro lado, no podía echarle la culpa a la API de mi amigo porque no tenía como demostrarlo. Necesitaba evidencias.

Me puse a investigar en internet que podía hacer al respecto sin mucho éxito. Otro amigo me presentó django-silk, que básicamente intercepta las solicitudes HTTP hechas a tu página, las guarda en base de datos y las muestra en una interfaz pero esto no se adapta a mi necesidad, además era muy overkill.

Fue cuando me puse a buscar cómo la librería requests de Python funcionaba y encontré que tienen un sistema de hook, el cual básicamente te permite manipular parte del proceso de solicitud/respuesta. Entonces, se me ocurrió la brillante idea de desarrollar una solución que me sirviera para todos mis proyectos.

Así nació django-requests-logger, una app reutilizable para Django, con el código necesario para manipular el proceso HTTP de requests, almacenar la información en la base de datos y por último, presentarla en la página de Administración de Django.

Antes de explicarte como utilizarla, es necesario instalarla:

pip install django-requests-logger

Se debe agregar django_requests_logger en INSTALLED_APPS e instalar las migraciones:

python manage.py migrate

Listo, lo siguiente es importar el hook y enviarlo como kwargs en la función de requests:

import requests
from django_requests_logger.callbacks import logger as requests_logger

requests.get('https://httpbin.org/', hooks={'response': requests_logger})

¡Ya estás registrando todas las solicitudes y las respuestas en tu base de datos! Ahora puedes ver los registros en la página de Administración de Django y tener toda la información disponible, que te puede ayudar a debugear y mejorar las validaciones en tu código.