GraphQL: Hasura öffnet sich in Version 2 für neue Datenbanken und spricht REST

Die ursprünglich als GraphQL-Schnittstelle für PostgreSQL entwickelte Engine spricht nun REST und arbeitet mit SQL Server und BigQuery zusammen.

In Pocket speichern vorlesen Druckansicht

(Bild: SWstock / Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Hasura hat Version 2.0 der gleichnamigen GraphQL-Engine veröffentlicht. Nachdem der Vorgänger auf PostgreSQL ausgelegt war, zielt das Release auf eine allgemeine Datenbankanbindung ab. Zum Start existieren Schnittstellen für SQL-Server und BigQuery. Neue Schnittstellen sollen sich in kurzer Zeit entwickeln lassen. Außerdem kann die Engine nun mehrere Datenbanken simultan ansprechen.

Das erste Release der Engine war 2018 erschienen und hatte sich ausschließlich auf eine direkte Anbindung von PostgreSQL-Datenbanken konzentriert. Das Team wollte sich damit laut eigenen Aussagen zunächst auf das Ökosystem und die Community der quelloffenen Datenbank konzentrieren.

Seitdem habe es zwei grundlegende Wünsche der Nutzerbasis vor allem im Enterprise-Umfeld gegeben: Zum einen eine mandantenfähige Anbindung mehrere Instanzen und zum anderen die Integration unterschiedlicher Workloads, die beispielsweise die unterschiedlichen Anforderungen für die Verarbeitung von Zeitreihen gegenüber denen mit großem Transaktionsvolumen berücksichtigt.

Version 2.0 der GraphQL-Engine kann sowohl als einzelne Instanz als auch im Cluster mehrere Datenbanken simultan verwalten. Neue Datenbankquellen lassen sich dabei wohl im laufenden Betrieb hinzufügen.

Im Zuge der Entwicklung des aktuellen Release hat das Team die Query-Compilation-Pipeline in einer Form neu geschrieben, dass sie eine Generalisierung für beliebige Datenbanken bieten soll. Hintergrund ist die Nachfrage zur Verwaltung von Legacy-Daten, die häufig nicht in PostgreSQL-Datenbanken gespeichert sind.

Die neue Version der Engine kann REST-Anfragen neben GraphQL verarbeiten. Außerdem arbeitet sie mit SQL Server und BigQuery zusammen.

(Bild: Hasura)

Zum Start bietet die Hasura Engine 2.0 eine Anbindung an SQL Server und Googles Data Warehouse BigQuery. Dass keine generelle Schnittstelle existiert, begründet Hasura damit, nicht alle Datenbankengines auf einen gemeinsamen Nenner bringen zu wollen, sondern stattdessen die jeweiligen Stärken zu nutzen.

Daher setzt das Unternehmen auf die Open-Source-Entwicklung zusätzlicher Schnittstellen, die auf spezifische Datenbanken zugeschnitten sind. Interessierte sollen ihre Wünsche direkt über das GitHub-Repository äußern, dass auch eine Anleitung zur Mitentwicklung am Projekt bietet.

Auch wenn die Engine auf GraphQL ausgelegt ist, öffnet sie sich im aktuellen Release für REST. Das soll verhindern, dass Unternehmen zwei unterschiedliche Engines bereitstellen und verwalten müssen, um einerseits GraphQL-Abfragen entgegenzunehmen und andererseits eine separate REST-API für Clients ohne GraphQL-Funktionen bereitzustellen.

Entwicklerinnen und Entwickler können nun REST-Endpunkte auf der Basis von GraphQL-Vorlagen erstellen. RESTful-Anfragen wandelt die Hasura Engine in eine parametrisierte GraphQL-Abfrage um. Im GitHub-Repository findet sich die Spezifikation und Beispiele zum Aufsetzen von REST-Endpunkte mit Hasura.

GraphQL im Überflug

(Bild: GraphQL-Spezifikation auf GitHub)

Facebook hat GraphQL ursprünglich 2012 zur internen Verwendung entworfen und 2015 veröffentlicht. Seit 2018 findet die Weiterentwicklung der Sprache zur Abfrage und Manipulation von Daten unter dem Dach der GraphQL Foundation statt, die wiederum Teil der Linux Foundation ist.

GraphQL beschreibt die Definitionen von API-Schnittstellen im Web und in der Cloud. Die Spezifikation gibt vor, wie Clients Abfragen beschreiben und ausführen und wie Server darauf die Requests verarbeiten und beantworten. Dass im Gegensatz zu REST der Client das Heft in der Hand hält, welche Daten er vom Server abfragt, fallen beim Transfer typischerweise weniger Daten an als bei entsprechenden REST-Anfragen. Der Aufbau der Queries ähnelt JSON-Dokumenten.

Requests lassen sich über GET und POST übergeben. Letztere Methode sollte als Inhaltstyp auf application/json setzen und einen Body im JSON-Format enthalten. Jeder GraphQL-Dienst muss einen query-Typ für Abfragen bieten. Daneben kann er einen mutation-Typ bieten, der das Schreiben erlaubt. Schließlich können Clients über subscription den Server auffordern, sie zu informieren, wenn Änderungen an Daten auftreten.

Weitere Neuerungen zur GraphQL-Engine 2.0 wie die neu eingeführten Remote Joins lassen sich dem Hasura-Blog entnehmen.

(rme)