Un microservice Go dΓ©montrant une architecture "Dual API" avec une API REST et une API gRPC pour le suivi de portefeuille crypto en temps rΓ©el.
Ce projet illustre comment une seule logique mΓ©tier peut servir deux types de clients :
- API REST : Pour les interfaces web et les intΓ©grations simples
- API gRPC : Pour la communication machine-Γ -machine haute performance
βββββββββββββββββββ βββββββββββββββββββ
β Client REST β β Client gRPC β
βββββββββββ¬ββββββββ βββββββββββ¬ββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Dual API Server β
β βββββββββββββββ βββββββββββββββββββ β
β β REST API β β gRPC API β β
β β Port 8080 β β Port 9090 β β
β ββββββββ¬βββββββ βββββββββββ¬ββββββββ β
β β β β
β βββββββββββ¬ββββββββββ β
β βΌ β
β βββββββββββββββββββ β
β β Business Logic β β
β β (Portfolio) β β
β βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β CoinGecko API β
β (Prix crypto temps rΓ©el) β
βββββββββββββββββββββββββββββββββββββββββββ
- Docker et Docker Compose
- Go 1.24+ (pour le dΓ©veloppement local)
# Utiliser l'image prΓ©-construite depuis Docker Hub
docker pull idablaq/dual-api-crypt:latest
# Lancer le conteneur
docker run -d -p 8080:8080 -p 9090:9090 --name dual-api-crypt idablaq/dual-api-crypt:latest# Cloner le projet
git clone https://github.com/xAPT42/Dual-api-crypt.git
cd Dual-api-crypt
# Construire et lancer
docker-compose up --build# Installer les dΓ©pendances
go mod tidy
# GΓ©nΓ©rer le code gRPC
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
api/portfolio.proto
# Lancer l'application
go run cmd/server/main.gocurl http://localhost:8080/portfolioRΓ©ponse :
{
"value": 12543.67,
"currency": "EUR",
"timestamp": "2024-01-15T10:30:00Z"
}curl http://localhost:8080/healthgrpcurl -plaintext localhost:9090 listgrpcurl -plaintext localhost:9090 portfolio.PortfolioService/GetPortfolioValueLe portefeuille est dΓ©fini dans le code et contient :
- Bitcoin : 0.5 BTC
- Ethereum : 5.0 ETH
- Cardano : 1000 ADA
- Solana : 50 SOL
- Chainlink : 100 LINK
dual-api-crypto/
βββ api/ # Contrats gRPC
β βββ portfolio.proto # DΓ©finition du service
β βββ portfolio.pb.go # Code gΓ©nΓ©rΓ©
β βββ portfolio_grpc.pb.go
βββ cmd/server/ # Point d'entrΓ©e
β βββ main.go # Serveurs REST et gRPC
βββ internal/service/ # Logique mΓ©tier
β βββ portfolio.go # Calcul du portefeuille
βββ Dockerfile # Image Docker
βββ docker-compose.yml # Orchestration
βββ go.mod # DΓ©pendances Go
βββ README.md # Documentation
- Go 1.24 : Langage principal
- gRPC : Communication haute performance
- Protocol Buffers : SΓ©rialisation efficace
- Docker : Conteneurisation
- CoinGecko API : DonnΓ©es crypto temps rΓ©el
# Test de base
curl -X GET http://localhost:8080/portfolio
# Test avec jq pour un affichage formatΓ©
curl -s http://localhost:8080/portfolio | jq# Installer grpcurl
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
# Lister les services
grpcurl -plaintext localhost:9090 list
# Appeler la mΓ©thode
grpcurl -plaintext localhost:9090 portfolio.PortfolioService/GetPortfolioValueLe service expose un endpoint de santΓ© sur /health pour le monitoring.
Le projet utilise GitHub Actions pour automatiser le build et le push des images Docker vers Docker Hub :
-
DΓ©clenchement :
- Push sur la branche
mainβ taglatest - Tags Git (ex:
v1.0.0) β tags versionnΓ©s - Pull Requests β build de test uniquement
- Push sur la branche
-
Multi-architecture : Les images sont buildΓ©es pour
linux/amd64etlinux/arm64 -
Cache : Utilise GitHub Actions cache pour accΓ©lΓ©rer les builds
Pour activer le workflow, configurez les secrets suivants dans votre dΓ©pΓ΄t GitHub :
- Allez dans
SettingsβSecrets and variablesβActions - Ajoutez les secrets suivants :
DOCKERHUB_USERNAME: Votre nom d'utilisateur Docker HubDOCKERHUB_TOKEN: Votre token d'accès Docker Hub (créer un token sur hub.docker.com)
Les images sont disponibles sur : idablaq/dual-api-crypt
# Dernière version
docker pull idablaq/dual-api-crypt:latest
# Version spΓ©cifique
docker pull idablaq/dual-api-crypt:v1.0.0- Utilisateur non-root dans le conteneur
- Certificats SSL pour les requΓͺtes HTTPS
- Headers CORS configurΓ©s
- Timeouts configurΓ©s
- Fork le projet
- CrΓ©er une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de dΓ©tails.
Ce projet dΓ©montre :
- Architecture Dual API : Une logique mΓ©tier, deux interfaces
- gRPC vs REST : Quand utiliser chaque technologie
- Microservices : Design et implΓ©mentation
- Docker : Conteneurisation d'applications Go
- API externes : IntΓ©gration avec CoinGecko
DΓ©veloppΓ© avec β€οΈ pour dΓ©montrer les architectures microservices modernes