Softwerkskammer Lübeck bei checkdomain 2018 – „Ist GraphQL das bessere REST?“

Austausch unter Entwicklern liegt uns sehr am Herzen. Und so war es uns eine große Freude die Softwerkskammer Lübeck wieder zu uns einzuladen. Am 03. Mai fanden 30 SoftwerkerInnen zum Thema „Ist GraphQL das bessere REST?“ in unseren Räumlichkeiten in der Lübecker Innenstadt zusammen. Neben dem Vortrag sorgten wir selbstverständlich auch fürs leibliche Wohl. Für die interne Statistik: 80 halben Brötchen, 15 Astra, 19 Fritz-Limo und 6 Club Mate. Aber nun zum Vortrag.

Ist GraphQL das bessere REST?

Im Kontext von APIs kommt derzeit keiner an REST (Representational State Transfer) vorbei. REST ist ein Architekturstil, der erstmals von Roy Fieldings im Jahr 2000 in seiner Dissertation zur Architektur des Webs beschrieben wurde. REST galt 2000 als leichtgewichtige, skalierbare und schnell erlernbare Alternative zu SOAP, die sich die vorhandene Infrastruktur des WWW zunutze macht.

REST hat seine Schwächen

Bei der Entwicklung der ersten REST-API macht man sich häufig weniger Gedanken um die eigentliche Problemdomäne als um REST selber. Denn als Nicht-Standard lässt REST viele Fragen offen. Viele dieser Fragen versuchen auf REST/JSON aufbauende Standards und Datenformate inzwischen zu lösen. Zum Einen hat man nun die Qual der Wahl, zum Anderen ist keiner der Standards ausgereift und komplett.

Auch darf man nicht vergessen, dass seit der ersten Erwähnung von REST 18 Jahre vergangen sind. Durch die immer bedeutendere mobile Internetnutzung, die 2016 erstmals die Desktop-Nutzung überstieg, und das Internet der Dinge werden effiziente Bandbreitennutzung und Energieeffizienz wieder bedeutender. Effiziente Bandbreitennutzung ist allerdings keine Stärke von REST, welches entweder zu viele Daten ausliefert, die der Client nicht benötigt (Overfetching) oder zu wenige (Underfetching), so dass weitere Anfragen notwendig werden (n+1 Problem). Auch ist REST nicht den schnellen Anforderungsänderungen von Client-Anwendungen gewachsen.

GraphQL for the win?

Speziell für Mobile Anwendungen entwickelte Facebook 2012 GraphQL, welches zunächst nur intern verwendet und im Jahr 2015 veröffentlicht wurde. GraphQL stellt die Bedürfnisse der Entwickler und Produkt-Designer mobiler Anwendungen in den Mittelpunkt. Über GraphQL könnten Daten gelesen (Queries) als auch geschrieben werden (Mutations). Anders als bei REST, wo die API den Umfang der Antwort auf eine Anfrage vorgibt, definiert der anfragende Client bei GraphQL in der Anfrage, welche Daten er benötigt und erhält vom Server auch nur diese ausgeliefert. Eigenschaften verknüpfter Ressourcen kann der Client zusammen mit der Hauptressource kombiniert abfragen. Auch können mehrere unabhängige Abfragen in einem Request kombiniert werden.

Durch diese Charakteristika kann GraphQL gegenüber REST das Übertragungsvolumen und die Anzahl an Request deutlich senken. Auch ist der Client-Entwickler nun flexibler, da er den Umfang der API-Antwort nun selbstständig an geänderte Anforderungen anpassen kann. Serverseitig bietet GraphQL auch Optimierungspotential. Da dem Server alle vom Client benötigten Daten zu Beginn eines Anfrage bekannt sind, können durch intelligente Query-Planung, parallele Ausführung und Kombination von Anfragen (Query Planning/Optimization) sowohl die Antwortzeit als auch Aufwand reduziert werden.

Natürlich hat auch GraphQL seine Schwächen. Lesen und Schreiben sind unabhängig voneinander realisiert und haben keine Bezug zueinander, da es keine gemeinsame Ressource wie in REST gibt. Die freie Namensgebung bei Mutations führt verglichen mit den starren REST-Verben, die API-übergreifend eine ähnliche Bedeutung haben, zu schlechterer Predictability. Auch kann sich schlechter vorhandene HTTP-Infrastruktur zunutze machen (z.B. Caching über Varnish/Squid). Da der Client den Umfang von Umfragen definieren kann, müssen Maßnahmen zum Schutz vor komplexen Anfragen getroffen werden, die schnell die Server-Infrastruktur lahm legen könnten. Zudem müssen Abrechnungs- und Rate-Limitung Systeme neu gedacht werden (z.B. Request Budgeting nach Sekunden).

Fazit

GraphQL ist eine ernstzunehmende Alternative zur klassischen REST-API, die ihre Stärken vor allem bei mobilen Anwendungen und sich schnell ändernden Client-Anforderungen hat. Zum Sammeln erster Erfahrungen mit der Anfragesprache bietet sich der API-Explorer von Github an. Wer tiefer einsteigen möchte, findet mit der Javascript Referenz-Implementierung in Verbindung mit der In-Browser IDE GraphiQL einen guten Einstiegspunkt.

Hier die Slides zum Vortrag: Ist GraphQL das bessere REST?

Auf bald!

Martin

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)
Softwerkskammer Lübeck bei checkdomain 2018 - "Ist GraphQL das bessere REST?", 5.0 out of 5 based on 2 ratings

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.