gRPC entre microservices .NET
Le contrat .proto, source unique de vérité
.proto : il décrit les messages et le service, indépendamment du langage. C'est le contrat — ni le client ni le serveur ne l'écrivent à la main. On y déclare un service Pricing exposant un appel rpc GetQuote (QuoteRequest) qui renvoie un QuoteReply , chaque champ étant numéroté ( string sku = 1; , int32 quantity = 2; ) — ces numéros sont la clé de la compatibilité ascendante : on n'en réutilise jamais un.
.csproj via <Protobuf Include="pricing.proto" /> . Le package Grpc.Tools génère alors, à la compilation, la classe de base serveur et le client typé — aucun DTO à recopier :
Serveur et client typés
Pricing.PricingBase et redéfinit la méthode. Pas de routing à câbler, pas de désérialisation manuelle : on reçoit un message fortement typé.
HttpClient . On injecte le client généré via AddGrpcClient , et on l'appelle comme une méthode locale :
Le streaming, l'argument décisif
stream côté serveur pousse des résultats au fil de l'eau ; un stream bidirectionnel ouvre un canal full-duplex idéal pour la télémétrie ou le chat. On écrit dans un IServerStreamWriter<T> et le client itère avec await foreach — sans polling, sans WebSocket à bricoler.
gRPC contre REST : choisir en connaissance de cause
Le réflexe sain : REST en façade publique, gRPC à l'intérieur . Le contrat .proto devient alors la frontière formelle entre vos services — versionnée, partagée, vérifiée par le compilateur.