Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Vergleich von REST und GraphQL
APIs (Application Programming Interfaces) spielen eine entscheidende Rolle bei der Erleichterung des Datenaustauschs zwischen Anwendungen. Wie bereits erwähnt, haben sich zwei herausragende Ansätze für das Design von APIs herauskristallisiert: GraphQL und REST. Beide dienen zwar dem grundlegenden Zweck, die Kommunikation zwischen Client und Server zu ermöglichen, unterscheiden sich jedoch erheblich in ihrer Implementierung und ihren Anwendungsfällen.
GraphQL und REST haben mehrere wichtige Merkmale gemeinsam:
-
Client-Server Modell: Beide verwenden eine Client-Server-Architektur für den Datenaustausch.
-
Zustandslosigkeit: Keiner von beiden speichert die Informationen zur Clientsitzung zwischen den Anfragen.
-
HTTP-Based: Beide verwenden in der Regel HTTP als zugrundeliegendes Kommunikationsprotokoll.
-
Resource-Oriented Design: Beide entwerfen ihren Datenaustausch auf der Grundlage von Ressourcen, die sich auf alle Daten oder Objekte beziehen, auf die der Client über die API zugreifen und sie bearbeiten kann.
-
Flexibilität des Datenformats: JSON ist in beiden Fällen das am häufigsten verwendete Datenaustauschformat, obwohl auch andere Formate wie XML und HTML unterstützt werden.
-
Sprach- und datenbankunabhängig: Beide können mit jeder Programmiersprache oder Datenbankstruktur arbeiten und sind daher hochgradig interoperabel.
-
Caching-Unterstützung: Beide unterstützen Caching, sodass Clients und Server Daten speichern können, auf die häufig zugegriffen wird, um die Leistung zu verbessern.
GraphQL und REST haben zwar einige grundlegende Prinzipien gemeinsam, unterscheiden sich jedoch erheblich in ihrer Herangehensweise an das API-Design und den Datenabruf:
-
Anforderungsstruktur und Datenabruf
REST verwendet verschiedene HTTP-Methoden (GET, POST, PUT, DELETE), um Operationen mit Ressourcen auszuführen. Dies erfordert oft mehrere Endpunkte für verschiedene Ressourcen, was zu Ineffizienzen beim Datenabruf führen kann. Beispielsweise kann das Ausführen einer GET-Operation zum Abrufen der Daten eines Benutzers dazu führen, dass zu viele oder zu wenige Daten abgerufen werden. Um die richtigen Daten abzurufen, können eine Kürzung oder mehrere Operationen aufgerufen werden.
GraphQL verwendet einen einzigen Endpunkt für alle Operationen. Es stützt sich auf Abfragen zum Abrufen von Daten und Mutationen zum Ändern von Daten. Clients können Abfragen verwenden, um in einer einzigen Anfrage genau die Daten abzurufen, die sie benötigen. Dadurch wird der Netzwerk-Overhead reduziert, da die Datenübertragung minimiert wird.
-
Server-side Schema
REST erfordert kein serverseitiges Schema, obwohl eines für ein effizientes API-Design und eine effiziente Dokumentation optional definiert werden kann.
GraphQL verwendet ein stark typisiertes serverseitiges Schema, um Daten und Datendienste zu definieren. Das in GraphQL Schema Definition Language (SDL) geschriebene Schema umfasst Objekttypen und Felder für jedes Objekt sowie serverseitige Resolverfunktionen, die Operationen für jedes Feld definieren.
-
Versioning
REST beinhaltet häufig eine Versionierung in der URL, was dazu führen kann, dass mehrere API-Versionen gleichzeitig verwaltet werden. Die Versionierung ist nicht verpflichtend, kann aber dazu beitragen, grundlegende Änderungen zu verhindern.
GraphQL fördert eine kontinuierliche Weiterentwicklung der API ohne explizite Versionierung, indem es Abwärtskompatibilität erfordert. Gelöschte Felder geben Fehlermeldungen zurück, während Deprecation-Tags alte Felder auslaufen lassen und Warnmeldungen zurückgeben.
-
Behandlung von Fehlern
REST ist schwach typisiert, sodass die Fehlerbehandlung in den umgebenden Code integriert werden muss. Dadurch werden typbezogene Fehler möglicherweise nicht automatisch erkannt (z. B. das Analysieren einer Zahl als Text).
Im Gegensatz dazu ist GraphQL stark typisiert und erfordert eine umfassende Schemadefinition. Dadurch kann Ihr Service viele Anforderungsfehler automatisch mit einem hohen Detaillierungsgrad identifizieren.
-
Anwendungsfälle
REST ist besser geeignet für:
-
Kleinere Anwendungen mit weniger komplexen Datenanforderungen.
-
Szenarien, in denen Daten und Operationen von allen Kunden auf ähnliche Weise verwendet werden.
-
Anwendungen, für die keine komplexen Datenabfragen erforderlich sind.
GraphQL ist besser geeignet für:
-
Szenarien mit begrenzter Bandbreite, in denen die Minimierung von Anfragen und Antworten entscheidend ist.
-
Anwendungen mit mehreren Datenquellen, die an einem einzigen Endpunkt kombiniert werden müssen.
-
Fälle, in denen Kundenanfragen erheblich variieren und unterschiedliche Antwortstrukturen erwartet werden.
Beachten Sie, dass es möglich ist, sowohl GraphQL- als auch REST-APIs in einer einzigen Anwendung für verschiedene Funktionsbereiche zu verwenden. Darüber hinaus können Sie eine RESTful-API so aktualisieren, dass sie GraphQL-Funktionen enthält, ohne sie vollständig neu schreiben zu müssen. Ein Beispiel finden Sie unter So erstellen Sie GraphQL-Resolver für AWS Datenquellen.
-