Überblick
GraphQL ist eine Abfragesprache und serverseitige Runtime für APIs, die den Kunden nur diejenigen Daten zur Verfügung stellt, die sie wirklich brauchen.
GraphQL macht APIs schneller, flexibler und entwicklerfreundlicher. Es kann sogar innerhalb einer IDE (Integrated Development Environment) namens GraphiQL bereitgestellt werden. Mit dieser Alternative zu REST können Entwickler Anfragen strukturieren, die mit einem einzigen API-Aufruf Daten aus mehreren Quellen gleichzeitig abrufen.
Außerdem können API-Maintainer mit GraphQL flexibel Felder hinzufügen oder entfernen, ohne dass dies bestehende Abfragen beeinträchtigt. Entwickler können APIs mit ihrer bevorzugten Methode erstellen, und die GraphQL-Spezifikation stellt sicher, dass die API für den Kunden auf vorhersehbare Weise funktioniert.
Schemata, Resolver und andere gängige GraphQL-Begriffe
API-Entwickler erstellen mit GraphQL Schemata für alle möglichen Daten, die ein Kunde über diesen Service abfragen kann.
Ein GraphQL-Schema definiert, welche Objekttypen Sie anfordern können und welche Felder enthalten sein sollen.
GraphQL gleicht die eingehenden Abfragen mit dem Schema ab und führt die validierten Abfragen aus.
Der API-Entwickler verknüpft alle Felder eines Schemas mit einer Funktion namens Resolver. Während der Ausführung wird dieser Resolver aufgerufen, um den Wert zu erstellen.
Abgesehen von der Definition und Validierung der Syntax von API-Abfragen (wie im graphql-spec-Repository dargelegt) überlässt GraphQL die meisten anderen Entscheidungen dem API-Designer. GraphQL macht keinerlei Vorgaben, wie Daten gespeichert oder welche Programmiersprache benutzt werden soll. So können Entwickler PHP (graphql-php), Scala (Sangria), Python (Graphene Python), Ruby (graphql-ruby), JavaScript (graphql.js) oder viele andere Lösungen verwenden. Es stellt auch keine Anforderungen an Netzwerk, Autorisierung oder Paginierung.
Aus Kundensicht sind die gängigsten GraphQL-Operationen Abfragen und Mutationen. Wenn man dieses Konzept mit dem CRUD-Modell (Create, Read, Update und Delete) vergleichen möchte, käme es dem Vorgang Read am nächsten. Alle anderen Vorgänge (Create, Update und Delete) werden von Mutationen gehandhabt.
Red Hat Ressourcen
Vor- und Nachteile von GraphQL in Unternehmensumgebungen
Sie möchten GraphQL in einer Geschäfts- oder Unternehmensumgebung ausprobieren? Dies bringt sowohl Vor- als auch Nachteile mit sich.
Vorteile
- Mit einem GraphQL-Schema wird eine „Single Source of Truth" in einer GraphQL-Anwendung definiert. Dies bietet einer Organisation die Möglichkeit, ihre gesamten APIs zu föderieren, also unabhängig zusammenzuschließen.
- GraphQL-Aufrufe werden in einem einzigen Round Trip gehandhabt. Der Kunde bekommt genau die Daten, die er angefragt hat (kein Over-Fetching).
- Stark definierte Datentypen verringern das Risiko einer Fehlkommunikation zwischen Client und Server.
- GraphQL ist introspektiv. So kann ein Kunde eine Liste der verfügbaren Datentypen anfordern. Dies ist ideal für automatisch erstellte Dokumente.
- Eine Anwendungs-API kann sich mit GraphQL weiterentwickeln, ohne dass bestehende Abfragen beeinträchtigt werden.
- Es gibt sehr viele Erweiterungen für Open Source-GraphQL, die Funktionen enthalten, die bei REST-APIs nicht verfügbar sind.
- GraphQL schreibt keine spezifische Anwendungsarchitektur vor. Es kann auf einer vorhandenen REST-API installiert und mit aktuellen API-Management-Tools verwendet werden.
Nachteile
- Für Entwickler, die sich bereits mit REST-APIs auskennen, bedeutet GraphQL weiteren Lernaufwand.
- Mit GraphQL verschiebt sich die Funktionalität von Datenabfragen zur Serverseite, was zusätzliche Komplexität für Serverentwickler bedeutet.
- Je nach Implementierung erfordert GraphQL ggf. andere Strategien des API-Managements als REST-APIs, speziell im Hinblick auf Rate Limits und Preise.
- Auch das Caching ist bei GraphQL komplexer als bei REST.
- API-Maintainer müssen außerdem verwaltbare GraphQL-Schemata schreiben.
Beispiel für eine GraphQL-Abfrage
Die Vorteile von GraphQL lassen sich am besten anhand von Beispielabfragen und -antworten darstellen. Hier sind drei Beispiele von der Graphql.org Projekt-Website.
Das erste Beispiel zeigt, wie ein Kunde GraphQL-Abfragen erstellen und mit der API spezifische Felder in der gewünschten Form zurückgeben kann.
{ me { name } }
Eine GraphQL API gibt höchstwahrscheinlich ein Ergebnis wie das folgende im JSON-Format zurück:
{ "me": { "name": "Dorothy" } }
Ein Kunde kann, wie in diesem Beispiel zu sehen, im Rahmen einer GraphQL-Abfrage auch Argumente weitergeben:
{ human(id: "1000") { name location } }
Das Ergebnis:
{ "data": { "human": { "name": "Dorothy, "location": "Kansas" } } }
Danach wird es interessant. Mit GraphQL können User wiederverwendbare Fragmente definieren und Variablen zuweisen.
Angenommen, Sie möchten eine Liste mit IDs und dann eine Reihe von Datensätzen für jede dieser IDs abfragen. Mit GraphQL können Sie eine Abfrage erstellen, mit der Sie alle benötigten Informationen in einem einzigen API-Aufruf abhandeln können.
So könnte diese Abfrage:
query HeroComparison($first: Int = 3) { leftComparison: hero(location: KANSAS) { ...comparisonFields } rightComparison: hero(location: OZ) { ...comparisonFields } } fragment comparisonFields on Character { name friendsConnection(first: $first) { totalCount edges { node { name } } } }
folgendes Ergebnis zeigen:
{ "data": { "leftComparison": { "name": "Dorothy", "friendsConnection": { "totalCount": 4, "edges": [ { "node": { "name": "Aunt Em" } }, { "node": { "name": "Uncle Henry" } }, { "node": { "name": "Toto" } } ] } }, "rightComparison": { "name": "Wizard", "friendsConnection": { "totalCount": 3, "edges": [ { "node": { "name": "Scarecrow" } }, { "node": { "name": "Tin Man" } }, { "node": { "name": "Lion" } } ] } } } }
Wenn Sie GitHub verwenden, können Sie sich über den GitHub GraphQL Explorer praktische Erfahrungen mit GraphQL aneignen.
GraphQL und Open Source
GraphQL wurde von Facebook entwickelt und erstmals 2012 in Mobilanwendungen eingesetzt. Die GraphQL-Spezifikation wurde dann 2015 als Open Source-Lösung zur Verfügung gestellt. Mittlerweile wird sie von der GraphQL Foundation betreut.
Es gibt eine Vielfalt an Open Source-Projekten, die sich mit GraphQL beschäftigen. Die nachfolgende Liste ist nicht abschließend, enthält aber Projekte, die die Einführung von GraphQL erleichtern sollen.
- Apollo, eine GraphQL-Plattform mit Frontend-Client-Library (Apollo Client) und Backend-Server-Framework (Apollo Server).
- Offix, ein Offline-Client, mit dem GraphQL-Mutationen und -Abfragen auch dann ausgeführt werden können, wenn die Anwendung nicht erreichbar ist.
- Graphback, ein Befehlszeilen-Client zur Erstellung von GraphQL-aktivierten Node.js Servern
- OpenAPI-to-GraphQL, eine Befehlszeile und Library für die Übersetzung von APIs, die mit OpenAPI-Spezifikationen oder Swagger in GraphQL beschrieben werden.
Der offizielle Red Hat Blog
Lernen Sie mehr über unser Ökosystem von Kunden, Partnern und Communities und erfahren Sie das Neueste zu Themen wie Automatisierung, Hybrid Cloud, KI und mehr.