Um projeto focado em aprendizado prático e construção de um backend robusto e seguro utilizando Rust! 🦀
Este projeto nasceu como uma jornada de estudos para entender na prática como construir uma API REST completa utilizando o ecossistema moderno e assíncrono do Rust. O foco principal não é apenas fazer o código compilar, mas aprender como as coisas funcionam por baixo dos panos, lidando com banco de dados, criptografia, arquitetura e autenticação.
- Rust: A linguagem base, garantindo segurança de memória e alta performance.
- Axum: Framework web incrivelmente rápido e ergonômico, mantido pela equipe do Tokio.
- SQLx: Toolkit puramente em Rust e assíncrono para interagir com o banco de dados (com checagem de queries em tempo de compilação!).
- PostgreSQL: Nosso banco de dados relacional rodando via Docker.
- Argon2: O algoritmo estado-da-arte para hash seguro de senhas.
- jsonwebtoken (JWT): Para geração e validação de tokens de acesso seguros.
- Estruturação modular de um projeto em Rust (separação inteligente de
handlers,models,services,utils). - Conexão assíncrona e pool de conexões com PostgreSQL utilizando
PgPool. - Criação e execução de Migrations seguras com o SQLx.
- Tratamento de erros robusto contra falhas (evitando o pânico no servidor usando
match). - Endpoint de Registro (
POST /register) com hash Argon2. - Endpoint de Login (
POST /login) com verificação de credenciais e geração de JWT assinado.
O projeto já está 90% funcional. Para fecharmos o ciclo e termos um backend digno de produção, o nosso desafio de aprendizado atual foca nos últimos 3 passos:
- Descriptografia do Token: Criar a função
verify_jwtpara ler as Claims e checar a validade (exp) do token fornecido. - Middleware de Autenticação: Construir um Extractor customizado no Axum (
FromRequestParts) que funciona como um "segurança de balada", barrando requisições sem tokens válidos e repassando a identidade do usuário para o sistema. - Rotas Protegidas: Criar um endpoint final (como
GET /me) que exige o cabeçalhoAuthorization: Bearer <TOKEN>para provar que a porta foi trancada com sucesso.
- Certifique-se de ter o PostgreSQL rodando (exemplo via Docker):
docker run --name rust-postgres-new -e POSTGRES_USER=rustuser -e POSTGRES_PASSWORD=rustpass -e POSTGRES_DB=rustdb -p 5433:5432 -d postgres
- Configure o arquivo
.envna raiz do projeto com as suas chaves:DATABASE_URL=postgres://rustuser:rustpass@localhost:5433/rustdb JWT_SECRET=sua_chave_super_secreta_aqui
- Rode as migrações para construir a tabela de usuários:
cargo sqlx database reset
- Inicie o servidor:
(A API estará escutando no
cargo run
localhost:3000)
Feito com 🦀 Rust, suor e muita vontade de aprender!