Nouvelle expérience: appel des services .NET gRPC à partir d'un navigateur avec gRPC-Web

Nous sommes heureux d'annoncer la prise en charge expérimentale de gRPC-Web avec .NET. gRPC-Web vous permet d'appeler gRPC à partir d'applications basées sur un navigateur telles que JavaScript SPA ou les applications Blazor WebAssembly.

gRPC-Web pour .NET promet d'apporter de nombreuses fonctionnalités gRPC intéressantes aux applications de navigateur:

  • Clients générés par du code strictement typés
  • Poteaux compacts Protobuf
  • Streaming serveur



Qu'est-ce que gRPC-Web


Il n'est pas possible d'implémenter la spécification gRPC HTTP / 2 dans un navigateur car il n'y a pas d'API de navigateur avec un contrôle détaillé suffisant sur les requêtes HTTP. gRPC-Web  résout ce problème en étant compatible avec HTTP / 1.1 et HTTP / 2.

gRPC-Web n'est pas une nouvelle technologie. Il existe un client JavaScript gRPC-Web stable  , ainsi qu'un  proxy pour la traduction entre gRPC et gRPC-Web  pour les services. De nouveaux packages expérimentaux permettent à l'application ASP.NET Core gRPC de prendre en charge gRPC-Web sans serveur proxy et au client .NET Core gRPC d'appeler les services gRPC-Web. (Idéal pour les applications Blazor WebAssembly!)

Nouvelles fonctionnalités avec gRPC-Web


  • Appelez les applications ASP.NET Core gRPC à partir d'un navigateur - Les API de navigateur ne peuvent pas appeler gRPC HTTP / 2. gRPC-Web offre une alternative compatible.
    • SPA JavaScript
    • Applications d'assemblage Web .NET Blazor
  • Hébergez les applications ASP.NET Core gRPC dans IIS et Azure Application Service. Certains serveurs, tels que IIS et Azure Application Service, ne sont actuellement pas en mesure d'héberger les services gRPC. Alors qu'ils y travaillent activement, gRPC-Web offre une alternative intéressante qui fonctionne aujourd'hui dans n'importe quel environnement.
  • Appelez gRPC à partir de plates-formes autres que .NET Core. Certaines plates HttpClient- formes .NET ne prennent pas en charge HTTP / 2. gRPC-Web peut être utilisé pour appeler les services gRPC sur ces plateformes (par exemple Blazor WebAssembly, Xamarin).

Notez que gRPC-Web est peu performant et que deux fonctionnalités gRPC ne sont plus prises en charge: le streaming client et le streaming bidirectionnel. (le streaming sur le serveur est toujours supporté!)

Instructions du serveur GRPC-Web


Si vous n'avez pas encore étudié gRPC dans .NET, voici un  didacticiel simple pour que vous puissiez commencer .

gRPC-Web ne nécessite aucune modification de vos services, la seule modification est la configuration initiale. Pour activer gRPC-Web avec le service gRPC ASP.NET Core, ajoutez le lien vers le package Grpc.AspNetCore.Web . Configurez l'application pour utiliser gRPC-Web, l'ajout AddGrpcWeb(...)et UseGrpcWeb()le fichier de démarrage: Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    //    gRPC-Web     
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

L'appel de gRPC-Web à partir d'un navigateur peut nécessiter une configuration supplémentaire, par exemple, la configuration d'une application pour prendre en charge CORS.

Instructions pour le client GRPC-Web


Le client JavaScript gRPC-Web contient des instructions  pour configurer le client gRPC-Web à utiliser dans le navigateur JavaScript SPA.

Appeler gRPC-Web avec un client .NET est similaire à gRPC standard, le seul changement est la façon dont le canal est créé. Pour activer gRPC-Web, ajoutez le lien vers le package Grpc.Net.Client.Web . Configurez le canal à utiliser GrpcWebHandler:

//     gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

Pour voir gRPC-Web avec .NET en action, lisez le billet de blog le plus cool de notre collègue qui a utilisé  gRPC-Web dans Blazor WebAssembly .

Essayez gRPC-Web avec ASP.NET Core dès aujourd'hui


Aperçu des packages sur NuGet:


Vous pouvez trouver de la documentation sur l'utilisation de gRPC-Web avec .NET Core  ici .

Remarque: bien que gRPC-Web pour .NET ne soit qu'un projet pilote, pas un produit pris en charge.

Source: https://habr.com/ru/post/undefined/


All Articles