Rullst AcademyRullst Academy/Lição
Aplicações com Rullst I · Lição 06 / 14

Validar na fronteira certa

Uma chamada direta não passa pelas regras do formulário.

Trilhas de aprendizado18 min

Vamos descobrir juntos

  1. 1

    NewMission descreve o formato esperado; Deserialize lê JSON e deny_unknown_fields rejeita campos extras. Depois validate aplica regras do domínio. Conseguir converter JSON em uma struct não prova que um título vazio ou prioridade 9 faz sentido.

  2. 2

    O título é aparado com trim, deve ter 1–80 pontos de código Unicode e não aceita caracteres de controle, como quebra de linha. chars().count() não conta bytes nem necessariamente símbolos percebidos: alguns emojis combinam vários pontos de código. A prioridade deve estar entre 1 e 3.

  3. 3

    Preveja os resultados para título de espaços, 80 letras é, 81 letras x e prioridade 0. Execute cargo test --locked title_and_priority_boundaries. O teste de é diferencia pontos de código de bytes UTF-8; use também um exemplo com emoji para explicar o limite da medida.

  4. 4

    No handler, validate vem antes de store.create. Uma falha retorna 422 com código de erro e não insere registro. O teste HTTP chama a API diretamente, sem depender de required no navegador, e verifica que a contagem não mudou.

Sua bancada de aplicações

O kit inclui o aplicativo completo para investigar e modificar. O trecho abaixo explica esta etapa; o editor contém o arquivo indicado. A Rullst Academy não compila nem executa esse servidor no navegador.

Arquivo para estudar e modificar

src/validation.rs

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

Extraia o kit numa pasta nova e abra o terminal junto a Cargo.toml. Use Rust 1.96+; o primeiro build pode baixar dependências e demorar. Depois abra http://127.0.0.1:3010. Pare com Ctrl+C e execute novamente após editar.

cargo test --locked
cargo run --locked
Meus arquivos e GitHub

Baixe seu rascunho e substitua o arquivo indicado na sua cópia extraída. O editor guarda um arquivo neste navegador; a conta guarda avaliações e XP. O ZIP não contém suas alterações. GitHub envia só o arquivo confirmado; para o aplicativo completo use Git manual, sem bancos, backups ou segredos.

Links oficiais e próximo passo

✦
SUA MISSÃO

Testar limites e rejeitar entrada inválida antes de modificar o banco.

Agora é a sua vez

Oficina de descobertas

Decida antes de executar

Testar limites e rejeitar entrada inválida antes de modificar o banco.
Monte suas respostas e confira quando estiver pronto.
Uma pausa para entender

Qual evidência verifica a regra no servidor?

Preciso de uma pista

A API é uma fronteira independente da interface. Confira resposta e ausência de alteração indevida, não apenas aparência.

Carregando sua jornada…

Leve com você

Em uma cópia, mude o limite para 60. Atualize regra, CHECK do esquema novo, explicação da interface e testes 60/61. Use um banco de teste novo: CREATE TABLE IF NOT EXISTS não modifica uma tabela existente. Explique por que só mudar o texto seria insuficiente.

No seu ritmo

Meus arquivos e GitHub

Toda lição pode virar um registro seu: código, anotações ou um plano de prática. Guardar um arquivo no GitHub é opcional e não altera seu XP.

Manual do aluno

O editor e os downloads abrem quando esta lição estiver liberada para sua conta. Confira o acesso abaixo ou volte ao mapa da trilha.

Conferindo seu acesso à lição…

Rullstpetbot

A IA pode errar. Confira no material da lição.