API-ontwerp: REST, GraphQL of tRPC?
Door Ruben Bijker · Gepubliceerd · 6 min lezen
Kies REST als standaard, GraphQL als clients flexibele datavormen nodig hebben en tRPC als front-end en back-end in één TypeScript-codebase leven. Hoe goed je de API ontwerpt telt meestal zwaarder dan welke stijl je kiest.
De drie stijlen
| Stijl | Idee | Sterk in | Let op | | --- | --- | --- | --- | | REST | Resources en HTTP-werkwoorden | Eenvoud, HTTP-caching, tooling | Over- en under-fetching, veel endpoints | | GraphQL | Eén endpoint, clients vragen velden op | Flexibele clients, getypeerd schema | Caching, querykosten beheersen, meer serverscomplexiteit | | tRPC | Serverfuncties aanroepen met gedeelde types | End-to-end typeveiligheid, geen dubbel schema | Gebonden aan TypeScript; geen publiek API-formaat |
Ontwerpgewoonten die in elke stijl tellen
- Consistente naamgeving en structuur. Meervoudsnamen, voorspelbare paden, overal dezelfde veldnamen.
- Duidelijke foutresponses. Gebruik juiste statuscodes en een stabiele foutvorm met een machineleesbare code en een leesbare melding.
- Paginering vanaf dag één. Cursor-paginering schaalt beter dan offset bij groeiende data.
- Idempotentie. Maak retries veilig voor betalingen, bestellingen en andere neveneffecten met idempotency keys.
- Versiestrategie. Geef de voorkeur aan additieve wijzigingen; versioneer expliciet bij breaking changes en kondig deprecation aan.
- Validatie aan de rand. Valideer elke input met een schema (bijvoorbeeld Zod) en vertrouw de client nooit.
- Authenticatie en autorisatie. Scheid wie je bent van wat je mag, en controleer rechten op elke resource.
- Rate limiting. Bescherm de API en je kosten tegen misbruik en op hol geslagen clients.
Documentatie en contracten
Een API zonder documentatie is gokken. Beschrijf REST-API's met OpenAPI en genereer clients uit de spec. GraphQL heeft introspectie ingebouwd. Bij tRPC zijn de types het contract. Houd het contract in de repository en test ertegen.
Realtime en achtergrondwerk
Voor live updates: Server-Sent Events voor eenrichtingsstreams en WebSockets voor tweerichtingsberichten. Voor traag werk: antwoord snel, verwerk in een queue en toon jobstatus of stuur een melding als het klaar is.
Een pragmatische keuze
- Publieke of externe API: REST met OpenAPI.
- Veel clienttypes met uiteenlopende behoeften: GraphQL.
- Eén TypeScript-app, één team: tRPC of server actions.
Zie ook: een stack kiezen en TypeScript in webprojecten.
Veelgestelde vragen
- Is REST verouderd?
- Nee. REST over HTTP is eenvoudig, cachebaar en wordt door elke tool en developer begrepen. Het blijft een degelijke standaard voor de meeste API's.
- Wanneer is GraphQL de extra complexiteit waard?
- Als veel verschillende clients verschillende vormen van dezelfde data nodig hebben, of als over-fetching en veel round trips een echt probleem zijn.
- Kan tRPC met een niet-TypeScript back-end?
- Niet op een zinvolle manier. tRPC leunt op gedeelde TypeScript-types en past dus bij full-stack TypeScript-projecten.
Bijbehorende dienst: Webapplicatie laten bouwen: maatwerk door een senior developer
Een project in gedachten?
Vertel kort wat je nodig hebt. Je krijgt antwoord van mij, niet van een verkoopteam.
Neem contact opVerder lezen
- TypeScript in webprojecten: praktijken die lonen
Hoe je TypeScript goed inzet in webprojecten: strict mode, runtimevalidatie, gedeelde types, testen en de valkuilen die de voordelen tenietdoen.
- SSR, SSG, ISR en CSR: een renderstrategie kiezen
Wat server-side rendering, statische generatie, incrementele regeneratie en client-side rendering echt doen, en hoe je per pagina de juiste kiest.