1. anthonygiretti
Introduction à gRPC
dans ASP.NET Core 3
Anthony Giretti
Senior software developer chez Equisoft
http://anthonygiretti.com
anthony.giretti@gmail.com
3. anthonygiretti
• gRPC est un framework RPC (Remote procedure call *) et non pas un framework Microsoft.
• HTTP2
• Format de serialization Protocol Buffers (descripteur de contrat like WSDL pour WCF)
• Transport biredirectionnel de données
• Control des flux (annulation et délais d’attente)
• Permet de s’authentifier (ouf !)
• Créé aux alentours de 2004 par Google Open sourcé en 2015
• Java, C, C++, Node.js, Python, Ruby, Mais pas .NET ! (serveur)
• Apprécié pour 4 principales raisons
• Faible latence
• Serialisation efficace avec Protocol Buffers vs JSON
• Streaming bidirectionnel, realtime push
• 10 languages le supporte (client), + PHP, Javascript / Typescript, .NET, Go et Dart
* 1976: invention du protocole reseau RPC. 2004: implementation de JSON-RPC
C’est quoi gRPC?
4. anthonygiretti
• Language de structuration de données, descripteur de contrat (services et entités)
• Version actuelle: proto 3, (proto 2 obsolète)
• Fichiers nommés .proto
• Encodés en binaire, lors du transport HTTP
• Supporte tous les types primitifs, les énumérateurs et les collections
• Nécessite un compilateur protocol buffer pour générer vos entités
• Pas besoin de coder a bras vos entités
• Guide du développeur: https://developers.google.com/protocol-buffers/docs/overview
C’est quoi Protocol Buffers?
7. anthonygiretti
• Disponible uniquement avec ASP.NET Core 3
• Nécessite donc VS 2019 et le SDK .NET Core 3.0
• Création à partir d’un template prédéfini dans VS 2019
gRPC dans ASP.NET Core 3
8. anthonygiretti
• Création d’un fichier protobuf à parti d’un template Visual C# -> ASP.NET Core -> Général
gRPC dans ASP.NET Core 3
9. anthonygiretti
• Création d’un service gRPC
• Ajouter csharp_namespace
• Puis compiler! (nécessaire pour écrire le service)
• Enfin écrivez votre service
gRPC dans ASP.NET Core 3
17. anthonygiretti
• Status codes
• https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
REST VS gRPC
• JSON vs Protobuf (binaire)
• HTTP 2 only vs HTTP 1 & 2 (depuis ASP.NET Core 2.2)
• Pas de génération de code vs génération de code
• Supporté par les navigateurs vs non supporté par les navigateurs (en fait si mais….)
18. anthonygiretti
• Comment faire supporter un service gRPC par un navigateur ?
• Nécessite la librairie client gRPC-Web
• Un proxy (envoy) faisant la translation entre les requêtes HTTP 1 et HTTP 2
REST VS gRPC
19. anthonygiretti
• (Pour) Très performant
• Compression binaire
• Le protocole HTTP / 2 permet d’avoir une faible latence
• Le protocole HTTP / 2 permet le multiplexage (plusieurs requêtes sur la même connexion)
Pourquoi utiliser (ou pas) gRPC .NET ?
• (Pour) Très pratique
• Streaming Bidirectionnel
• Streaming client-server et server-client
• Unaire (comme REST)
• (Pour) Simple d’utilisation
• Spécification strictes: plus de débats autour des formats d’urls, des verbes à utiliser et des
codes HTTP
• Code auto généré: partage du fichier protobuf entre le server et le client, compilation puis
autogénération des entités et des services
20. anthonygiretti
• (Contre) Trop tôt pour s’en servir
• Bugs ASP.NET Core 3
• Manque de documentation de la part de Microsoft
• Support limité des navigateurs (non lié à Microsoft)
Pourquoi utiliser (ou pas) gRPC .NET ?