Anmelden / Registrieren Konto

API

Was ist GraphQL?

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 soll APIs schneller, flexibler und entwicklerfreundlicher machen. 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 Anfragen 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 Anfragen mit dem Schema abund führt die validierten Anfragen 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-Anfragen (wie um graphql-spec Repository dargelegt) überlässt GraphQL die meisten anderen Entscheidungen dem API-Designer. Dazu enthält es auch keinerlei Angaben dazu, wie Daten gespeichert werden oder welche Programmiersprache zu benutzen ist. 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.

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 Anfragen beeinträchtigt werden.
  • Es gibt sehr viele Erweiterungen für Open Source-GraphQL, die Features 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-Bibliothek (Apollo Client) und Backend Server Framework (Appolo 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 Befehlszeilenschnittstelle und Bibliothek für die Übersetzung von APIs, die mit OpenAPI Spezifikationen oder Swagger in GraphQL beschrieben werden

API-Produkte von Red Hat entdecken

Red Hat 3scale API Management

Eine API-Management-Plattform

Red Hat Fuse logo

Eine verteilte Integrationsplattform.