Ce projet a pour objectif d'approfondir mes connaissances sur le fonctionnement de gRPC, en explorant ses concepts, l'implémentation de services, et la communication client-serveur.
- Comprendre les bases de gRPC (Remote Procedure Call).
- Implémenter des services gRPC et des clients pour consommer ces services.
- Explorer les différents types de communication supportés par gRPC (Unary, Streaming, Bidirectional).
- Expérimenter la génération de stubs à partir de fichiers .proto.
- Vue 3
- Golang
- gRPC et Protocol Buffers (.proto)
- Envoy
- Docker et Docker-compose
git clone https://github.com/rijenth/grpc.gitNe pas oublier de créer un fichier .env à partir du .env.example avant d'executer la commande qui suit.
cd ./grpc && docker-compose up -ddocker-compose exec go migrate -path internal/infrastructure/database/migrations -database "mysql://root:root@tcp(mysql:3306)/database" upLe fichier .proto utilise un langage appelé Protobuf, qui permet de décrire les services et les messages (les données échangées).
- Installation :
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
Permet de lint les fichiers .proto pour détecter les erreurs de syntaxe et appliquer les bonnes pratiques.
-
Installation :
go install github.com/yoheimuta/protolint/cmd/protolint@latest
-
Usage :
protolint lint ./proto
Permet de simuler des requêtes vers un serveur gRPC et d'interagir avec les services gRPC.
-
Installation :
brew install grpcurl
-
Usage :
-
Lister les services disponibles sur un serveur gRPC :
grpcurl -plaintext localhost:8000 list
-
Décrire un service gRPC :
grpcurl -plaintext localhost:8000 describe user.UserService
-
Appeler une méthode gRPC avec des paramètres :
grpcurl -plaintext -d '{"id": "alice_d"}' localhost:8000 user.UserService/GetUserByUsername -
Lister les méthodes disponibles d'un service gRPC :
grpcurl -plaintext localhost:8000 list user.UserService
-
Tester une méthode sans paramètres :
grpcurl -plaintext localhost:8000 user.UserService/ServiceSansParametre
Ces commandes permettent de tester rapidement les services gRPC exposés par le serveur et de simuler des appels client-serveur.
-
Permet de créer des fichiers de migration à l'aide du package golang-migrate.
-
Installation :
go install -tags 'mysql' github.com/golang-migrate/migrate/v4/cmd/migrate@latest -
Usage :
-
Création des fichiers de migration SQL (
.upet.down) :migrate create -ext sql -dir internal/infrastructure/database/migrations -seq <nom_de_la_migration>
-
Application de toutes les migrations (
.up) :docker-compose exec go migrate -path internal/infrastructure/database/migrations -database "mysql://root:root@tcp(mysql:3306)/database" up
-
Application de toutes les migrations (
.down) :docker-compose exec go migrate -path internal/infrastructure/database/migrations -database "mysql://root:root@tcp(mysql:3306)/database" down
-
Les commandes suivantes servent à générer les stubs à partir du fichier user.proto. Elles doivent être exécutées depuis le répertoire principal du projet.
-
Fichier backend :
protoc --go_out=. --go-grpc_out=. proto/user.proto
-
Fichier frontend :
protoc --ts_out ./web/src/generated --proto_path "./proto" ./proto/user.proto -
Régénérer l'ensemble des fichiers :
protoc --go_out=. --go-grpc_out=. proto/user.proto && protoc --ts_out ./web/src/generated --proto_path "./proto" ./proto/user.proto