Los últimos ajustes antes de producción - Logs, caché y pruebas finales - Episodio 32

ajustes-antes-de-producción

No puedes decir que algo está listo hasta que sobreviva al caos.

Y ahora viene cuando suelto la frase lapidaria de

"Y esto es así"

De hecho, podía haberme dicho a mí mismo que la API ya estaba lista.

Que con lo que había hecho, ya podía salir al mundo.

Pero algo dentro me decía: "revisa TODO".

Porque si algo he aprendido en el desarrollo es que el 90% de los problemas aparecen justo cuando crees que todo está bien.

Así que antes de levantar la bandera de "producción", me puse serio.


Índice
  1. 🛠️ Ajustes que marcaron la diferencia antes del despliegue
    1. ✅ Logs en formato JSON para mejor depuración
    2. ✅ Caché con Redis en /parts
    3. ✅ Paginación optimizada
    4. ✅ Pruebas finales (manuales y con curl)
  2. 💡 Lecciones aprendidas
    1. 🔹 Nunca confíes en que todo está bien hasta que lo pruebas todo
    2. 🔹 La caché no es magia, pero a veces lo parece
    3. 🔹 Los logs son tus ojos cuando todo va mal
  3. 🧠 Reflexión personal
  4. 🚂 Próximo paso: Arrancamos con el front.

🛠️ Ajustes que marcaron la diferencia antes del despliegue

✅ Logs en formato JSON para mejor depuración

Los logs ahora están estructurados en JSON. Esto me permite filtrarlos, visualizarlos con herramientas externas y detectar patrones sin volverme loco leyendo líneas de texto sueltas.

import json
import logging

class JsonFormatter(logging.Formatter):
    def format(self, record):
        log_record = {
            'level': record.levelname,
            'message': record.getMessage(),
            'time': self.formatTime(record, self.datefmt)
        }
        return json.dumps(log_record)

✅ Caché con Redis en /parts

Agregué una capa de caché con Redis para las peticiones a /parts. Ahora las consultas repetidas son más rápidas y alivianan la carga a la base de datos.

@cache.cached(timeout=60, key_prefix='all_parts')
def get_parts():
    ...

✅ Paginación optimizada

Limité per_page a un máximo de 50 para evitar que alguien hiciera scroll infinito y reventara el servidor.

per_page = min(int(request.args.get('per_page', 20)), 50)

✅ Pruebas finales (manuales y con curl)

Hice pruebas manuales a todos los endpoints clave:

  • /health
  • /register
  • /login
  • /parts
  • Intentos de login fallidos (para verificar el bloqueo por rate limiting)

Todo lo que se podía romper, lo intenté romper yo antes que lo hiciera otro.

ajustes-flask


💡 Lecciones aprendidas

🔹 Nunca confíes en que todo está bien hasta que lo pruebas todo

Una función puede no lanzar errores y aun así no funcionar como debería.

🔹 La caché no es magia, pero a veces lo parece

Bajar de 400ms a 40ms en una petición da un gustito que no se explica. Se siente.

🔹 Los logs son tus ojos cuando todo va mal

Pero sólo si están bien hechos. Sino, es como buscar las llaves en una piscina llena de barro.


🧠 Reflexión personal

Decir que una API está lista sin probarla es como decir que tu coche está perfecto porque arranca, sin haberlo sacado nunca de tu calle.

Puede que funcione... o puede que a la que cojas autopista se te salga una rueda y descubras que el volante vibra como batidora.

Esta fase de pruebas finales fue como esa salida larga con el coche, con curvas, semáforos, y cuestas.

Solo entonces sentí que el sistema estaba realmente preparado para el mundo real. No perfecto, pero resistente.

Y eso, en el mundo SaaS, ya es bastante.


🚂 Próximo paso: Arrancamos con el front.

Ahora que el sistema va a salir al mundo, tengo claro que algo fallará.

Pero prefiero que sea con logs bonitos, caché funcionando, y pruebas hechas.

💬 Cuéntame en comentarios:

¿También has tenido esa sensación de "ya está todo" y de repente te explota algo en la cara en el peor momento?

O incluso mejor: ¡cuéntame tu prueba final más absurda o dolorosa!

Vamos a echarnos unas risas mientras sufrimos juntos. 🤣🚀

Si quieres conocer otros artículos parecidos a Los últimos ajustes antes de producción - Logs, caché y pruebas finales - Episodio 32 puedes visitar la categoría Proyecto-IA.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir