Rullst AcademyRullst Academy/Lección
Aplicaciones con Rullst I · Lección 06 / 14

Validar en la frontera correcta

Una petición directa no pasa por las reglas del formulario.

Rutas de aprendizaje18 min

Vamos a descubrir juntos

  1. 1

    NewMission describe la forma esperada; Deserialize lee JSON y deny_unknown_fields rechaza campos extra. Después validate aplica reglas del dominio. Convertir JSON a struct no demuestra que un título vacío o prioridad 9 tenga sentido.

  2. 2

    Se aplica trim al título, que debe tener 1–80 puntos de código Unicode y no admite controles como salto de línea. chars().count() no cuenta bytes ni necesariamente símbolos percibidos: algunos emojis combinan varios puntos. La prioridad debe estar entre 1 y 3.

  3. 3

    Predice los resultados para espacios, 80 letras é, 81 letras x y prioridad 0. Ejecuta cargo test --locked title_and_priority_boundaries. La prueba de é distingue puntos de código de bytes UTF-8; usa también un emoji para explicar el límite de la medida.

  4. 4

    En el handler, validate va antes de store.create. Un fallo devuelve 422 con código y no inserta registros. La prueba HTTP llama directamente a la API, sin depender de required, y comprueba que el conteo no cambió.

Tu mesa de aplicaciones

El kit incluye la aplicación completa para investigar y modificar. El fragmento explica esta etapa; el editor contiene el archivo indicado. Rullst Academy no compila ni ejecuta este servidor en el navegador.

Archivo para estudiar y modificar

src/validation.rs

let title = input.title.trim().to_owned();
if !(1..=80).contains(&title.chars().count()) {
    return Err("invalid_title");
}

Extrae el kit en una carpeta nueva y abre el terminal junto a Cargo.toml. Usa Rust 1.96+; la primera compilación puede descargar dependencias y tardar. Abre http://127.0.0.1:3010. Detén con Ctrl+C y ejecuta de nuevo tras editar.

cargo test --locked
cargo run --locked
Mis archivos y GitHub

Descarga tu borrador y sustituye el archivo indicado en tu copia extraída. El editor guarda un archivo en este navegador; tu cuenta guarda evaluaciones y XP. El ZIP excluye tus cambios. GitHub envía solo el archivo confirmado; usa Git manual para la aplicación entera, sin bases, respaldos ni secretos.

Enlaces oficiales y siguiente paso

✦
TU MISIÓN

Probar límites y rechazar entradas inválidas antes de modificar la base.

Ahora te toca

Taller de descubrimientos

Decide antes de ejecutar

Probar límites y rechazar entradas inválidas antes de modificar la base.
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Qué evidencia comprueba la regla del servidor?

Necesito una pista

La API es una frontera independiente. Comprueba respuesta y ausencia de cambios indebidos, no solo apariencia.

Cargando tu camino…

Llévatelo contigo

En una copia, cambia el límite a 60. Actualiza regla, CHECK del esquema nuevo, explicación y pruebas 60/61. Usa una base de prueba nueva: CREATE TABLE IF NOT EXISTS no modifica una tabla existente. Explica por qué cambiar solo texto no basta.

A tu ritmo

Mis archivos y GitHub

Cada lección puede convertirse en un registro propio: código, notas o un plan de práctica. Guardar un archivo en GitHub es opcional y no cambia tus XP.

Manual del alumno

El editor y las descargas se abren cuando esta lección esté disponible para tu cuenta. Revisa el acceso indicado abajo o vuelve al mapa de la ruta.

Comprobando tu acceso a esta lección…

Rullstpetbot

La IA puede equivocarse. Consulta el material de la lección.