Wie man aufhört, CRUD zu schreiben, und anfängt, mit Hasura zu leben
Kommt Ihnen das bekannt vor? Sie starten ein neues Projekt, und die ersten zwei Wochen vergehen mit monotoner Routine. Sie müssen Schemas in der Datenbank beschreiben, Modelle im Code erstellen, Endpunkte zum Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen schreiben. Dann kommen noch Paginierung, Filterung, Sortierung und natürlich die Zugriffsberechtigungen dazu. Bis Sie dann endlich zur eigentlichen Geschäftslogik kommen, ist Ihre Begeisterung schon etwas verblasst.
Ich habe mich oft dabei ertappt, dass 80% des Backends in einer typischen Webanwendung nur Daten von der Datenbank nach JSON und zurück proxyen. Genau dieses Problem löst Hasura.
Was genau ist es
Hasura ist kurz gesagt eine fertige Engine, die sich mit Ihren Datenbanken verbindet und sofort eine produktionsreife GraphQL-API bereitstellt. Sie müssen keinen Servercode in Node.js, Go oder Python schreiben. Sie beschreiben einfach Tabellen in Postgres, MS SQL Server oder sogar MongoDB, und Hasura generiert selbst das Schema mit allen Beziehungen.

Das GitHub-Projekt hat bereits über 32 Tausend Sterne gesammelt, und es ist nicht nur „ein weiterer Wrapper". Es ist eine vollwertige Engine, die GraphQL-Queries in effizientes SQL transformiert.
Wie Hasura in der Praxis wirklich hilft
Als ich Hasura zum ersten Mal ausprobierte, hat mich vor allem überzeugt, dass es nicht versucht, den Entwickler in einen „goldenen Käfig" einzusperren. Hier sind einige Dinge, die es nützlich machen.
Sofortige API mit allem Drum und Dran
Sobald Sie eine Datenbank verbinden, erhalten Sie sofort die Möglichkeit, komplexe Abfragen durchzuführen. Sie möchten einen Benutzer, seine letzten fünf Bestellungen und nur die Artikel aus diesen Bestellungen abrufen, die mehr als 1.000 Rubel kosten? Mit normalem REST müssten Sie entweder drei Anfragen stellen oder einen benutzerdefinierten Endpunkt mit einer Reihe von Joins schreiben. Bei Hasura ist es eine GraphQL-Query, die als einzelne effiziente SQL-Abfrage gegen die Datenbank ausgeführt wird.
Zeilenbasierte Sicherheit
Dies ist wahrscheinlich die stärkste Funktion der Engine. Hasura verfügt über ein integriertes Zugriffskontrollsystem (RBAC). Sie können sagen: „Ein Benutzer mit der Rolle editor kann nur Artikel sehen, bei denen er als Autor aufgeführt ist". Dies wird direkt in der Konsole oder über YAML-Konfigurationen eingestellt. Sie müssen if (user.id === article.author_id) nicht in jeder Controller-Methode überprüfen.
Integrierte Reaktivität
Wenn Sie Echtzeit-Updates benötigen (zum Beispiel für einen Chat oder ein Benachrichtigungsfeed), unterstützt Hasura GraphQL Subscriptions. Es überwacht automatisch Änderungen in der Datenbank und pusht Daten über WebSockets an den Client. Dies manuell von Grund auf einzurichten ist ziemlich aufwändig, besonders wenn Sie Zugriffsberechtigungen berücksichtigen müssen.
Ereignisgesteuerte Architektur
Hasura kann Webhooks auslösen, wenn sich die Datenbank ändert. Ein neuer Benutzer hinzugefügt? Hasura sendet eine POST-Anfrage an Ihren Microservice, der eine Willkommens-E-Mail sendet. Dies ermöglicht es Ihnen, schwere Logik auf externe Funktionen (Serverless oder reguläre Microservices) auszulagern und die API sauber zu halten.
Was ist neu in Version drei
Hasura V3 wird nun aktiv entwickelt. Das Team hat die Architektur überdacht und sich auf Konnektoren konzentriert. Die Engine ist jetzt in Rust geschrieben (zuvor Haskell), was sich positiv auf den Speicherverbrauch und die Geschwindigkeit auswirken sollte.
V3 führte das Konzept des „Supergraph" ein – dabei können Sie Daten aus verschiedenen Quellen (Postgres, Mongo, ClickHouse) in einer einzigen logischen API zusammenführen. Gleichzeitig können Sie benutzerdefinierte Logik in TypeScript, Python oder Go mit ihrem SDK schreiben.
Technische Nuancen und ein Wermutstropfen
Denken Sie nicht, dass dies eine „Silberkugel" ist. Hasura ist eine zusätzliche Schicht in Ihrer Infrastruktur.
- Schwierigkeit beim Debugging: Wenn etwas in einer generierten SQL-Abfrage schiefgeht, kann es schwierig sein zu verstehen, warum Hasura sich entschieden hat, sie so zu bauen. Obwohl die Konsole ein Analyze-Tool hat, das den Ausführungsplan der Query anzeigt.
- Abhängigkeit von der DB-Struktur: Hasura ist sehr eng mit dem Design Ihrer Datenbank gekoppelt. Wenn Sie ein Chaos von Tabellen ohne Fremdschlüssel haben, wird es keine Magie geben. Sie müssen zuerst das Datenschema aufräumen.
- Lernkurve: Trotz des sehr schnellen Einstiegs erfordert die tiefe Konfiguration von Zugriffsberechtigungen und das Arbeiten mit Remote Schemas Zeit zum Lernen aus der Dokumentation.
Wer profitiert davon
Hasura ist perfekt für Projekte geeignet, bei denen das Frontend-Team schnell vorankommen möchte und nicht auf das Backend warten will, um einen weiteren Endpunkt zu schreiben. Es eignet sich hervorragend für MVPs, interne Admin-Panels und Dashboards, bei denen viel Datenarbeit und Filterung anfällt.
Wenn Sie ein System mit sehr spezifischer Geschäftslogik erstellen, das schwer in das CRUD-Paradigma passt, kann Hasura trotzdem als „Datenschicht" nützlich sein, auf der Sie Ihre Services aufbauen.
Der einfachste Weg, es auszuprobieren, ist über Docker – im Repository gibt es fertige docker-compose-Dateien. Buchstäblich innerhalb von fünf Minuten haben Sie eine funktionierende Konsole mit einer GraphQL-Sandbox. Wenn Sie es leid sind, sich wiederholende Controller zu schreiben, ist dies definitiv ein Tool, das sich auszuprobieren lohnt.
Ähnliche Projekte