CodeGym /Cursos /Módulo 5. Spring /Por qué necesitamos la validación y qué tipos de validaci...

Por qué necesitamos la validación y qué tipos de validación existen

Módulo 5. Spring
Nivel 8 , Lección 0
Disponible

Imagina que estás creando un API para el registro de usuarios. El usuario envía datos y tú los guardas en la base de datos — suena sencillo, ¿no? Pero, ¿y si el usuario manda símbolos raros en lugar del nombre? ¿O se olvida de rellenar el campo obligatorio email? ¿O la edad resulta ser negativa? Todo eso puede provocar bugs, romper la lógica de la aplicación o, lo que es peor, crear vulnerabilidades.

Validación — es el proceso de comprobar que los datos que llegan a tu aplicación son correctos. Garantiza que los datos cumplen los criterios: que están completos, son correctos y seguros.

Sin validación:

  • Tus datos en la base pueden estar "sucios" (incorrectos o incompletos).
  • La lógica de la aplicación puede funcionar mal.
  • Tu aplicación puede convertirse en objetivo de ataques (por ejemplo, inyecciones SQL o XSS).

Problemas que resuelve la validación

  1. Entrada de datos incorrecta:
    • Los campos quedan vacíos cuando son obligatorios.
    • Se introducen formatos no válidos (por ejemplo, "123abc" en un campo para email).
  2. Protección frente a ataques:
    • Protección contra entradas maliciosas, por ejemplo inyecciones SQL.
  3. Cumplimiento de la lógica de negocio:
    • Por ejemplo, la fecha de fin de un evento no puede ser anterior a la fecha de inicio.
  4. Mejora de la calidad de los datos:
    • Cuanto mejor sea la validación, menos problemas habrá al procesar los datos en el futuro.

Principales tipos de validación

1. Validación en el cliente

La validación en el cliente se ejecuta en el lado del cliente (por ejemplo, en el navegador usando JavaScript). Te ayuda a encontrar errores casi al instante, antes de que la petición llegue al servidor.

Ejemplo de validación en el cliente:


<form>
    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>
    <button type="submit">Enviar</button>
</form>

Cuando el usuario intenta introducir texto que no cumple el formato de email, el navegador mostrará automáticamente un mensaje de error.

Problema: la validación en el cliente es fácil de eludir (por ejemplo, con herramientas que envían peticiones HTTP directas), por lo que no puede considerarse fiable.

2. Validación en el servidor

La validación en el servidor ocurre en el servidor, después de recibir los datos del cliente. Es obligatoria, ya que el servidor debe protegerse de datos incorrectos o maliciosos, independientemente del cliente.

Ejemplo de validación en el servidor (en Java):


public String validateEmail(String email) {
    if (email == null || !email.contains("@")) {
        throw new IllegalArgumentException("Invalid email format");
    }
    return email;
}

3. Validación de negocio

Este tipo de validación garantiza el cumplimiento de la lógica de negocio específica de tu aplicación. Por ejemplo:

  • Un empleado no puede ser asignado a un proyecto si no tiene la cualificación correspondiente.
  • El descuento de un producto no puede ser mayor al 50% si el producto está en la categoría "novedades".

Ejemplo:


if (discount > 50 && productCategory.equals("new")) {
    throw new BusinessRuleViolationException("Discount for new products cannot exceed 50%");
}

Herramientas y librerías para la validación

Bean Validation API

En el mundo de Java existe un estándar para la validación de datos — Bean Validation API (JSR 380). Es una librería potente y flexible que permite validar datos usando anotaciones.

Ejemplo de uso de Bean Validation

Supongamos que tenemos la clase User y queremos validar sus campos:


import javax.validation.constraints.*;

public class User {
    @NotNull(message = "El nombre no debe estar vacío")
    private String name;

    @Email(message = "Formato de email incorrecto")
    private String email;

    @Min(value = 18, message = "La edad no puede ser menor que 18")
    private int age;

    // Getters y setters...
}

Cómo funciona:

  1. La anotación @NotNull comprueba que el campo no sea nulo.
  2. @Email verifica que la cadena cumple el formato de email.
  3. @Min garantiza que la edad no sea menor a 18 años.

Al intentar persistir un objeto incorrecto en la base de datos o pasarlo a un servicio, se lanzará una excepción javax.validation.ConstraintViolationException, que puedes manejar en la aplicación.


Ejemplos del mundo real

1. Registro de usuario

Cuando registras a un usuario, no puedes aceptar cualquier dato. Aquí un ejemplo donde se usan distintos tipos de validación:

  • Validación en el cliente: comprobación del formato del email y de la contraseña mediante expresiones regulares.
  • Validación en el servidor: verificar que el email sea único.
  • Validación de negocio: por ejemplo, no se puede registrar si el usuario tiene menos de 18 años.

2. Tienda online

En el flujo de checkout:

  • Validación en el cliente: comprueba que todos los campos obligatorios estén rellenos.
  • Validación en el servidor: asegúrate de que la tarjeta de pago proporcionada es válida (a través de un API).
  • Validación de negocio: asegúrate de que no se pueda hacer un pedido si el producto seleccionado ya no está disponible.

Conclusiones

Implementar validación en todos los niveles (cliente, servidor, lógica de negocio) no es solo buena práctica, es una necesidad. Por ejemplo, si confías solo en la validación en el cliente, cualquier "hacker aficionado" podrá enviar la petición directamente y saltarse las comprobaciones. Si ignoras la validación de negocio, puedes romper las reglas y la lógica de tu aplicación, lo que puede causar no solo bugs, sino también pérdidas económicas.

Después profundizaremos en el uso de Bean Validation API y en las anotaciones, incluyendo @NotNull, @Min, @Max, @Size y otras. Y luego aprenderemos a integrarlas en nuestros controladores y REST API. ¡Prepárate — esto solo empieza!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION