Was ist GraphQL?

URL kopieren

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.

Sieben Voraussetzungen für effektives API-Management

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.

Bild

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

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 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.
Hub

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.

Red Hat Testversionen

Unsere kostenlosen Testversionen unterstützen Sie dabei, praktische Erfahrungen zu sammeln, sich auf eine Zertifizierung vorzubereiten oder zu bewerten, ob ein Produkt die richtige Wahl für Ihr Unternehmen ist.

Weiterlesen

Was ist Anwendungsintegration?

Die Anwendungsintegration verbindet verschiedene Systeme und Anwendungen, indem sie die Zusammenarbeit durch den Austausch von Daten und die Nutzung von Diensten ermöglicht.

SOAP und REST: Was sind die Unterschiede?

REST und SOAP definieren das API-Design für den Datenaustausch zwischen Webanwendungen. Definition, Unterschiede und Verwendung von SOAP und REST erklärt.

Was ist ein API-Gateway? Definition, Funktion und Vorteile

Ein API-Gateway ist ein API-Management-Tool, das zwischen dem Client und Backend-Services sitzt. Es nimmt API-Aufträge an und gibt das entsprechende Ergebnis aus.

Ressourcen zu Integration