gRPC gebruiken in browser-apps

Opmerking

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 10-versie van dit artikel voor de huidige release.

Door James Newton-King

Het is niet mogelijk om rechtstreeks vanuit een browser een gRPC-service aan te roepen. gRPC maakt gebruik van HTTP/2-functies en geen browser biedt het niveau van controle dat is vereist voor webaanvragen ter ondersteuning van een gRPC-client.

gRPC op ASP.NET Core biedt twee browsercompatibele oplossingen, gRPC-Web en gRPC JSON-transcodering.

gRPC-Web

met gRPC-Web kunnen browser-apps gRPC-services aanroepen met de gRPC-webclient en Protobuf.

  • Vergelijkbaar met normale gRPC, maar het heeft een iets ander wire-protocol, waardoor het compatibel is met HTTP/1.1 en browsers.
  • Vereist dat de browser-app een gRPC-client genereert op basis van een .proto bestand.
  • Hiermee kunnen browser-apps profiteren van het krachtige en lage netwerkgebruik van binaire berichten.

.NET heeft ingebouwde ondersteuning voor gRPC-Web. Zie gRPC-Web in ASP.NET Core gRPC-apps voor meer informatie.

gRPC JSON-transcodering

met gRPC JSON-transcodering kunnen browser-apps gRPC-services aanroepen alsof ze RESTful API's met JSON waren.

  • De browser-app hoeft geen gRPC-client te genereren of iets te weten te komen over gRPC.
  • RESTful-API's worden automatisch gemaakt op basis van gRPC-services door aantekeningen te maken op het .proto bestand met HTTP-metagegevens.
  • Hiermee kan een app ondersteuning bieden voor zowel gRPC- als JSON-web-API's zonder dat de inspanningen voor het bouwen van afzonderlijke services voor beide worden gedupliceerd.

.NET biedt ingebouwde ondersteuning voor het maken van JSON-web-API's van gRPC-services. Zie gRPC JSON-transcodering in ASP.NET Core gRPC-apps voor meer informatie.

Opmerking

gRPC JSON-transcodering vereist .NET 7 of hoger.

Aanvullende bronnen