Pular para o conteúdo

API de links

Encurtador de URL com servidor HTTP, validação e cache.

bash
dataforge run src/main.df

curl -X POST localhost:8080/encurtar -d '{"url":"https://exemplo.com/pagina"}'
# {"codigo": "xYAXp7", "url": "https://exemplo.com/pagina"}   201

curl localhost:8080/xYAXp7        # 200
curl localhost:8080/naoexiste     # 404
curl localhost:8080/estatisticas  # os mais acessados

Regra separada de transporte#

Toda a lógica está em encurtador.df, sem uma linha de HTTP. Os 11 testes rodam em milissegundos e não sobem servidor; main.df é uma casca de trinta linhas.

Testar HTTP é lento e frágil. Se a regra estivesse dentro do handler, cada teste precisaria de porta, requisição e espera.

O alfabeto evita ambiguidade#

dataforge
steady ALFABETO := "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
steady TAMANHO_CODIGO := 6

Sem l, I, 0 nem O — quem lê um código em voz alta ou copia de um papel não erra.

400, não 500#

Uma URL inválida é erro de quem chamou, não falha do servidor. O status precisa dizer de quem é a responsabilidade — e o cliente que recebe 500 tenta de novo, enquanto o que recebe 400 corrige a requisição.

Semente no gerador#

E.novo(42) produz sempre os mesmos códigos, o que torna o teste reproduzível. Sem semente, usa o relógio.