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

Crear: el texto sigue siendo dato

Un apóstrofo en el título no debe romper la consulta.

Rutas de aprendizaje18 min

Vamos a descubrir juntos

  1. 1

    En POST, el handler recibe JSON, valida y llama a Store::create. SQL usa VALUES (?, ?); bind envía título y prioridad como valores. No concatenes entradas en SQL: O'Brien es un nombre común y otros textos pueden parecer comandos.

  2. 2

    Tras INSERT, last_insert_rowid identifica el nuevo registro. La respuesta 201 devuelve el id y los valores normalizados, incluido done=false. Un título repetido crea otro registro; el proyecto no define unicidad del título ni deduplicación de envíos.

  3. 3

    Inspecciona la prueba con apóstrofo, marcado HTML y texto parecido a SQL. Tras la llamada, la tabla sigue existiendo y el título permanece como texto. Esto verifica esa ruta parametrizada; no prueba inmunidad de toda la aplicación ni resuelve autorización.

  4. 4

    Un INSERT individual de SQLite es atómico: inserta el registro o falla la instrucción. Si una acción futura cambia varias tablas como unidad, la transacción debe abarcar todos los pasos. Dos escrituras independientes no son una sola transacción.

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/store.rs

sqlx::query("INSERT INTO missions (title, priority) VALUES (?, ?)")
    .bind(&input.title)
    .bind(input.priority)
    .execute(&self.pool).await?

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

Seguir una creación validada hasta INSERT parametrizado y respuesta 201.

Ahora te toca

Taller de descubrimientos

Decide antes de ejecutar

Seguir una creación validada hasta INSERT parametrizado y respuesta 201.
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Qué producen dos creaciones con el mismo título en este proyecto?

Necesito una pista

POST no tiene unicidad de título ni clave de idempotencia. Conoce ese límite antes de repetir un envío incierto.

Cargando tu camino…

Llévatelo contigo

Crea un título con apóstrofo y revisa respuesta, listado y reinicio. Agrega una prueba con otra entrada válida inusual. Explica cómo bind separa instrucción y valor sin prometer resolver permisos.

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.