Was ist GraphQL?
Veröffentlicht am 27.09.2021 von DomainFactory
(Update September 2021) Seit 2015 bietet GraphQL eine Alternative zur Datenbanksprache SQL. Es ist also eine Datenabfrage- und Manipulationssprache, die Datenbankserver und entsprechende Abfragemöglichkeiten der Inhalte bereitstellt. Sie wurde entwickelt, da sie bei größeren Datenmengen wesentlich effizienter arbeitet als eine REST-Schnittstelle. Womit GraphQL sonst noch aufwartet und wer die Köpfe hinter dieser Geschichte sind, erfahren Sie hier.Das Wichtigste in Kürze:
- GraphQL wurde 2012 von Facebook entwickelt und anschließend im Jahr 2015 veröffentlicht.
- Es handelt sich hierbei um Abfragesprache, Laufzeitumgebung und Typsystem in einem.
- Bei großen Abfragemengen arbeitet GraphQL dabei wesentlich schneller als REST.
- Die effiziente Sprache arbeitet mit sehr simplen Befehlen. GraphQL-Server sind zudem für eine Vielzahl von Sprachen verfügbar.
- Zum Testen einer GraphQL API stehen verschiedene Tools zur Auswahl.
- Auch Live-Abfragen sind bei GraphQL möglich.
GraphQL: Entwicklung und Performance
Die anfängliche Facebook-App wurde schnell sehr komplex. Um die benötigten Daten abzufragen, fiel die Entscheidung auf die sehr beliebte REST-API. Sie bietet eine einfache Abfragesprache: Mit kurzen GET-Anforderungen wird die Datenbank angesprochen und als JSON-Element zurückgegeben. Die App verarbeitet die Daten und zeigt anschließend das Ergebnis an. Die Datenmengen sind allerdings schnell gewachsen, sodass das Verhältnis von Abfragemenge und gelieferten Daten nicht mehr übereinstimmt.
Diese neue GraphQL Foundation kümmert sich seitdem um die Weiterentwicklung der Sprache. |
Was macht GraphQL effizienter als REST?
Mit der Weiterentwicklung des Internets und der fortschreitenden Vernetzung von Geräten, Programmen und Servern steigt auch die Anzahl der Schnittstellen. Diese sind dafür zuständig, um Daten geordnet von einem System in ein anderes zu transferieren. Eine Schnittstelle liefert also Daten, die auf bestimmte Art und Weise abgefragt werden müssen.
Hier hat sich REST als Standard hervorgetan. Durch einfache Abfragen stellt die Schnittstelle dann die Daten aus der Datenbank bereit. Hauptsächlich geht es hier um eine Maschine-zu-Maschine-Kommunikation, also Abfragen, die beispielsweise eine App an den Server stellt.
Mit der REST-API wird immer genau eine Abfrage an den Server geschickt. Diese wird beantwortet und der empfangene Datensatz aufbereitet. Das ist oft nicht weiter problematisch. Allerdings ist diese Methode auch nur für relativ geringe Datenmengen gedacht. Gerade im Fall von Facebook, wo die App sehr viele Anfragen an die Datenbank schickt, brachte das die Server an den Rand ihrer Möglichkeiten. Die Relation von Abfrageanzahl und erhaltener Informationen passte nicht mehr, weshalb GraphQL entwickelt wurde.
Mehr Performance durch GraphQL
Datenmengen werden in GraphQL und REST unterschiedlich empfangen und verarbeitet. In der folgenden Übersicht werden die Performance-Vorteile von GraphQL gegenüber REST erkennbar:
GraphQL | REST |
- Abfragen mit GraphQL holen nur die benötigten Datensätze ein. - Die Aufarbeitung der Daten konzentriert sich auf ein Minimum, wodurch die Performance erhöht wird. - Der Empfänger entscheidet, welche Daten erhalten werden. | - Bei jeder Anfrage werden vom Server große Datenmengen bereitgestellt. - Pro Abfrage muss diese Datenmenge verarbeitet werden. - Der Server entscheidet, welche Daten gesendet werden. |
Sicherheit bei GraphQL
Da bei GraphQL der Empfänger und nicht der Server entscheidet, was er empfangen möchte, besteht eine größere Gefahr, zu viele Abfragen an den Server zu senden. Wenn Sie Daten über eine GraphQL-Schnittstelle zur Verfügung stellen möchten, könnte dies zu einem Problem werden.
Vor allem, wenn Sie offene APIs zur Verfügung stellen, ohne die Abfragen zu kontrollieren. In diesem Fall kann es passieren, dass eine zu große Anzahl an Abfragen den Server abstürzen lässt. Natürlich kann eine GraphQL-Schnittstelle auch performant und sicher gestaltet werden, allerdings gehört hier mehr Arbeit und Know-how dazu als bei REST-Schnittstellen.
Gut zu wissen: Arbeiten Sie mit Java, können Sie die durch den java-dataloader eine Bibliothek anlegen. Diese Bibliothek bündelt und optimiert Anfragen. Kommt eine Anfrage mehrfach vor, wird das bereits bekannte Ergebnis an den Empfänger gesendet, anstatt eine neue Datenbankabfrage zu starten.
Abfragen aus verschiedenen Programmiersprachen möglich
Da GraphQL schnell akzeptiert wurde, stehen für alle gängigen Programmiersprachen Bibliotheken zur Verfügung. So ist es möglich, in diesen Sprachen entsprechende Schnittstellen zu programmieren:
- C#
- Elixir
- Java/JavaScript
- Kotlin
- Python
Eine vollständige Liste der Bibliotheken finden Sie hier.
Hinweis: Für Unterstützung ist eine Entwicklungsumgebung wie GraphiQL ratsam. Das Online-Tool bietet Autovervollständigung und ein Web Frontend, mit dem Sie Abfragen entwickeln und testen können.
Ist GraphQL das bessere REST?
GraphQL vs. Rest – heute sind mobile Apps wichtiger denn je und werden immer komplexer. Daraus folgen höhere Anforderungen in Bezug auf die effiziente Bandbreitennutzung und Effizienz.
REST war aufgrund der einfachen und schnellen Bedienung lange der bevorzugte Standard und überzeugt weiter in Anwendungen mit übersichtlichen Abfragen. GraphQL begeistert ebenfalls mit der Einfachheit der Abfragesprache.
Ein großer Vorteil: Mit GraphQL sendet ein Client nur einen Request und empfängt alle benötigen Daten. Bei REST ist die Abfrage eines Datensatzes pro Query möglich, der komplett übertragen wird. Das ist in etwa so, als würde per SQL-Befehl der Inhalt von drei Feldern abgefragt und stattdessen der komplette Datensatz geliefert. Da mit GraphQL der Client die gewünschten Daten definiert, reduziert sich das Datenvolumen gegenüber Abfragen mit REST. Verknüpfte Ressourcen lassen sich gesammelt abfragen und Anfragen aus mehreren Quellen zusammenfassen.
Beim Vergleich zwischen GraphQL vs. REST punktet die von Facebook entwickelte Lösung mit höherer Präzision und Effizienz, dadurch verbessert sich die Gesamtleistung der Anwendungen.
Wie teste ich eine GraphQL API?
APIs (Application Programming Interfaces) werden von den unterschiedlichen Anwendungen im Internet für den Datenaustausch und die Datenverarbeitung genutzt. Sollen andere Nutzer auf die Daten der eigenen Website oder App zugreifen können, ist eine API notwendig. Die meisten funktionalen GrapQL-Tests stellen sicher, dass das Schema und die Anfragen im Frontend wie erwartet funktionieren. Es gibt einige Tools, um diese Art von Tests durchzuführen.
Bei JavaScript-Entwicklern ist zum Beispiel EasyGraphQL beliebt. Mit einer Bibliothek wie Moncha lassen sich die API-Antworten im Rahmen einer automatisierten Testumgebung verifizieren. Ein Codebeispiel:
it(‘funktioniert, wenn die Abfrage gültig ist’, () ⇒ { const validQuery = ` { getUserByTestResult(result: 4.9) { email } } tester.test(true, validQuery) })
Empfohlene Testarten:
- Abfrage-Tests stellen sicher, ob eine Abfrage mit ihren Parametern die korrekte Antwort liefert.
- Mutationstests prüfen, ob eine Abfrage die Daten richtig in der Datenbank abspeichert.
- Belastungstests überprüfen, ob eine API auch bei vielen Anfragen performant bleibt. Da jedoch nur ein Endpunkt untersucht wird, lassen sich Leistungsprobleme bei verschachtelten Anfragen schwer aufdecken.
Um die Geschwindigkeit eines Queries herauszufinden, eignet sich das Open-Source-Projekt OpticQL. Die Desktop-Anwendung bietet eine benutzerfreundliche Testumgebung für eine GraphQL API.
Darüber hinaus gibt es eine Reihe weiterer kostenloser sowie kostenpflichtiger Tools zum Testen wie Postman und APIFortress. Das folgende Video zeigt eine Einführung für GraphQL in Postman.
<iframe width="468" height="263" src="https://www.youtube.com/embed/7pUbezVADQs" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
APIFortress erleichtert ebenfalls die Erstellung und Automatisierung von Ende-zu-Ende-Tests, das Video gibt einen kurzen Überblick.
<iframe title="vimeo-player" src="https://player.vimeo.com/video/297720509" width="640" height="360" frameborder="0" allowfullscreen></iframe>
Effiziente und schnelle Entwicklung mit GraphQL
GraphQL ist klar und umfassend spezifiziert. Auch wenn Sie bisher keine Berührungspunkte mit der Datenbanksprache hatten, ist die Einarbeitung einfacher als bei REST. Das Schema an sich wird nur an einer Stelle erstellt und verwaltet, die Abfragen präzise definiert.
Natürlich müssen sich Entwickler immer noch selbst Gedanken darüber machen, welche Datensätze genau transportiert werden sollen. Mithilfe der GraphQL-Spezifikationen und Bibliotheken können Sie sich aber spielend leicht damit vertraut machen und schon bald performante und sichere Schnittstellen zur Verfügung stellen.