GraphQL is een open-source querytaal en runtime voor API's die in 2012 ontwikkeld werd door Facebook en in 2015 publiekelijk beschikbaar werd gemaakt. In tegenstelling tot traditionele REST API's waarbij je meerdere endpoints moet aanroepen om verschillende data op te halen, biedt GraphQL één enkel endpoint waar clients precies kunnen specificeren welke data ze nodig hebben.
De naam GraphQL verwijst naar het 'graph'-achtige karakter van de data die het kan opvragen. Data wordt georganiseerd in een schema met types en relaties, waarbij clients door deze graph kunnen navigeren om precies de informatie te verkrijgen die ze nodig hebben - niet meer en niet minder.
Kernconcepten van GraphQL
GraphQL is gebouwd rond een aantal fundamentele concepten die het onderscheiden van andere API-technologieën:
- Schema: Een sterk getypeerde definitie van alle beschikbare data, operaties en relaties in de API
- Queries: Verzoeken om data op te halen, waarbij de client de exacte structuur van het antwoord bepaalt
- Mutations: Operaties om data te wijzigen, toe te voegen of te verwijderen
- Subscriptions: Real-time updates waarbij de server data naar de client pusht wanneer er wijzigingen optreden
- Resolvers: Functies die bepalen hoe data voor elk veld in het schema wordt opgehaald
- Types: Definities van objecten en hun velden, inclusief scalars, objects, enums en interfaces
Voordelen van GraphQL
GraphQL biedt verschillende significante voordelen ten opzichte van traditionele API-architecturen:
- Geen over-fetching of under-fetching: Clients krijgen precies de data die ze vragen, niet meer en niet minder
- Eén endpoint: Alle data is toegankelijk via één URL, wat de API-architectuur vereenvoudigt
- Sterk getypeerd: Het schema fungeert als contract tussen client en server, wat fouten voorkomt en tooling mogelijk maakt
- Introspectie: De API kan zichzelf beschrijven, wat automatische documentatie en IDE-ondersteuning mogelijk maakt
- Evolutie zonder versies: Nieuwe velden kunnen worden toegevoegd zonder bestaande queries te breken
- Efficiënte data-loading: Meerdere resources kunnen in één request worden opgehaald
GraphQL vs REST
Hoewel zowel GraphQL als REST gebruikt worden voor API-ontwikkeling, zijn er belangrijke verschillen:
- Flexibiliteit: GraphQL laat clients de response-structuur bepalen, REST heeft vaste endpoints met voorgedefinieerde responses
- Aantal requests: GraphQL kan alle benodigde data in één request ophalen, REST vereist vaak meerdere roundtrips
- Versionering: GraphQL evolueert zonder versies door velden toe te voegen, REST gebruikt vaak API-versies
- Caching: REST kan gebruikmaken van HTTP-caching, GraphQL vereist custom caching-strategieën
- Leercurve: GraphQL heeft een steilere leercurve maar biedt meer mogelijkheden
