>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
TypeScript

Hoe Stop Je Met het Schrijven van CRUD en Ga Je Gang met Hasura

Herken je dit? Je begint een nieuw project en de eerste twee weken besteed je aan monotone routineklussen. Je moet schemas beschrijven in de database, modellen aanmaken in code, endpoints schrijven voor het aanmaken, lezen, bijwerken en verwijderen van records. Voeg dan paginering, filtering en sortering toe, en los ook de toegangsrechten ergens op op. Tegen de tijd dat je bij de eigenlijke bedrijfslogica komt, is je enthousiasme al flink getaand.

Ik betrapte mezelf er vaak op dat 80% van de backend in een typische webapplicatie gewoon proxy's data van de database naar JSON en terug. Dat is precies het probleem dat Hasura oplost.

Wat is het precies

Kort samengevat: Hasura is een kant-en-klare engine die verbinding maakt met je databases en direct een productieklare GraphQL API levert. Je hoeft geen servercode te schrijven in Node.js, Go of Python. Je beschrijft simpelweg tabellen in Postgres, MS SQL Server of zelfs MongoDB, en Hasura genereert zelf het schema met alle relaties.

Hasura logo

Het GitHub-project heeft inmiddels meer dan 32 duizend sterren verzameld, en het is niet zomaar "nog een wrapper". Het is een volwaardige compiler die GraphQL-queries omzet naar efficiënte SQL.

Hoe Helpt Hasura in de Praktijk

Toen ik Hasura voor het eerst probeerde, was wat me over de streep trok dat het niet probeert om de developer in een "gouden kooi" op te sluiten. Hier zijn een paar dingen die het nuttig maken.

Direct een API met alle toeters en bellen

Zodra je een database hebt verbonden, krijg je meteen de mogelijkheid om complexe queries uit te voeren. Wil je een gebruiker ophalen, zijn laatste vijf bestellingen, en alleen de artikelen uit die bestellingen die meer dan 1.000 euro kosten? Met standaard REST zou je ofwel drie verzoeken moeten doen of een aangepast endpoint met een heleboel joins moeten schrijven. Bij Hasura is het één GraphQL-query die het uitvoert als één efficiënte SQL-query tegen de database.

Row-level security

Dit is waarschijnlijk de sterkste feature van de engine. Hasura heeft een ingebouwd toegangscontrolesysteem (RBAC). Je kunt zeggen: "Een gebruiker met de rol editor kan alleen artikelen zien waar ze als auteur vermeld staan". Dit configureer je rechtstreeks in de console of via YAML-configs. Je hoeft niet overal if (user.id === article.author_id) te controleren in elke controller-methode.

Ingebouwde reactiviteit

Als je realtime updates nodig hebt (bijvoorbeeld voor een chat of notificatiefeed), ondersteunt Hasura GraphQL Subscriptions. Het monitort automatisch wijzigingen in de database en pusht data naar de client via WebSockets. Dit handmatig helemaal opnieuw opzetten is best een klus, vooral als je ook rekening moet houden met toegangsrechten.

Event-driven architectuur

Hasura kan webhooks triggeren wanneer de database verandert. Nieuwe gebruiker toegevoegd? Hasura stuurt een POST-verzoek naar je microservice, die een welkomstmail verstuurt. Dit stelt je in staat om zware logica te verplaatsen naar externe functies (serverless of reguliere microservices), waardoor de API lekker clean blijft.

Wat is nieuw in versie drie

Hasura V3 wordt nu actief ontwikkeld. Het team heeft de architectuur heroverwogen en zich gericht op connectors. De engine is nu geschreven in Rust (voorheen Haskell), wat positief zou moeten uitpakken voor geheugengebruik en snelheid.

V3 introduceerde het "supergraph"-concept — hiermee kun je data uit verschillende bronnen (Postgres, Mongo, ClickHouse) combineren in één logische API. Tegelijkertijd kun je aangepaste logica schrijven in TypeScript, Python of Go met behulp van hun SDK.

Technische nuances en een addertje onder het gras

Denk hier niet aan als een "silver bullet". Hasura is een extra laag in je infrastructuur.

  1. Moeilijk te debuggen: wanneer er iets misgaat in een gegenereerde SQL-query, kan het lastig zijn om te begrijpen waarom Hasura besloot om hem zo te bouwen. Hoewel de console een Analyze-tool heeft die het query-uitvoeringsplan toont.
  2. Afhankelijkheid van DB-structuur: Hasura is heel nauw gekoppeld aan hoe je database is ontworpen. Als je een rommeltje hebt van tabellen zonder foreign keys, komt er geen magie aan te pas. Je zult eerst de data-schema moeten opruimen.
  3. Leercurve: ondanks de zeer snelle start, kost diepgaande configuratie van toegangsrechten en werken met Remote Schemas tijd om te leren uit de documentatie.

Wie heeft hier baat bij

Hasura past perfect bij projecten waar het frontend-team snel wil bewegen en niet wil wachten tot de backend weer een endpoint schrijft. Het is geweldig voor MVP's, interne adminpanels en dashboards waar veel datawerk en filtering is.

Als je een systeem bouwt met zeer specifieke bedrijfslogica die moeilijk in het CRUD-paradigma past, kan Hasura nog steeds nuttig zijn als een "datalaag" waarop je je services bouwt.

De makkelijkste manier om het te proberen is via Docker — de repository heeft kant-en-klare docker-compose-bestanden. Letterlijk binnen vijf minuten heb je een werkende console met een GraphQL-sandbox. Als je het zat bent om repetitieve controllers te schrijven, is dit zeker een tool die het proberen waard is.

Gerelateerde projecten