gRPC als Alternative zu REST APIs? Dieser Blogpost zeigt, wie einfach die Verwendung von gRPC in ASP.NET Core 3 ist.
Was ist gRPC?
Seit vielen Jahren dominieren JSON REST APIs, ob zwischen Backend Services oder als Verbindung zwischen Frontend und Backend. REST und JSON sind die De-facto-Standards. Eine Alternative dazu ist gRPC. gRPC ist ein Framework für Remote Procedure Calls. Es nutzt eine Interface Description Language (IDL) zur Beschreibung von Services (siehe Abbildung 1). Neben klassischen Request-Response-Szenarien ist auch das bidirektionale Daten-Streaming von Client zu Server möglich. Als Transportprotokoll kommt HTTP/2 zum Einsatz. Weitere Infos sind unter https://grpc.io/ zu finden.
Abbildung 1: MachinePark.proto – Beispiel einer gRPC Servicebeschreibung
Wie wird gRPC in eine ASP.NET Core 3 Anwendung integriert?
Um den oben beschriebenen Service in ASP.NET Core 3 zu implementieren, muss das NuGet Paket Grpc.Tools installiert werden. Außerdem muss die MachinePark.proto Datei als Protobuf-Datei in das Projekt eingebunden werden. Im Hintergrund wird dann automatisch aus der Servicebeschreibung eine Basisklasse erstellt, die dann implementiert werden muss (siehe Abbildung 2). Durch die Servicebeschreibung erhält man eine typsichere Implementierung, bei der man sich über Serialisierung oder den richtigen Status Code keine Gedanken mehr machen muss.
Abbildung 2: MachineParkService.cs – Die serverseitige Implementierung eines gRPC Services
Der Client ist ähnlich einfach. Hier wird erneut im Hintergrund ein Klasse generiert, die anschließend verwendet werden kann (siehe Abbildung 3). Die Methoden des gRPC Services werden wie Methoden einer normalen C#-Klasse aufgerufen.
Abbildung 3: MachineParkClient.cs – Die clientseitige Implementierung eines gRPC Services
Lohnt sich ein Umstieg von REST auf gRPC?
gRPC bietet viele Vorteile gegenüber REST. Die Performance ist besser, die Datenstrukturen sind typsicher und ein bidirektionales Streaming von Daten ist möglich. Allgemein benötigt man bei gRPC weniger Code, um das gleiche wie bei einem REST Service zu erreichen.
Kommen wir zu den Problemen von gRPC. Aktuell ist es nicht möglich, direkt aus dem Browser heraus einen gRPC Server anzusprechen. Es wird immer ein Proxy benötigt, welches vom gRPC-Web-Protokoll auf das Standard gRPC-Protokoll übersetzt.
Ein weiteres Problem ist die Anbindung von Bestandssoftware. gRPC funktioniert zwar mit vielen verschiedenen anderen Programmiersprachen oder in älteren Versionen von ASP.NET Core, allerdings muss dann mehr Aufwand betrieben werden, um gRPC in diese Anwendungen zu integrieren.
gRPC ist nicht die Lösung aller Probleme. Bei Neuentwicklungen oder zur Kommunikation zwischen Backend Services ist es aber definitiv einen Blick wert.
Sprechen Sie uns an, wenn auch Sie Fragen zu Themen rund um .NET Core haben oder Hilfe bei Portierung Ihrer Anwendung nach .NET Core 3.0 in Ihrem Unternehmen benötigen. Wir führen Sie gerne ans Ziel.