8.5 Manejo de errores entre frontend y backend
Explorarás cómo manejar errores comunes cuando frontend y backend se comunican, y cómo mostrar mensajes útiles cuando algo falla, tanto para el usuario como para el desarrollador.
Explorarás cómo manejar errores comunes cuando frontend y backend se comunican, y cómo mostrar mensajes útiles cuando algo falla, tanto para el usuario como para el desarrollador.
Los errores en una app web pueden ocurrir en distintas etapas del flujo. Detectar su origen y tipo permite aplicar la solución adecuada de forma más eficiente.
Errores del cliente:
/api/tareaas).Errores del servidor:
KeyError, TypeError).Errores de comunicación:
Content-Type).Una API bien diseñada no solo devuelve datos exitosos, también informa con precisión cuándo y por qué algo falla. Esto se logra combinando un código de estado HTTP adecuado con un mensaje claro en JSON.
Estructura recomendada en el backend (Flask):
if not datos.get("title"):return jsonify({ "error": "El título es obligatorio" }), 400
Ejemplos comunes de códigos:
400: Datos inválidos o incompletos.404: Recurso no encontrado.422: Entidad procesable pero con errores lógicos.500: Error inesperado en el servidor.En el frontend con Axios:
axios.post("/api/tareas", datos).then(res => actualizarVista(res.data)).catch(err => mostrarError(err.response.data.error));
El logging ayuda a detectar errores sin afectar al usuario. Aunque no se muestren, deben registrarse para facilitar su análisis y corrección. En Flask, puedes usar el módulo logging de Python para guardar eventos y errores relevantes:
import logginglogging.basicConfig(level=logging.INFO)try:nueva = Tarea.create(datos["title"], "pendiente", categoria.id)except Exception as e:logging.error(f"Error al crear tarea: {e}")return jsonify({"error": "Error interno del servidor"}), 500
Ventajas de registrar errores:
Evita mostrar mensajes técnicos al cliente: lo ideal es responder con un mensaje genérico y guardar el detalle en los registros del servidor.
Usar try...except permite responder de forma controlada y mantener la aplicación en funcionamiento.
Ejemplo en Flask:
@app.route("/api/tareas", methods=["POST"])def crear_tarea():try:datos = request.get_json()titulo = datos["title"] # puede lanzar KeyErrorcategoria = Categoria.get_or_create(datos["category"])nueva = Tarea(titulo, "pendiente", categoria.id)return jsonify(nueva.__dict__), 201except KeyError:return jsonify({"error": "Falta el título o la categoría"}), 400except Exception as e:logging.error(f"Error inesperado: {e}")return jsonify({"error": "Error interno"}), 500
Beneficios:
Antes de procesar información, es clave validar los datos recibidos para evitar errores y asegurar su integridad. Las validaciones más comunes en una API:
Ejemplo en Flask:
datos = request.get_json()if not datos.get("title"):return jsonify({"error": "El título es obligatorio"}), 400
Validar desde el inicio permite:
Además de verificar que todo funcione, hay que probar cómo responde la app ante fallos. Esto garantiza mensajes claros y un sistema robusto. Técnicas para probar errores:
Con Postman o curl:
Con DevTools:
Desde el frontend:
.catch() y mostrar alertas.Así se asegura que:
Una app robusta no solo funciona bien cuando todo va bien: también actúa correctamente cuando algo falla.
El manejo de errores mejora la estabilidad y la experiencia del usuario. Implica prevenir fallos, detectarlos a tiempo y comunicarlos de forma clara y útil.
Recursos útiles: