/
/

GraphQL erklärt: So funktioniert es mit APIs

von Team Ninja
What GraphQL Is and How It Works With APIs blog banner image

Kurzüberblick

Dieser NinjaOne-Blogbeitrag bietet eine umfassende Liste grundlegender CMD-Befehle und einen tiefen Einblick in die Windows-Befehle mit über 70 wichtigen CMD-Befehlen für Anfänger:innen und Fortgeschrittene. Der Blogartikel erklärt praktische Befehle der Eingabeaufforderung für die Dateiverwaltung, die Navigation in Verzeichnissen, die Fehlersuche im Netzwerk, Festplattenoperationen und die Automatisierung mit echten Beispielen zur Steigerung der Produktivität. Egal, ob Sie grundlegende CMD-Befehle lernen oder fortgeschrittene Windows CLI-Tools beherrschen möchten, dieser Leitfaden hilft Ihnen, die Eingabeaufforderung effektiver zu verwenden.

Schlüsselpunkte

  • GraphQL ist eine Open-Source-Abfragesprache für APIs. Clients können darüber über einen einzigen Endpunkt genau die Daten anfordern, die sie benötigen.
  • Eine GraphQL-API basiert auf Komponenten wie Schemas, Resolvern, Queries und Mutations. Sie legen fest, auf welche Daten zugegriffen werden kann, wie diese abgerufen werden und wie sie sich ändern lassen.
  • GraphQL bündelt mehrere Datenquellen in einem Endpunkt, der auf strukturierte, vom Client definierte Abfragen antwortet.
  • GraphQL eignet sich besonders für komplexe, flexible Datenumgebungen wie mobile Anwendungen, interne Dashboards und Kundenportale.
  • Mit GraphQL kommen verschiedene Sicherheitsaspekte ins Spiel, etwa die Durchsetzung der Authentifizierung, die Begrenzung der Abfragetiefe, die Steuerung der Introspection und die Schema-Governance.
  • Für Unternehmen mit einfachen, vorhersehbaren Ressourcenmustern oder begrenzten Kapazitäten in der IT-Governance kann REST die Anforderungen mit weniger operativem Aufwand erfüllen.

GraphQL ist eine Abfragesprache, mit der sich APIs aufbauen lassen, über die Anwendungen Daten aus Backend-Systemen anfordern können. Statt eine feste Antwort von einem vordefinierten Endpunkt zurückzugeben, lässt GraphQL den Client beschreiben, welche Daten er benötigt.

Diese Flexibilität kann unnötige Datenübertragungen verringern und API-Interaktionen vereinfachen. Eine perfekte Lösung ist GraphQL deshalb aber nicht, denn es bringt auch betriebliche Anforderungen mit sich. IT-Teams, Entwickler:innen und Automatisierungsteams sollten verstehen, wie GraphQL-Queries, -Schemas, -Mutations und -Resolver funktionieren, bevor sie GraphQL-APIs einführen oder betreuen.

Was ist GraphQL?

GraphQL ist eine quelloffene Abfragesprache und Laufzeitspezifikation für APIs. Clients können damit bestimmte Felder anfordern, die in einem Schema definiert sind. Eine GraphQL-API stellt in der Regel einen einzigen Endpunkt bereit, an den Clients strukturierte Abfragen senden. Die API holt die angeforderten Daten dann aus den darunterliegenden Systemen.

Typisch ist der Einsatz, wenn Anwendungen flexibel auf Daten zugreifen müssen oder Clients unterschiedliche Antwortstrukturen benötigen. Zu den Einsatzbereichen von GraphQL zählen unter anderem:

  • Webanwendungen
  • Mobile Anwendungen
  • Interne Dashboards
  • Kundenportale
  • API-Aggregationsschichten
  • Alle Systeme, die Daten aus mehreren Backend-Diensten zusammenführen

So funktioniert eine GraphQL-API

Eine GraphQL-API fungiert als Schnittstelle zwischen Clients und Backend-Systemen. Sie stellt in der Regel einen einzigen Endpunkt bereit, an den Clients ihre Abfragen senden. Die API ruft daraufhin Daten aus einer oder mehreren zugrunde liegenden Datenquellen ab, führt sie zusammen und liefert eine Antwort zurück.

Damit eine GraphQL-API funktioniert, braucht sie mehrere Kernkomponenten.

  • Schema: Das Schema ist die Definition einer GraphQL-API. Es legt die verfügbaren Datentypen, Felder, Beziehungen sowie die Operationen (Queries und Mutations) fest, die Clients ausführen dürfen.
  • Typsystem: Es definiert die Datentypen und Strukturen, die das GraphQL-Schema verwendet, und bestimmt damit, wie Daten innerhalb der API dargestellt und miteinander verknüpft werden.
  • Query: Das ist die strukturierte Anfrage, die ein Client an eine GraphQL-API schickt, um Daten abzurufen. Die Query bildet dabei meist die Struktur der Antwort ab, die der Client erwartet.
  • Resolver: Resolver sind die Datenlieferanten. Sie verbinden die im Schema definierten Daten mit den Daten in den Datenquellen, damit die API den korrekten Wert zurückgeben kann, den der Client angefordert hat.
  • Mutation: Damit lassen sich Daten in den Datenquellen über die GraphQL-API verändern, also anlegen, aktualisieren oder löschen.
  • Endpunkt: Das ist der API-Zugangspunkt, an dem Clients ihre GraphQL-Abfragen einreichen. Die GraphQL-API verarbeitet diese Abfragen und gibt das Ergebnis an den Client zurück.

Beim Einsatz einer GraphQL-API definieren Schema und Typsystem die verfügbaren Datenstrukturen und Operationen. Ein Client sendet eine Abfrage an den GraphQL-Endpunkt, und die Resolver rufen die angeforderten Daten ab oder erzeugen sie. Muss ein Client eine Operation ausführen, die den Anwendungszustand verändert, nutzt er eine Mutation, die von der GraphQL-API ausgeführt wird.

Die Aufgabe einer GraphQL-Query

Eine GraphQL-Query ist eine Nachricht des Clients, die der API genau mitteilt, was sie tun soll. Ein Beispiel: Eine mobile Anwendung benötigt den Benutzernamen, die E-Mail-Adresse und die zugewiesenen Geräte. Um diese Informationen zu erhalten, sendet sie eine Query, die all das in einer einzigen Nachricht anfordert. Werden nur Benutzername und E-Mail-Adresse gebraucht, enthält die Query auch nur diese Felder.

GraphQL-Queries können Over-Fetching verringern, weil Clients gezielt einzelne Felder anfordern. Ebenso lässt sich Under-Fetching reduzieren, da zusammengehörige Daten in einer einzigen Abfrage abgerufen werden können. Außerdem entfällt das clientseitige Filtern, das sonst durch zu weit gefasste API-Antworten nötig wird.

GraphQL im Vergleich

GraphQL vs. REST

Eine REST-API (Representational State Transfer) organisiert Ressourcen über mehrere Endpunkte hinweg, wobei jeder Endpunkt in der Regel eine vordefinierte Ressourcenstruktur bereitstellt. GraphQL stellt dagegen meist eine Abfrageschnittstelle bereit, über die Clients bestimmte Felder aus einer oder mehreren zugrunde liegenden Datenquellen anfordern können.

REST ist tendenziell stärker servergesteuert, GraphQL eher clientgesteuert. REST passt gut zu einfacheren und besser vorhersehbaren Zugriffsmustern, während GraphQL vor allem dann Vorteile bringt, wenn Clients flexibel auf zusammenhängende Daten zugreifen oder unterschiedliche Antwortstrukturen benötigen.

GraphQL vs. SQL

GraphQL und SQL werden gelegentlich verwechselt, weil es bei beiden um Abfragen geht. Tatsächlich sind es aber völlig unterschiedliche Dinge. SQL ist eine Abfragesprache für relationale Datenbanken und dient dazu, die Daten in einer Datenbank abzurufen, zu verändern und zu verwalten. GraphQL dagegen ist eine Abfragesprache für APIs. Es legt fest, wie Clients Daten von einer API-Schicht anfordern können, die mit einer SQL-Datenbank verbunden sein kann, es aber nicht zwingend ist.

GraphQL vs. Microsoft Graph API

Trotz der ähnlichen Namen haben GraphQL und die Microsoft Graph API nichts miteinander zu tun. GraphQL ist eine allgemeine Abfragesprache für APIs, während die Microsoft Graph API die einheitliche API von Microsoft ist, über die Benutzer:innen auf Daten aus Microsoft 365 und weiteren zugehörigen Cloud-Diensten zugreifen können.

Die Vorteile von GraphQL

GraphQL bringt zahlreiche Vorteile mit sich, darunter:

  • Flexibler Datenabruf: Clients fordern nur die Daten an, die sie gerade benötigen.
  • Weniger API-Roundtrips: Zusammengehörige Daten lassen sich häufig mit einer einzigen Abfrage abrufen, was die Zahl der nötigen API-Anfragen senken kann.
  • Klare Schema-Struktur: Das Schema der API definiert eindeutig, welche Daten verfügbar sind.
  • Mehr Freiheit im Frontend: Verschiedene Clients können je nach Bedarf unterschiedlich strukturierte Daten anfordern.
  • Weiterentwicklung der API: Felder lassen sich ergänzen, ohne bei jeder Änderung einen neuen Endpunkt anlegen zu müssen.
  • Unterstützung für Aggregation: Eine GraphQL-API kann eine einheitliche Schnittstelle für den Zugriff auf Daten aus mehreren Backend-Systemen bieten.

Grenzen und betriebliche Aspekte von GraphQL

GraphQL ist keine perfekte Lösung. Diese Grenzen und Punkte sollten Sie vor dem Einsatz berücksichtigen:

  • Aus Sicherheitsgründen müssen Sie sicherstellen, dass Benutzer:innen und Systeme ordnungsgemäß verifiziert werden, bevor sie auf die API zugreifen.
  • Bei flexiblen Abfragen brauchen Sie Schutzmechanismen, die verhindern, dass Benutzer:innen an Informationen gelangen, die nicht für sie bestimmt sind.
  • Sie benötigen eine Möglichkeit, exzessives oder missbräuchliches Abfrageverhalten zu unterbinden, um die Daten Ihres Unternehmens zu schützen.
  • GraphQL erfordert unter Umständen spezielle Caching-Strategien, die Sie sich vor der Implementierung aneignen müssen.
  • Administrator:innen sollten Abfrage-Performance, Fehler, Latenz und Nutzungsmuster im Blick behalten.
  • Bevor Sie Änderungen am API-Schema vornehmen, müssen Sie prüfen, dass diese Ihre Clients nicht beeinträchtigen und keine unnötigen Daten offenlegen.
  • Sie brauchen Transparenz darüber, welche Abfragen ausgeführt werden und wie sie performen.

Diese Szenarien sprechen für GraphQL

GraphQL passt gut, wenn Ihre Clients unterschiedlich strukturierte Daten aus derselben API benötigen oder wenn Ihre Anwendungen häufig zusammengehörige Daten aus mehreren Quellen brauchen. Das gilt ebenso, wenn Ihre Backend-Daten aus mehreren Quellen stammen oder Sie die Payload-Größe reduzieren müssen. Letztlich verschafft GraphQL Clients Flexibilität, weil sie unterschiedliche Felder und Antwortstrukturen anfordern können, ohne dass für jeden Anwendungsfall die API geändert werden muss.

Eine perfekte Lösung ist es aber nicht. Wenn Sie mit vorhersehbaren Ressourcenmustern arbeiten, kann REST Ihre Anforderungen ebenso gut erfüllen. Bei kleineren Betrieben fehlt dem IT-Team womöglich die Kapazität, Schema-Governance und Abfragekontrollen dauerhaft zu betreuen. GraphQL ist für komplexe und flexible Abfragen gedacht. Brauchen Sie das nicht, fügt es Ihrem Betrieb womöglich nur eine unnötige Komplexitätsebene hinzu.

Datenabfragen mit GraphQL vereinfachen

GraphQL ist eine Abfragesprache für APIs. Sie verschafft Clients Flexibilität, weil sie unterschiedliche Felder und Antwortstrukturen anfordern können, ohne dass für jeden Anwendungsfall die API geändert werden muss.

Verwandte Artikel:

FAQs

Weder noch. GraphQL ist eine Abfragesprache und Laufzeitspezifikation für APIs. Es liegt zwischen Client und Datenschicht und definiert, wie Daten angefordert und zurückgegeben werden. Daten speichert GraphQL selbst jedoch nicht.

GraphQL ist sprachunabhängig. Für die meisten gängigen Programmiersprachen stehen ausgereifte Bibliotheken zur Verfügung.

Die GraphQL-Introspection ist eine Funktion, mit der Clients das Schema der API direkt abfragen können. Für Entwicklung und Tooling ist das nützlich, allerdings kann sie Details zur API-Struktur offenlegen. In Produktivumgebungen beschränken Unternehmen die Introspection daher häufig auf authentifizierte und autorisierte Benutzer:innen oder deaktivieren sie, wenn es sinnvoll ist.

Das N+1-Problem tritt auf, wenn ein GraphQL-Resolver einen übergeordneten Datensatz abruft und anschließend für jeden zugehörigen untergeordneten Datensatz eine separate Datenbankabfrage startet. Das ergibt eine Abfrage für den übergeordneten Datensatz und N zusätzliche Abfragen für N untergeordnete Datensätze, was die Performance bei größeren Datenmengen deutlich verschlechtert.

Schema Stitching und Schema Federation sind zwei Ansätze, um mehrere GraphQL-Schemas aus verschiedenen Diensten zu einer einzigen, einheitlichen API zusammenzuführen. Beim Schema Stitching werden die Schemas auf Gateway-Ebene zusammengeführt, während Apollo Federation es einzelnen Diensten ermöglicht, eigene Subgraphen zu besitzen und zu veröffentlichen, die ein Gateway anschließend zu einem Supergraph zusammensetzt.

Das könnte Sie auch interessieren

Sind Sie bereit, die schwierigsten Aufgaben der IT zu vereinfachen?

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche „Ich akzeptiere“ klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird „wie gesehen“ und „wie verfügbar“ bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).