anthonygiretti
Introduction à gRPC
dans ASP.NET Core 3
Anthony Giretti
Senior software developer chez Equisoft
http://anthonygiretti.com
anthony.giretti@gmail.com
anthonygiretti
INTRODUCTION
2- C’est quoi Protocol Buffers?
3- gRPC dans ASP.NET Core 3
4- REST vs gRPC
1- C’est quoi gRPC?
6- Démo
5- Pourquoi utiliser (ou pas) gRPC .NET ?
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?
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?
anthonygiretti
• Exemple
C’est quoi Protocol Buffers?
anthonygiretti
• Grpc.Net.Client compatible avec Polly
• HttpClient -> Polly
gRPC dans ASP.NET Core 3
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
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
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
anthonygiretti
• Ecriture d’un service gRPC
gRPC dans ASP.NET Core 3
anthonygiretti
• Configurer le service gRPC
gRPC dans ASP.NET Core 3
anthonygiretti
• Consommer un service gRPC (exemple .NET Core 3 console app)
• Installer les packages requis
gRPC dans ASP.NET Core 3
anthonygiretti
• Consommer un service gRPC (exemple .NET Core 3 console app)
• Importer le fichier protobuf
gRPC dans ASP.NET Core 3
anthonygiretti
• Consommer un service gRPC (exemple .NET Core 3 console app)
• Compilez!
gRPC dans ASP.NET Core 3
anthonygiretti
• Consommer un service gRPC (exemple .NET Core 3 console app)
• Écrire votre client!
gRPC dans ASP.NET Core 3
anthonygiretti
• Consommer un service gRPC dans Xamarin
gRPC dans Xamarin
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….)
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
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
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 ?
anthonygiretti
DEMO!
anthonygiretti
• Ressources
• https://www.grpc.io/docs/guides/
• https://developers.google.com/protocol-buffers/docs/csharptutorial
• https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
• https://github.com/grpc-ecosystem/awesome-grpc
• https://medium.com/@jnewmano/grpc-postman-173b62a64341
• https://github.com/grpc/grpc-dotnet/tree/master/examples
• https://grpc.io/blog/grpc-on-dotnetcore/
• https://github.com/grpc/grpc-web
• https://www.youtube.com/watch?v=DDBmvOPfqzA&feature=youtu.be&t=2340
• https://stackoverflow.com/questions/28582935/does-http-2-make-websockets-
obsolete#targetText=In%20HTTP%2F2%2C%20server%2D,the%20client%20from%20the%20
browser.&targetText=However%2C%20with%20Websocket%2C%20the%20developer,they%2
0should%20complement%20each%20other.
• https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
Références

Intro grpc.net

  • 1.
    anthonygiretti Introduction à gRPC dansASP.NET Core 3 Anthony Giretti Senior software developer chez Equisoft http://anthonygiretti.com anthony.giretti@gmail.com
  • 2.
    anthonygiretti INTRODUCTION 2- C’est quoiProtocol Buffers? 3- gRPC dans ASP.NET Core 3 4- REST vs gRPC 1- C’est quoi gRPC? 6- Démo 5- Pourquoi utiliser (ou pas) gRPC .NET ?
  • 3.
    anthonygiretti • gRPC estun 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 destructuration 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?
  • 5.
  • 6.
    anthonygiretti • Grpc.Net.Client compatibleavec Polly • HttpClient -> Polly gRPC dans ASP.NET Core 3
  • 7.
    anthonygiretti • Disponible uniquementavec 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’unfichier protobuf à parti d’un template Visual C# -> ASP.NET Core -> Général gRPC dans ASP.NET Core 3
  • 9.
    anthonygiretti • Création d’unservice gRPC • Ajouter csharp_namespace • Puis compiler! (nécessaire pour écrire le service) • Enfin écrivez votre service gRPC dans ASP.NET Core 3
  • 10.
    anthonygiretti • Ecriture d’unservice gRPC gRPC dans ASP.NET Core 3
  • 11.
    anthonygiretti • Configurer leservice gRPC gRPC dans ASP.NET Core 3
  • 12.
    anthonygiretti • Consommer unservice gRPC (exemple .NET Core 3 console app) • Installer les packages requis gRPC dans ASP.NET Core 3
  • 13.
    anthonygiretti • Consommer unservice gRPC (exemple .NET Core 3 console app) • Importer le fichier protobuf gRPC dans ASP.NET Core 3
  • 14.
    anthonygiretti • Consommer unservice gRPC (exemple .NET Core 3 console app) • Compilez! gRPC dans ASP.NET Core 3
  • 15.
    anthonygiretti • Consommer unservice gRPC (exemple .NET Core 3 console app) • Écrire votre client! gRPC dans ASP.NET Core 3
  • 16.
    anthonygiretti • Consommer unservice gRPC dans Xamarin gRPC dans Xamarin
  • 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 fairesupporter 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èsperformant • 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) Troptô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 ?
  • 21.
  • 22.
    anthonygiretti • Ressources • https://www.grpc.io/docs/guides/ •https://developers.google.com/protocol-buffers/docs/csharptutorial • https://github.com/grpc/grpc/blob/master/doc/statuscodes.md • https://github.com/grpc-ecosystem/awesome-grpc • https://medium.com/@jnewmano/grpc-postman-173b62a64341 • https://github.com/grpc/grpc-dotnet/tree/master/examples • https://grpc.io/blog/grpc-on-dotnetcore/ • https://github.com/grpc/grpc-web • https://www.youtube.com/watch?v=DDBmvOPfqzA&feature=youtu.be&t=2340 • https://stackoverflow.com/questions/28582935/does-http-2-make-websockets- obsolete#targetText=In%20HTTP%2F2%2C%20server%2D,the%20client%20from%20the%20 browser.&targetText=However%2C%20with%20Websocket%2C%20the%20developer,they%2 0should%20complement%20each%20other. • https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md Références