Um encurtador de URLs simples e eficiente desenvolvido em Rust com Axum, PostgreSQL e Redis.
- POST /shorten: Encurta uma URL longa
- GET /:short_code: Redireciona para a URL original (307 Temporary Redirect)
- GET /:short_code/stats: Retorna estatísticas da URL encurtada
- Rust - Linguagem de programação
- Axum - Framework web assíncrono
- PostgreSQL - Banco de dados principal
- Redis - Cache para melhor performance
- SQLx - Driver de banco de dados
- Tokio - Runtime assíncrono
- Rust 1.70+
- PostgreSQL
- Redis
- Clone o repositório e instale as dependências:
cargo build- Execute o docker compose:
docker compose up -d- Execute as migrations:
refinery migrate -e DB_HOST -p ./migrationscargo runO servidor estará rodando em http://localhost:3000
POST /shorten
Content-Type: application/json
{
"url": "https://www.example.com/very/long/url"
}Resposta:
{
"short_code": "abc123",
"short_url": "http://localhost:3000/abc123",
"original_url": "https://www.example.com/very/long/url"
}GET /:short_codeRetorna um redirecionamento 307 para a URL original.
GET /:short_code/statsResposta:
{
"short_code": "abc123",
"original_url": "https://www.example.com/very/long/url",
"clicks": 42,
"created_at": "2024-01-01T12:00:00Z"
}curl -X POST http://localhost:3000/shorten \
-H "Content-Type: application/json" \
-d '{"url": "https://www.rust-lang.org"}'curl http://localhost:3000/abc123/stats- Cache Redis: URLs são armazenadas no Redis para acesso rápido
- PostgreSQL: Armazenamento persistente com contagem de clicks
- Hash Base62: Códigos curtos de 6 caracteres
- Async: Operações assíncronas para melhor performance
cargo test| Variável | Descrição | Padrão |
|---|---|---|
DATABASE_URL |
URL de conexão do PostgreSQL | postgres://localhost/url_shortener |
REDIS_URL |
URL de conexão do Redis | redis://localhost |
SERVER_ADDRESS |
Endereço do servidor | 0.0.0.0:3000 |
Este projeto está sob a licença MIT.