Im letzten Blogpost der Artikelreihe zu den Alternativen der Windows Communication Foundation (WCF) wollen wir diese noch einmal zusammenfassend gegenüberstellen.
Entscheidungsmatrix
Eigenschaft | Web API | gRPC |
---|---|---|
Bidirektionale Kommunikation | Bedingt möglich Diese muss mit SignalR realisiert werden. | Bedingt möglich Es wird nur Stream Response unterstützt. |
Aufwand Änderung in Bestandscode | Gering Durch die Übernahme der Service-Methoden in die Controller und die Generierung des Clients sind nur geringe Anpassungen nötig. | Groß Das Mapping ist nötig, da teilweise eigene Datentypen vorgegeben sind: Es muss ein Über- und Rückgabe-Parameter existieren. |
Notwendiges Vorwissen | Technologiespezifisch Web-API-Wissen zu Controller und Action-Verwendung, HTTP-Verben | Technologiespezifisch gRPC-Besonderheiten, Erstellung *.proto-Datei |
Plattformunabhängigkeit | Ja Bei der Verwendung von .NET Core können Client und Server auf unterschiedlichen Plattformen ausgeführt werden. | Ja Bei der Verwendung von .NET Core können Client und Server auf unterschiedlichen Plattformen ausgeführt werden. |
Interoperabilität | Ja Client und Server können in unterschiedlichen Programmiersprachen erstellt worden sein. | Ja Client und Server können in unterschiedlichen Programmiersprachen erstellt worden sein. |
Browser-Unterstützung | Ja | Optional Aktuell nur mit 3rd-Party-Bibliotheken möglich |
Selbstbeschreibende Schnittstellen | Optional OpenAPI ist durch die Einbindung von 3rd- Party-Bibliotheken möglich. | Nein Die *.proto-Datei zur Beschreibung der Schnittstelle muss selbst erstellt werden. |
Payload-Größe | Höher JSON, menschenlesbar | Geringer Binary-Format |
Geschwindigkeit | Geringer | Höher |
Zukunftsfähigkeit | Ja Web API wird aktuell als zukunftsfähige Alternative von Microsoft empfohlen. | Ja gRPC wird aktuell als zukunftsfähige Alternative von Microsoft empfohlen. |
Debugging | Einfach möglich | Bedingt möglich Die übertragenen Daten können aufgrund der Komprimierung nicht eingesehen werden. |
Vor- und Nachteile
Web API
gRPC
Vorteile
- Übertragungsdaten lesbar
- Weniger Code-Anpassung bei Migration nötig
- Flexiblere Gestaltung der Endpunkte und Aufrufe in Bezug auf Über- und Rückgabe-Parameter
- Schnellere Übertragung
- Typisiert durch Protocol-Buffers-Schnittstellenbeschreibung
- Einfache Generierung von Client-Klassen
Nachteile
- Langsamere Übertragung im Vergleich zu gRPC
- Generierung von Client-Klassen nur durch 3rd-Party-Bibliotheken
- Keine Typisierung der Schnittstelle möglich
- Übertragungsdaten nicht lesbar
- Mapping-Code nötig, da keine Standard-.NET-Typen verwendet werden
- Größerer Migrationsaufwand, da mehr Code-Anpassungen nötig
Fazit
In unserer Blogpostreihe zum Thema WCF haben wir sowohl ASP.NET Core Web API als auch gRPC vorgestellt. Dabei ist deutlich geworden, dass beide Varianten ihre Vor- und Nachteile haben.
Bei Web API können die Schnittstellen durch den Content-First-Ansatz sowie die Nutzung von HTTP sehr einfach von jedem verwendet werden. Dabei sind die übertragenen Daten jederzeit einsehbar und können gelesen werden.
Durch gRPC werden im Contract-First-Ansatz die Schnittstellenaufrufe abstrahiert, wodurch diese schneller sind und von Entwicklern sehr einfach angesprochen werden können. Dabei können die übertragenen Daten aber nicht eingesehen werden.
Grundsätzlich ist die Migration zu beiden Varianten möglich und beide werden auch von Microsoft empfohlen. Abschließend kann jedoch keine Empfehlung für eine der beiden Alternativen gegeben werden. Eine Entscheidung sollte immer projektspezifisch und nach verschiedenen Kriterien wie Projektgröße, Erfahrung in der jeweiligen Technologie oder bestehender Architektur getroffen werden.