Template completo para APIs REST usando Axum, baseado em boas práticas de arquitetura modular.
- Clique em "Use this template" no topo da página
- Crie seu novo repositório
- Clone o repositório criado
- Siga os passos de configuração abaixo
git clone https://github.com/seu-usuario/axum-api-template.git meu-projeto
cd meu-projeto
rm -rf .git
git init
git add .
git commit -m "Initial commit from template"- Axum - Framework web moderno e performático
- JWT Authentication - Sistema completo com access/refresh tokens
- PostgreSQL + Diesel - ORM type-safe para Rust
- Middleware - Rate limiting, CORS, tratamento de erros
- Validação - Validação robusta de dados de entrada
- Testes - Estrutura de testes integrados
- Arquitetura Modular - Padrão Handler → Service → Repository
- Rust (1.70+)
- PostgreSQL (12+)
- Diesel CLI
cargo install diesel_cli --no-default-features --features postgres# Criar bancos de dados
# Configurar variáveis de ambiente
cp .env.example .env# Database
DATABASE_URL=postgresql://username:password@localhost/api_template_dev
TEST_DATABASE_URL=postgresql://username:password@localhost/api_template_test
# JWT Secrets
JWT_ACCESS_SECRET=your-super-secret-access-key-here
JWT_REFRESH_SECRET=your-super-secret-refresh-key-here
# Server
SERVER_HOST=127.0.0.1
SERVER_PORT=3000
# CORS
CORS_ORIGIN=http://localhost:3000
# Rate Limiting
RATE_LIMIT_REQUESTS_PER_MINUTE=60
RATE_LIMIT_BURST=10diesel migration runcargo runA API estará disponível em http://localhost:3000
src/
├── main.rs # Ponto de entrada
├── lib.rs # Biblioteca principal
├── app.rs # Configuração da aplicação
├── schema.rs # Schema do banco (gerado pelo Diesel)
├── config/ # Configurações (banco, etc.)
├── middleware/ # Middleware customizados
├── errors/ # Tratamento de erros padronizado
├── auth/ # Sistema de autenticação JWT
├── user/ # Módulo de usuários
├── health/ # Endpoints de health check
├── db/models/ # Modelos Diesel
├── routes/ # Configuração de rotas
└── utils/ # Utilitários
-
Criar estrutura:
mkdir src/my_module touch src/my_module/{mod.rs,my_handler.rs,my_service.rs,my_repository.rs,my_dto.rs} -
Seguir padrão arquitetural:
- Handler: Recebe requisições HTTP, valida entrada, chama service
- Service: Lógica de negócio, orquestra chamadas ao repository
- Repository: Acesso aos dados, queries Diesel
- DTO: Estruturas de entrada e saída da API
-
Registrar rotas em
routes/mod.rs
# Criar nova migration
diesel migration generate create_my_table
# Executar migrations
diesel migration run
# Reverter última migration
diesel migration revert
# Refazer última migration
diesel migration redo# Executar todos os testes
cargo test
# Executar testes específicos
cargo test auth_test
# Executar com logs
cargo test -- --nocaptureGET /health- Status básico da aplicaçãoGET /ready- Verificação de prontidão (inclui conexão com banco)
POST /auth/register- Registrar novo usuárioPOST /auth/login- Login com email/senhaPOST /auth/refresh- Renovar access tokenPOST /auth/forgot-password- Solicitar reset de senhaPOST /auth/reset-password- Resetar senha com token
GET /api/user/profile- Obter perfil do usuárioPUT /api/user/profile- Atualizar perfil do usuárioPOST /api/logout- Logout (revoga tokens)
# Health check básico
curl -X GET http://localhost:3000/health
# Verificação de prontidão
curl -X GET http://localhost:3000/ready
# Registrar usuário
curl -X POST http://localhost:3000/auth/register \
-H "Content-Type: application/json" \
-d '{
"first_name": "João",
"last_name": "Silva",
"email": "[email protected]",
"password": "senha123"
}'
# Login
curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"password": "senha123"
}'# Database
DATABASE_URL=postgresql://user:pass@host:5432/db_prod
TEST_DATABASE_URL=postgresql://user:pass@host:5432/db_test
# JWT Secrets
JWT_ACCESS_SECRET=your-super-secure-production-secret
JWT_REFRESH_SECRET=your-super-secure-refresh-secret
# Server
SERVER_HOST=0.0.0.0
SERVER_PORT=3000
# CORS
CORS_ORIGIN=https://yourdomain.com
# Rate Limiting
RATE_LIMIT_REQUESTS_PER_MINUTE=100
RATE_LIMIT_BURST=20# Build otimizado
cargo build --release
# Executar em produção
./target/release/axum-api-template