https://github.com/waelson/rust-users-api
Implementação de uma API utilizando a linguagem Rust
https://github.com/waelson/rust-users-api
jaegertracing mysql-database opentelemetry rust rust-lang zipkin
Last synced: 8 months ago
JSON representation
Implementação de uma API utilizando a linguagem Rust
- Host: GitHub
- URL: https://github.com/waelson/rust-users-api
- Owner: Waelson
- License: mit
- Created: 2025-05-01T23:20:32.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-04T13:43:35.000Z (about 1 year ago)
- Last Synced: 2025-06-29T02:43:42.398Z (12 months ago)
- Topics: jaegertracing, mysql-database, opentelemetry, rust, rust-lang, zipkin
- Language: Rust
- Homepage:
- Size: 108 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🧑💻 API de Manutenção de Usuários
API RESTful escrita em Rust para gerenciamento de usuários, utilizando Rocket como framework web, MySQL como banco de dados e OpenTelemetry para tracing distribuído via Jaeger.
---
## 📌 O que faz?
A `user-api` permite:
- Criar usuários com nome e e-mail
- Listar todos os usuários cadastrados
- Visualizar detalhes de um usuário por ID
- Observar as requisições via Jaeger com spans instrumentados nas camadas `controller`, `service` e `repository`
Além disso, a aplicação já vem com:
- CORS habilitado
- Middleware de logging via `tracing`
- Integração completa com OpenTelemetry
- Monitoramento via Jaeger UI
---
## 🧱 Componentes da arquitetura
```text
┌───────────────┐ ┌───────────────┐
│ Rocket Web │─────▶│ UserController│
└───────────────┘ └──────┬────────┘
│
┌────▼───────┐
│ UserService│
└────┬───────┘
│
┌─────▼────────┐
│UserRepository│
└─────┬────────┘
│
┌─────▼──────┐
│ MySQL │
└────────────┘
```
### Outros componentes:
- **user-api**: aplicação principal escrita em Rust com Rocket
- **MySQL**: banco de dados para persistência dos usuários
- **otel-collector**: recebe spans OTLP e exporta para o Jaeger
- **Jaeger**: UI para visualização dos spans
- **Docker Compose**: orquestra todos os serviços locais
---
## ▶️ Como executar
### 1. Clone o repositório
```bash
git clone https://github.com/sua-org/user-api.git
cd user-api
```
### 2. Clone o repositório
Suba os serviços com Docker Compose
```bash
docker-compose up --build
```
Isso irá subir:
| Serviço | Porta | Descrição |
|-----------------|-------|------------------------------------------|
| user-api | 8080 | API de usuários escrita em Rust |
| MySQL | 3306 | Banco relacional |
| otel-collector | 4318 | Recebe spans OTLP da aplicação |
| Jaeger UI | 16686 | Visualizador de tracing via navegador |
## ✅ Como testar
### 1. Criar um usuário
```bash
curl --request POST \
--url http://localhost:8080/users \
--header 'Content-Type: application/json' \
--data '{
"name": "Alice",
"email": "alice@example.com"
}'
```
### 2. Listar todos os usuários
```bash
curl http://localhost:8080/users
```
### 3. Buscar usuário por ID
```bash
curl http://localhost:8080/users/1
```
### 4. Visualizar tracing
1. Acesse: http://localhost:16686
2. Selecione o serviço user-api
3. Veja os spans das requisições HTTP instrumentadas
## 📎 Notas adicionais
O banco de dados é inicializado com sql/init.sql
A aplicação utiliza:
- tracing
- OpenTelemetry
- sqlx
- rocket_db_pools
## 🔍 Executar localmente (sem Docker)
Configure as variáveis de ambiente:
```bash
export DATABASE_URL="mysql://root:root@localhost:3306/rust_db"
export APP_PORT=8080
```
E execute o serviço:
```bash
cargo run
```
## 🛠️ Tecnologias
- 🦀 Rust
- 🚀 Rocket
- 🐬 MySQL
- 🔭 OpenTelemetry
- 📈 Jaeger
- 🐳 Docker Compose