CRUD para gerenciamento de clientes desenvolvido em Rust, utilizando Actix-Web, autenticação JWT e controle de permissões por role (papel de usuário). O banco de dados é PostgreSQL, executado via Docker.
- Rust (2024 edition)
- Actix-Web – API web assíncrona
- JWT – Autenticação baseada em tokens
- bcrypt – Hash de senhas
- Chrono, Time – Manipulação de datas
- Serde – Serialização/Deserialização
- SQLx – ORM assíncrono para PostgreSQL
- dotenv – Carregamento de variáveis ambiente
- Docker – Ambiente para banco de dados PostgreSQL
[dependencies]
actix-cors = "0.7.1"
actix-web = "4.10.2"
bcrypt = "0.17.0"
chrono = "0.4.40"
dotenv = "0.15.0"
futures-util = "0.3.31"
jsonwebtoken = "9.3.1"
time = { version = "0.3", features = ["serde"] }
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.140"
sqlx = { version = "0.8.5", features = ["postgres", "runtime-async-std", "time"] }Execute no terminal:
docker run --name clientes-db \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=clientes_db \
-p 5432:5432 \
-d postgres- Banco:
clientes_db - Usuário:
postgres - Senha:
postgres - Porta:
5432
Crie um arquivo .env na raiz do projeto contendo:
DATABASE_URL=postgres://postgres:postgres@localhost/clientes_db
SECRET_KEY=sua_chave_secretacargo buildcargo runA API estará disponível em: http://localhost:8080
| Método | Rota | Descrição | Autenticação |
|---|---|---|---|
| POST | /register |
Cadastro de usuários | ❌ |
| POST | /login |
Geração de token JWT | ❌ |
| GET | /clientes |
Listagem de clientes | ✅ |
| POST | /clientes |
Cadastro de novo cliente | ✅ (por role) |
| PUT | /clientes/{id} |
Atualização de cliente | ✅ |
| DELETE | /clientes/{id} |
Remoção de cliente | ✅ (admin) |
⚠️ Todas as rotas protegidas requerem um token JWT válido no headerAuthorization: Bearer <token>
O sistema utiliza controle de acesso baseado em roles (admin, user, etc).
Após o login, a role do usuário é embutida no token JWT, e o backend valida isso em cada rota sensível.
docker stop clientes-db
docker rm clientes-db- Nunca utilize a mesma
SECRET_KEYdeste exemplo em produção. - Certifique-se de que o Docker esteja em execução antes de iniciar o backend.
- Para payloads e schemas de resposta, consulte os modelos no código-fonte (
src/models).
Contribuições são bem-vindas!
Sinta-se livre para abrir issues ou pull requests. 🚀