Auf der AgentConf in Dornbirn besuchte ein Teil unseres Teams den Workshop „Building real-time React apps with serverless GraphQL backend using Hasura„. Vladimir Novick hat uns Tipps & Tricks rund um die Anbindung und Entwicklung von APIs mit GraphQL gegeben. Während der TOWA-InnovationDays wir uns der Herausforderung gestellt und GraphQL im TOWA-TechStack erprobt. Die Frage hinter dem Experiment: Vereinfacht GraphQL die Arbeit mit großen Datenmengen?
Was ist GraphQL?

GraphQL ist eine Query Language zur Abfrage und Manipulation von Daten, entwickelt und als Open-Source von Facebook 2015 veröffentlicht. Es ist nicht an eine spezifische Store Engine gebunden, sondern eine Spezifikation, die als Layer zwischengeschaltet wird und so unterschiedliche Server miteinander verbindet.

 

GraphQL bietet folgende Features:

  • GraphQL stellt ein API-Schema mit einem eigenen Type-System zur Verfügung. Dabei können Felder, Typen und Endpunkte definiert werden. Somit werden die Daten direkt in der API abgebildet.

  • GraphQL holt mehrere Datensätze in eine Datenabfrage und ermöglicht so präzise Abfragen und vorhersehbare Ergebnisse.

GraphQL vereinfacht die Entwicklung durch eine verbesserte Skalierbarkeit und Lesbarkeit im Code. Zusätzlich veranschaulichen Tools wie GraphiQL Daten und das GraphQL-Schema.

 

GraphQL steht für Performance, Flexibilität und Entwicklerfreundlichkeit.

REST vs. GraphQL

Generell leisten Rest und GraphQL das Gleiche, nur ein bisschen anders:

  • Beide senden HTTP-Abfragen, um ein Ergebnis zu bekommen.

  • Beide können unterscheiden, ob ein API-Request Daten liest oder schreibt.

  • Beide führen Funktionen auf dem Server aus.

  • Beide werden mit Frameworks und Libraries angewendet.

Die Entscheidung der Datenübertragung handhaben REST und GraphQL unterschiedlich: bei REST entscheidet der Server, welche Daten ausgeliefert werden sollen. Bei GraphQL bestimmt der Client, welche Daten erhalten werden sollen.

REST-APIs werden nach URLs identifiziert. D.h. um Daten aus zusammenhängenden Datensätzen zu holen, werden mehrere API-Endpunkte linear ausgeführt. Das kann bei großen Datenmengen zu Performance-Einbußen und erhöhter Komplexität führen. Mit GraphQL können Daten aus unterschiedlichen Datensätzen in einer einzigen Abfrage zusammengeführt werden. GraphQL ist somit ressourcenschonend durch schnellere Antwortzeiten, selbst bei schlechteren Netzverbindungen.

GraphQL-Trend

Facebook nutzt GraphQL seit 2012. Gefolgt von weiteren Firmen wie Github, Atlassian, Audi, Pinterest, Instagram, Twitter, Coursera, airbnb, yelp, Microsoft, Starbucks, The New York Times und Paypal. Die wachsende Verbreitung zeigt sich auch in der nachfolgenden Grafik von Google Trends:

GraphQL Data Visualization

Ausgangssituation an den Innovation Days war innerhalb von zwei Tagen eine große Menge an Geodaten auf einer Weltkugel zu visualisieren. Importiert wurden 1700 Berge von 250 Ländern. Verwendete Techs:

Unsere Learnings

GraphQL bietet eine gute Lesbarkeit. Das Schema ist verständlich und zieht sich bis zur Ausgabe der Daten durch. Dadurch erhöhte sich die Erwartbarkeit, während sich der Entwicklungsaufwand reduzierte.

Den geringeren Entwicklungsaufwand nahmen wir deutlich wahr. Wir haben weniger Code geschrieben und weniger API-Calls für die Anwendung von Filtern und Favoriten gebraucht. Es gab beispielsweise nicht mehrere unterschiedliche Endpoints für Berge und favorisierte Berge, sondern nur einen. Das zeigt, dass sich die Komplexität im Code verringert hat.

Änderungen bei der Abfrage und Manipulation von Daten konnten in der Nuxt-App durchgeführt werden. Auf Change Requests, die in diesem Fall von uns kamen, konnte schnell reagiert werden. Eine Integration derselben API in weitere Projekte ist gut denkbar.

Was wir nicht ausprobiert haben, waren unterschiedliche Datenquellen über eine GraphQL-API anzubinden. Unsere Datenbank umfasste 7 Tabellen.

Fazit

Im letzten Monat hat sich gezeigt, dass GraphQL die Arbeit mit Data Driven-Applikationen und mit großen Datenmengen vereinfachen kann. Interessant bleibt für uns die Anbindung unterschiedlicher Datenquellen über eine GraphQL-API und die Verwendung in Microservice-Architekturen, bei denen die API über verschiedene Endgeräte hinweg die gleichen Inhalte passend für den jeweiligen User darstellt.

Unser Fazit: Wir bleiben an GraphQL dran.

Quellen & Infos zu GraphQL

  1. GraphQL. Abgerufen am 24.2.2020 unter: https://graphql.org/

  2. GraphQL Users. Abgerufen am 24.2.2020 unter: https://graphql.org/users/

  3. Explore GraphQL. Abgerufen am 24.2.2020 unter: https://www.graphql.com/

  4. Stubailo, S. (2017). GraphQL vs. REST. Two ways to send data over HTTP: What’s the difference? Abgerufen am 24.2.2020 unter: https://blog.apollographql.com/graphql-vs-rest-5d425123e34b

  5. Google Trend: GraphQL. Abgerufen am 21.2.2020 unter: https://trends.google.de/trends/explore?date=today%205-y&q=%2Fg%2F11cn3w0w9t