PRODSoeverein Europees BaaS-platformOpen Dashboard →

Prestaties · 10 min gelezen

PostgREST versus Hasura versus een aangepaste API

Affane Daylami · Fondateur · 15 mei 2026

Terug naar blog

Drie architecturen beantwoorden dezelfde vraag, elk op hun eigen manier: hoe je een API in een Postgres-database kunt pluggen zonder alles met de hand te schrijven. PostgREST genereert een REST API op basis van uw SQL-schema. Hasura genereert een GraphQL API met een eigen machtigingssysteem en uitbreidingspunten voor uw bedrijfslogica. Een aangepaste API, in Node.js of elders, geeft u volledige controle, ten koste van alles zelf coderen. De juiste keuze hangt minder af van de ruwe prestaties en meer van waar u wilt dat uw bedrijfslogica leeft.

Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.

Dit artikel breidt twee vergelijkingen uit die al op deze blog zijn gepubliceerd: onze recensie van PostgREST-compatibiliteit en de alternatieven en onze vergelijking gewijd aan GraphQL-lagen op Postgres. Hier verandert de invalshoek: een beslissingsraster tussen drie manieren om een ​​API-laag te bouwen, waarbij Hasura wordt behandeld vanwege de rechten en zakelijke uitbreidingspunten in plaats van de GraphQL-syntaxis, en een handgeschreven API als een optie op zichzelf, niet een simpele "else" regel onderaan de tabel.

De essentie

  • PostgREST genereert automatisch een REST API op basis van het Postgres-schema. Er is geen willekeurige bedrijfslogica mogelijk, de RLS blijft de enige beveiligingsgrens.
  • Hasura voegt zijn eigen machtigingssysteem toe per rol en tabel, acties om een zakelijke webhook te verbinden, gebeurtenistriggers en RESTified-eindpunten bovenop de GraphQL-engine.
  • Een aangepaste API (Node.js, Express, Fastify...) geeft volledige controle over bedrijfslogica, validatie en authenticatie – ten koste van alles zelf schrijven, testen en onderhouden.
  • Op Aurabase is de PostgREST-laag een echte instantie; bedrijfslogica die verder gaat dan CRUD gaat via SQL-functies die worden weergegeven in RPC of via Edge Functions, en niet via een aparte Node-server om te hosten.
  • De drie benaderingen sluiten elkaar niet noodzakelijkerwijs uit: het combineren van PostgREST voor CRUD en een aangepaste API voor gevoelige bewerkingen is een gebruikelijk patroon in de productie.
#
Overzicht

De echte keuze: wie schrijft de bedrijfslogica, en waar

De vraag “PostgREST of Hasura of aangepaste API” verbergt een nuttiger vraag: wie schrijft uw bedrijfslogica, met welke tool, en wie gebruikt deze code in de productie? De drie architecturen reageren verschillend, en dit verschil structureert al het andere: veiligheid, snelheid van implementatie, technische schulden op de lange termijn.

Oorsprong van de APIGegenereerd op basis van SQL-schemaGegenereerd op basis van het schema, via de GraphQL Hasura-engineRoute voor route geschreven, met de hand
Aangepaste bedrijfslogicaAlleen SQL-functies (RPC).Acties (webhook) + gebeurtenistriggersElke code, zonder gereedschapsbeperkingen
BeveiligingsmodelRLS Postgres, rol gedreven door JWTMachtigingen die specifiek zijn voor de rol/tabel, niet voor een delegatie naar de RLSWat u codeert (middleware, ORM, optionele RLS)
Daarnaast tegemoet te komenNiets - een lichtgewicht binair getalDe Hasura-engine, met zijn eigen metadatabasisDe complete applicatieserver
LeercurveLaag als het team al weet hoe het SQL moet schrijvenMedium — een nieuw machtigingen- en configuratiesysteemNiets op de tool, maar al het andere om te ontwerpen
POSTGRESTHASURAAANGEPASTE API

Geen van de drie kolommen is strikt genomen beter: elke kolom verplaatst het werk naar een andere plek. PostgREST verplaatst het naar SQL, Hasura naar configuratie en webhooks, een aangepaste API naar klassieke applicatiecode.

#
Herinnering

PostgREST: de API als directe weerspiegeling van het schema

PostgREST transformeert uw Postgres-schema in een REST API – filters, relatie-inbedding, RPC, RLS aangestuurd door JWT – zonder dat u een backend hoeft te schrijven. We gaan dieper in op deze reikwijdte in ons artikel over de echte -compatibiliteit en de-alternatieven; wat voor deze vergelijking van belang is, is waar PostgREST stopt.

PostgREST heeft geen notie van willekeurige bedrijfslogica. Elke regel moet in SQL worden uitgedrukt: een RPC-functie, een trigger, een beperking, een RLS-beleid. Dit is een geaccepteerde beperking, geen vergissing: het diagram blijft de enige bron van waarheid, waardoor elke afwijking tussen een applicatielaag en de basis die deze bedient wordt geëlimineerd.

Concreet is het onmogelijk om vanuit een directe PostgREST-aanvraag een betalingsdienst van derden te bellen, een bevestigingsmail te sturen of een score in JavaScript te berekenen. Deze logica moet óf in SQL voorkomen (pl/pgsql-functie), óf daarbuiten worden geactiveerd - een trigger die een NOTIFY-gebeurtenis publiceert, waarnaar wordt geluisterd door een externe service die niet langer PostgREST is.

#
Vergelijking

Hasura: toestemmingen verklaard, bedrijfslogica geënt door webhook

Ons artikel over GraphQL-lagen op Postgres beschrijft waar de Hasura-engine draait en hoe de machtigingen verschillen van de Postgres RLS. Hier is de invalshoek die van de bedrijfslogica: hoe je aangepaste code kunt inpluggen in een database die wordt beheerd door Hasura, en waar.

Een Actie Hasura geeft een aangepaste GraphQL-mutatie of -query weer, ondersteund door een HTTP-webhook die u schrijft in de taal van uw keuze. Hasura valideert de invoer volgens het aangegeven schema, roept uw ​​webhook aan en stuurt vervolgens het antwoord terug naar de client. Het is de toegangspoort tot elke logica die verder gaat dan CRUD: oproep aan een betalingsprovider, complexe berekeningen, orkestratie in meerdere stappen.

De Event Triggers volgen de tegenovergestelde richting: een invoeging, een update of een verwijdering van een tabel activeert een webhook, asynchroon en met automatische herstart in geval van een storing. Dit is het mechanisme dat de meeste Hasura-integraties gebruiken om een ​​service van derden (facturering, transactionele e-mail, zoekmachine) te synchroniseren zonder deze code te koppelen aan het initiële klantverzoek.

Hasura kan ook een reeds geschreven GraphQL-query weergeven als een typische REST-route, met een benoemd pad en parameters: de RESTified-eindpunten, in de terminologie van zijn eigen documentatie. Handig als uw frontendteam liever REST gebruikt, zonder de onderliggende GraphQL-machtigingsengine op te geven.

Een punt dat voor herhaling vatbaar is

Hasura-machtigingen zijn een Hasura-specifiek systeem, per rol en per tabel, en niet een delegatie naar de Postgres RLS. Twee plaatsen om de toegangsregels te controleren in plaats van slechts één: een reële kostenpost die moet worden afgewogen tegen de flexibiliteit die wordt verkregen door Acties en Gebeurtenistriggers.

Contextherinnering, ontwikkeld in ons speciale artikel: Hasura heeft zijn communicatie sinds juni 2025 geheroriënteerd op PromptQL, een laag ontworpen voor AI-agenten – zonder de GraphQL-engine te verwijderen, die op zijn officiële website nog steeds als “getest” wordt gepresenteerd.

#
Vergelijking

Aangepaste API (Node.js, Express, Fastify): codeer alles, beheer alles

Een handgeschreven API kent per definitie geen grenzen: welke bedrijfslogica dan ook, in welke taal dan ook, met welke afhankelijkheden dan ook. Het is ook de enige van de drie opties waarbij niets voor u wordt gegenereerd: elke route, elke validatie, elke verbinding met de database is code waarvan u de eigenaar bent en die u moet onderhouden.

routes/orders.js (Express, extrait)javascript
// Het filter, de sortering en het inbedden van relaties zijn met de hand geschreven,
// alleen voor deze route: herhaal dit voor elke API-bron
router.get('/orders', async (req, res) => {
  const { status } = req.query
  const result = await db.query(
    `SELECT o.id, o.total, c.email AS customer_email
     FROM orders o JOIN customers c ON c.id = o.customer_id
     WHERE o.status = $1 ORDER BY o.created_at DESC`,
    [status]
  );
  res.json(result.rows)
});

Wat dit model biedt, in ruil voor handmatig werk: volledige controle over fouten en geretourneerde HTTP-codes, klassieke testbaarheid (handlers, geen declaratieve configuratie) en geen nieuwe DSL om te leren voor een team dat de taal al beheerst.

Wat het kost, in ruil: CRUD, paginering en filters om voor elke bron handmatig te schrijven en te onderhouden; authenticatie en autorisatie om zelf te implementeren en te controleren, zonder automatisch overgenomen RLS; het risico van N+1-query's als elke geneste relatie zonder discipline zijn eigen Postgres-query activeert; en API-documentatie die handmatig moet worden onderhouden, of via een externe generator kan worden geïntegreerd.

Wat de ruwe prestaties betreft, is de vraag “Is Node.js langzamer dan Rust” een onderwerp op zich: ons artikel over Rust versus Node.js latentie behandelt dit in detail, met de methodologie die upstream wordt verklaard op onze benchmarkmethodologiepagina. Een aangepaste API heeft hetzelfde prestatieprofiel als elke HTTP-service die u al gebruikt, noch beter noch slechter qua constructie. Om precies te weten waar PostgREST verzadigd raakt en op welk punt een aangepaste laag nodig wordt, zie ons artikel over de echte grenzen van PostgREST in productie.

#
Besluit

Vergelijkingstabel: de drie opties naast elkaar

Naast de architectuur komen bij de keuze meestal vier criteria naar voren: snelheid van implementatie, echte bedrijfsflexibiliteit, technische schulden op de lange termijn en de typische gebruikssituatie waarbij elke optie het meest comfortabel is.

Initiële installatieMinuten — schema bestaat alUren: sluit de basis aan, configureer rechtenDagen tot weken: schrijf elke route
Zakelijke flexibiliteitBeperkt tot SQL (RPC, triggers)Goed via Actions/Event Triggers, maar gaat via een externe webhookTotaal, eenvoudig
Technische schulden op termijnZwak – het diagram blijft de enige bron van waarheidMedium — Hasura-metagegevens die naast het schema moeten worden onderhoudenHoog als het team groeit zonder discipline (testen, documentatie, beoordeling)
Typisch gebruiksscenarioDirect CRUD op een stabiel schema, team comfortabel in SQLFederatie van meerdere gegevensbronnen of AI-agent-georiënteerde logicaComplexe bedrijfslogica, talrijke integraties van derden
POSTGRESTHASURAAANGEPASTE API
#
Code ingecheckt

Waar gaat bedrijfslogica heen in een Aurabase-project?

Op een Aurabase Postgres-engineproject wordt de CRUD-laag al bedekt door een daadwerkelijke PostgREST-instantie, en niet door een geschatte herimplementatie. De vraag die open blijft bij deze vergelijking: waar moet ik schrijven wat verder gaat dan de CRUD?

Er bestaan twee paden, die elkaar niet uitsluiten. De eerste: een SQL-functie die in RPC wordt weergegeven, voor elke logica die redelijkerwijs in SQL kan worden uitgedrukt: berekening van een totaal, kruisvalidatie tussen verschillende tabellen, trapsgewijze updates in één enkele transactie.

RPC-oproep: bedrijfslogica in SQLbash
curl -X POST "https://<gateway>/v1/db/<project_id>/rpc/apply_discount" \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{"order_id": 42, "code": "WELCOME10"}'

De tweede manier: Edge Functions, voor alles wat verder gaat dan het SQL-domein: het aanroepen van een betalings-API, het verzenden van een e-mail, het berekenen van een inbedding. Bij Aurabase leiden twee paden daar naartoe: de Studio-editor, die Deno (TypeScript)-code precies zo uitvoert als op Supabase, en de aura functions deployCLI, die streeft naar een apart pad voor functies geschreven in Rust en gecompileerd in WASM - gedetailleerd in onze verenigde Rust-architectuur. Voor geen van beide paden is het hosten van een afzonderlijke Node-server vereist, in tegenstelling tot de pure “aangepaste API”-optie in dit artikel, waarbij die server volledig uw verantwoordelijkheid is.

Deze distributie is geen wankel compromis tussen de drie hier vergeleken modellen: het is letterlijk PostgREST voor CRUD, een steen die dicht bij Hasura Actions ligt voor gebeurtenislogica via RPC en triggers, en Edge Functions die de werking van een volledige applicatieserver vermijden - zonder ooit een binaire keuze tussen "alle PostgREST" en "allemaal op maat" te forceren.

#
Besluit

Hoe u kunt kiezen op basis van uw context

Vier situaties komen het vaakst voor. De juiste keuze hangt vooral af van wat uw bedrijfslogica vereist, en niet van de populariteit van een tool.

  • Uw schema is stabiel en uw bedrijfslogica bevindt zich in SQL. Zelf-gehoste PostgREST, of native geïntegreerd (Aurabase, Supabase), is voldoende: er hoeft niets meer te worden gehost en het schema blijft de enige bron van waarheid.
  • U wilt meerdere gegevensbronnen samenbrengen, of uw routekaart is gericht op AI-agenten die uw gegevens gebruiken. Hasura past met zijn PromptQL-laag beter in dit terrein.
  • Uw product beschikt over rijke bedrijfslogica, talrijke integraties van derden en een team dat al is uitgerust met een applicatietaal. Een aangepaste API blijft de meest directe keuze, ten koste van het schrijven en onderhouden ervan in de loop van de tijd.
  • Je wilt zelf gegenereerde CRUD zonder echte ruimte op te geven voor bedrijfslogica (RPC, Edge Functions), zonder nog een applicatieservice op te stapelen om te exploiteren. Dit is de hoek die is gedocumenteerd in deze vergelijking, toegepast op Aurabase, vorige sectie.
#
Veelgestelde vragen

Veelgestelde vragen

Kan PostgREST een aangepaste Node.js API vervangen?+
Voor de CRUD-laag vaak wel. Voor elke bedrijfslogica die verder gaat dan wat een SQL-functie goed kan uitdrukken, nee: PostgREST heeft geen idee van willekeurige bedrijfslogica, in tegenstelling tot een aangepaste API of Hasura Actions, die deze logica delegeren aan applicatiecode.
Is Hasura open source?+
Hasura GraphQL Engine is vrijgegeven als open source. PromptQL, de laag ontworpen voor AI-agenten waarop Hasura zijn communicatie sinds juni 2025 heeft geheroriënteerd, is een afzonderlijk product van deze engine.
Kunnen we PostgREST en een aangepaste API combineren in hetzelfde project?+
Ja, en dit is een veel voorkomend patroon. PostgREST dekt de standaard CRUD die aan de klant wordt blootgesteld, terwijl een afzonderlijke API of functie gevoelige bewerkingen afhandelt (betaling, verzenden van e-mail, meerstapslogica) die vervolgens dezelfde Postgres-database aanroepen.
Biedt Aurabase Hasura-integratie?+
Nee. Aurabase integreert PostgREST native voor REST en pg_graphql optioneel voor GraphQL, niet Hasura. De drie benaderingen blijven op papier vergelijkbaar, maar zijn op het platform niet uitwisselbaar.

KLAAR VOOR IMPLEMENTATIE?

Uw backend in vijf minuten.

Geen creditcard vereist · 500 MB gratis · 50.000 MAU