Was ist der Unterschied zwischen GraphQL und REST?

GraphQL und REST sind zwei unterschiedliche Ansätze zum Entwerfen von APIs für den Datenaustausch über das Internet. REST ermöglicht Client-Anwendungen den Datenaustausch mit einem Server mithilfe von HTTP-Verben, dem Standardkommunikationsprotokoll des Internets. Andererseits ist GraphQL eine API-Abfragesprache, die Spezifikationen dafür definiert, wie eine Client-Anwendung Daten von einem Remote-Server anfordern soll. Sie können GraphQL in Ihren API-Aufrufen verwenden, ohne sich auf die serverseitige Anwendung verlassen zu müssen, um die Anforderung zu definieren. Sowohl GraphQL als auch REST sind leistungsstarke Technologien, die hinter den meisten unserer modernen Anwendungen stehen.

Mehr über REST lesen »

Mehr über die Implementierung von GraphQL lesen »

Was sind die Ähnlichkeiten zwischen GraphQL und REST?

Sowohl GraphQL als auch REST sind beliebte API-Architekturstile, die den Datenaustausch zwischen verschiedenen Diensten oder Anwendungen in einem Client-Server-Modell ermöglichen.

APIs erleichtern den Zugriff auf Daten und Datenoperationen wie diese:

  1. Ein Client sendet eine API-Anfrage an einen Endpunkt oder mehrere Endpunkte auf einem Server
  2. Der Server gibt eine Antwort, die Daten, Datenstatus oder Fehlercodes enthält

REST und GraphQL ermöglichen es Ihnen, Daten in einer separaten Anwendung, einem Service oder Modul über die API zu erstellen, zu ändern, zu aktualisieren und zu löschen. Mit REST entwickelte APIs werden als RESTful APIs oder REST-APIs bezeichnet. Diejenigen, die mit GraphQL entwickelt wurden, sind einfach GraphQL-APIs.

Frontend- und Backend-Teams verwenden diese API-Architekturen, um modulare und zugängliche Anwendungen zu erstellen. Die Verwendung einer API-Architektur trägt dazu bei, Systeme sicher, modular und skalierbar zu halten. Es macht Systeme auch leistungsfähiger und einfacher in andere Systeme zu integrieren.

Als Nächstes besprechen wir einige andere Ähnlichkeiten zwischen GraphQL und REST.

Mehr über APIs erfahren »

Architektur

Sowohl REST als auch GraphQL implementieren mehrere gemeinsame API-Architekturprinzipien. Hier sind zum Beispiel die Prinzipien, die sie teilen:

  • Beide sind statuslos, sodass der Server keinen Antwortverlauf zwischen Anfragen speichert
  • Beide verwenden ein Client-Server-Modell, sodass Anfragen von einem einzelnen Client zu Antworten von einem einzelnen Server führen
  • Beide basieren auf HTTP, da HTTP das zugrunde liegende Kommunikationsprotokoll ist

Ressourcenbasiertes Design

REST und GraphQL gestalten ihren Datenaustausch beide rund um Ressourcen. Eine Ressource bezieht sich auf alle Daten oder Objekte, auf die der Client über die API zugreifen und sie bearbeiten kann. Jede Ressource hat ihren eigenen eindeutigen Identifier (URI) und eine Reihe von Operationen (HTTP-Methoden), die der Client auf ihr ausführen kann.

Stellen Sie sich zum Beispiel eine Social-Media-API vor, mit der Benutzer Beiträge erstellen und verwalten. In einer ressourcenbasierten API wäre ein Beitrag eine Ressource. Es hat eine eigene eindeutige Kennung, zum Beispiel /posts/1234. Und es hat eine Reihe von Operationen, wie GET, um den Beitrag in REST abzurufen, oder Abfrage, um den Beitrag in GraphQL abzurufen.

Data Exchange

Sowohl REST als auch GraphQL unterstützen ähnliche Datenformate.

JSON ist das beliebteste Datenaustauschformat, das alle Sprachen, Plattformen und Systeme verstehen. Der Server gibt JSON-Daten an den Client zurück. Andere Datenformate sind verfügbar, werden aber weniger häufig verwendet, darunter XML und HTML.

In ähnlicher Weise unterstützen REST und GraphQL beide Caching. So können Clients und Server häufig aufgerufene Daten zwischenspeichern, um die Kommunikationsgeschwindigkeit zu erhöhen.

Mehr über JSON erfahren »

Sprach- und Datenbankneutralität

Sowohl GraphQL- als auch REST-APIs funktionieren mit jeder Datenbankstruktur und jeder Programmiersprache, sowohl clientseitig als auch serverseitig. Dadurch sind sie mit jeder Anwendung hochgradig interoperabel.

Welche REST-Einschränkungen versucht GraphQL zu überwinden?

GraphQL entstand 2012 als Reaktion auf das Bedürfnis nach Geschwindigkeit bei neuen Social-Media-Plattformen. Entwickler stellten fest, dass bestehende API-Architekturen wie REST zu langwierig und strukturiert waren, um Newsfeeds effizient zu produzieren.

Als Nächstes besprechen wir einige der Herausforderungen, mit denen sie konfrontiert waren.

Datenaustausch mit fester Struktur

Die REST-API erfordert, dass Clientanfragen einer festen Struktur folgen, um eine Ressource zu erhalten. Diese starre Struktur ist einfach zu bedienen, aber sie ist nicht immer das effizienteste Mittel, um genau die benötigten Daten auszutauschen.

Überabruf und Unterabruf

REST-APIs geben immer einen ganzen Datensatz zurück. Beispielsweise würden Sie von einem Personenobjekt in der REST-API den Namen, das Geburtsdatum, die Adresse und die Telefonnummer der Person erhalten. Sie würden all diese Daten erhalten, auch wenn Sie nur eine Telefonnummer benötigen würden.

In ähnlicher Weise benötigen Sie mehrere REST-API-Anfragen, wenn Sie die Telefonnummer einer Person und den letzten Kauf erfahren möchten. Die URL /person würde die Telefonnummer zurückgeben und die URL /purchase würde die Kaufhistorie zurückgeben.

Social-Media-Entwickler mussten viel Code schreiben, nur um API-Anfragen zu verarbeiten, was sich auf Leistung und Benutzererfahrung auswirkte.

GraphQL entwickelte sich als abfragebasierte Lösung. Abfragen können die genauen Daten in nur einem API-Anfrage- und Antwortaustausch zurückgeben.

Hauptunterschiede: GraphQL vs. REST

Eine REST-API ist ein Architekturkonzept für die Anwendungskommunikation. Andererseits ist GraphQL eine Spezifikation, eine API-Abfragesprache und eine Reihe von Tools. GraphQL arbeitet über einen einzigen Endpunkt unter Verwendung von HTTP.

Darüber hinaus konzentrierte sich die REST-Entwicklung stärker auf die Erstellung neuer APIs. In der Zwischenzeit lag der Schwerpunkt von GraphQL auf der API-Leistung und -Flexibilität.

Als nächstes werden weitere Unterschiede angeführt.

Kundenseitige Anfrage

Folgendes verwendet eine REST-Anfrage, um zu funktionieren: 

  • HTTP-Verben, die die Aktion bestimmen
  • Eine URL, die die Ressource identifiziert, auf der das HTTP-Verb ausgeführt werden soll
  • Zu analysierende Parameter und Werte, wenn Sie ein Objekt innerhalb einer vorhandenen serverseitigen Ressource erstellen oder ändern möchten

Sie verwenden beispielsweise GET, um schreibgeschützte Daten von einer Ressource abzurufen, POST, um einen neuen Ressourceneintrag hinzuzufügen, oder PUT, um eine Ressource zu aktualisieren.

Im Gegensatz dazu verwenden GraphQL-Anfragen Folgendes:

  • Abfrage zum Abrufen von schreibgeschützten Daten
  • Mutation zur Änderung von Daten
  • Abonnement für den Empfang ereignisbasierter oder Streaming-Datenupdates

Ein Datenformat beschreibt, wie der Server die Daten zurückgeben soll, einschließlich Objekten und Feldern, die dem serverseitigen Schema entsprechen. Sie können auch neue Daten eingeben. Intern sendet GraphQL jede Client-Anfrage als POST-HTTP-Anfrage.

An den Client zurückgegebene Daten

Bei der REST-Architektur werden Daten vom Server in der vom Server angegebenen Gesamtressourcenstruktur an den Client zurückgegeben. Die folgenden Beispiele zeigen zurückgegebene Daten in REST und GraphQL.

Beispiel für zurückgegebene Daten in REST

In REST gibt GET /posts Folgendes zurück:

[

  {

    „id“: 1,

    „title“: „Erster Beitrag“,

    „Inhalt“: „Dies ist der Inhalt des ersten Beitrags.“

  },

  {

    „id“: 2,

    „title“: „Zweiter Beitrag“,

    „Inhalt“: „Dies ist der Inhalt des zweiten Beitrags.“

  },

  {

    „id“: 3,

    „Titel“: „Dritter Beitrag“,

    „Inhalt“: „Dies ist der Inhalt des dritten Beitrags.“

  }

]

Beispiel für zurückgegebene Daten in GraphQL

Wenn Sie GraphQL verwenden, werden nur die Daten zurückgegeben, die in der vom Client angegebenen Struktur angegeben sind.

GET /graphql? query{post(id: 1) {id title content}} gibt nur den ersten Beitrag zurück:

{

  „Daten“: {

    „Beiträge“: [

      {

        „id“: „1“,

        „title“: „Erster Beitrag“,

        „Inhalt“: „Dies ist der Inhalt des ersten Beitrags.“

      },

]}}

Serverseitiges Schema

GraphQL verwendet ein serverseitiges Schema zur Definition von Daten und Datenservices, das sich von einer REST-API unterscheidet.

Das in der GraphQL-Schemadefinitionssprache geschriebene Schema enthält Details wie diese:

  • Objekttypen und Felder, die zu jedem Objekt gehören
  • Serverseitige Resolver-Funktionen, die eine Operation für jedes Feld definieren

Das Schema definiert explizit Typen, um alle im System verfügbaren Daten zu beschreiben und zu beschreiben, wie Clients auf diese Daten zugreifen oder sie ändern können. 

Andererseits benötigen REST-APIs kein serverseitiges Schema. Sie können es jedoch optional für effizientes API-Design, Dokumentation und Client-Entwicklung definieren. 

Versioning

Mit der Weiterentwicklung von APIs können sich ihre Datenstrukturen und Abläufe ändern. Kunden, die von diesen Änderungen nicht wissen, können ihre Systeme beschädigen oder zu unbekannten Fehlern führen.

REST-APIs enthalten häufig eine Versionierung in der URL, um dieses Problem zu lösen, z. B. https://example.com/api/v1/person/12341. Die Versionierung ist jedoch nicht verpflichtend und kann zu Fehlern führen. 

GraphQL erfordert API-Abwärtskompatibilität. Gelöschte Felder geben also eine Fehlermeldung zurück, oder Felder mit einem veralteten Tag geben eine Warnung zurück.

Fehlerbehebung

GraphQL ist eine stark typisierte API-Architektur, was bedeutet, dass eine detaillierte Beschreibung der Daten, ihrer Struktur und der Datenoperationen im Schema erforderlich ist. Aufgrund des Detaillierungsgrades des Schemas kann das System Anforderungsfehler automatisch identifizieren und nützliche Fehlermeldungen bereitstellen. 

REST-APIs sind schwach typisiert, und Sie müssen die Fehlerbehandlung in den umgebenden Code integrieren. Wenn eine PUT-Anforderung beispielsweise einen Zahlenwert als Text statt als Ganzzahl analysiert, identifiziert das System den Fehler nicht automatisch.

Wann sollte GraphQL verwendet werden vs. REST

Sie können GraphQL- und REST-APIs synonym verwenden. Es gibt jedoch einige Anwendungsfälle, in denen das eine oder andere besser passt.

Zum Beispiel ist GraphQL wahrscheinlich die bessere Wahl, wenn Sie folgende Überlegungen haben:

  • Sie haben eine begrenzte Bandbreite und möchten die Anzahl der Anfragen und Antworten minimieren
  • Sie haben mehrere Datenquellen und möchten diese an einem Endpunkt kombinieren
  • Sie haben Kundenanfragen, die sich erheblich unterscheiden, und Sie erwarten sehr unterschiedliche Antworten

 

Auf der anderen Seite ist REST wahrscheinlich die bessere Wahl, wenn Sie die folgenden Überlegungen berücksichtigen:

  • Sie haben kleinere Anwendungen mit weniger komplexen Daten
  • Sie haben Daten und Operationen, die alle Kunden auf ähnliche Weise verwenden
  • Sie haben keine Anforderungen an komplexe Datenabfragen

 

Es ist auch möglich, eine einzige Anwendung mit GraphQL-APIs und REST-APIs für verschiedene Funktionsbereiche zu erstellen.

So verwenden Sie sowohl GraphQL als auch REST über dieselbe API

Das Upgrade einer RESTful-API auf eine GraphQL-API ist möglich, ohne dass eine vollständige Neuschreibung durchgeführt werden muss.

Hier ist ein Überblick über den Prozess:

  1. Verstehen Sie das Datenmodell der RESTful-API. Untersuchen Sie dazu die Form der Daten in jeder URL-Ressource.
  2. Schreiben Sie das GraphQL-Schema aus dem Datenmodell.
  3. Ermitteln Sie, welche Operationen Clients mit den Daten ausführen, und nehmen Sie sie in das Schema auf.
  4. Erstellen Sie eine Resolver-Funktion im serverseitigen Code für jedes Feld im Schema.
  5. Erstellen Sie einen GraphQL-Server mit den Resolvern und dem Schema.

Danach können Kunden entweder über GraphQL oder REST mit Ihrer API kommunizieren.

Lesen, wie Sie GraphQL-Resolver erstellen »

Zusammenfassung der Unterschiede: REST vs. GraphQL

 

REST

GraphQL

Wie lautet es?

REST ist ein Regelwerk, das den strukturierten Datenaustausch zwischen einem Client und einem Server definiert.

GraphQL ist eine Abfragesprache, ein Architekturstil und eine Reihe von Tools zum Erstellen und Bearbeiten von APIs.

Am besten geeignet für

REST eignet sich gut für einfache Datenquellen, bei denen Ressourcen gut definiert sind.

GraphQL eignet sich gut für große, komplexe und miteinander verbundene Datenquellen.

Datenzugriff

REST hat mehrere Endpunkte in Form von URLs zur Definition von Ressourcen.

GraphQL hat einen einzigen URL-Endpunkt.

Zurückgegebene Daten

REST gibt Daten in einer festen Struktur zurück, die vom Server definiert wird.

GraphQL gibt Daten in einer vom Client definierten flexiblen Struktur zurück.

Wie Daten strukturiert und definiert werden

REST-Daten sind schwach typisiert. Der Kunde muss also entscheiden, wie die formatierten Daten interpretiert werden sollen, wenn sie zurückgegeben werden.

GraphQL-Daten sind stark typisiert. Der Kunde erhält also Daten in vorgegebenen und für beide Seiten verständlichen Formaten.

Überprüfung von Fehlern

Bei REST muss der Client überprüfen, ob die zurückgegebenen Daten gültig sind.

Bei GraphQL werden ungültige Anfragen in der Regel von der Schemastruktur abgelehnt. Dies führt zu einer automatisch generierten Fehlermeldung.

Wie kann AWS Ihre GraphQL- und REST-Anforderungen unterstützen?

Amazon Web Services (AWS) hilft Ihnen dabei, besser verwaltete APIs zu erstellen und bereitzustellen.

AWS AppSync erstellt serverlose GraphQL- und Publish-Subscribe-APIs (Pub/Sub). Sie vereinfachen die Anwendungsentwicklung über einen einzigen Endpunkt, um Daten sicher abzufragen, zu aktualisieren oder zu veröffentlichen.

Mit AWS AppSync erstellen Sie APIs, mit denen Kunden Folgendes tun können:

  • Interagieren Sie mit mehreren Datenquellen (wie SQL, NoSQL, Suchdaten, REST-Endpunkte und Microservices) mit einem einzigen Netzwerkaufruf
  • Automatisches Synchronisieren von Daten zwischen Mobil- und Webanwendungen und der Cloud
  • Übertragung von Daten vom Backend zu und zwischen verbundenen Clients
  • Greifen Sie auf Daten aus dem Internet der Dinge (IoT) zu, um Echtzeit-Dashboards in einer Mobil- oder Webanwendung zu erstellen

Amazon API Gateway ist in ähnlicher Weise ein vollständig verwalteter Service, der das Erstellen, Veröffentlichen, Warten, Überwachen und Sichern von APIs für Sie in jeder beliebigen Größenordnung vereinfacht.

So können Sie von der Verwendung mit API Gateway profitieren:

  • Benutzern sowohl für API-Anforderungen als auch -Antworten Hochgeschwindigkeits-Leistungen zur Verfügung stellen
  • Zugriff auf Ihre APIs autorisieren
  • Mit API Gateway gleichzeitig mehrere Versionen derselben API ausführen, sodass Sie neue Versionen schnell iterieren, testen und freigeben können
  • Leistungsmetriken und Informationen über API-Aufrufe, Datenlatenz und Fehlerraten vom API-Gateway überwachen

Beginnen Sie mit GraphQL und REST auf AWS, indem Sie noch heute ein Konto erstellen.

Nächste Schritte mit AWS

Mit der Entwicklung mit GraphQL beginnen

Informationen zu den ersten Schritten mit GraphQL in AWS

Weitere Informationen 
Mit der Entwicklung mit REST beginnen

Informationen zu den ersten Schritten mit REST in AWS

Weitere Informationen