Natuurlijk kun je op allerlei manieren een API opzetten. De meeste API’s die je in het wild vindt zijn opgezet als REST API’s (of in ieder geval een verbastering ervan, die we voor het gemak toch maar REST noemen). Een nadeel van dit soort API’s is dat het aantal endpoints hard kan groeien. En omdat de endpoints een vaste opzet voor de request en de return values hanteren, word je vaak gedwongen om meer data op te halen dan je nodig hebt. Een ander model dat je kunt hanteren is het GraphQL model.
Wat is GraphQL?
GraphQL is een query language en runtime die het mogelijk maakt een “strongly-typed” schema te publiceren. In tegenstelling tot de REST variant met een veelvoud aan endpoints, heb je in GraphQL één endpoint waar applicaties door queries of mutations data ophaalt of aanpast.
Hoe werken die queries dan?
Ik doe GraphQL zeer te kort met mijn beperkte voorbeeld hieronder, maar het is maar om je een beetje de smaak te geven:
grapql-query
De bovenstaande query zou alle hero’s met hun bijbehorende vrienden opleveren. Mutaties in GraphQL lijken een beetje op remote procedure calls waarbij er in het schema functies zijn gedefinieerd die je vanuit je client aan kan roepen.
Dit voelt allemaal erg als oData
Nou moet ik eerlijk zeggen dat ik de details van oData ook niet zo goed ken; ik heb het altijd proberen te vermijden. Maar één van de kritiekpunten die ik in ieder geval vaak hoorde was dat de client veel te veel rechten had om (bijna) rechtstreeks met je data te verbinden. Dat maakt beveiliging een stuk lastiger. Doordat GraphQL een strongly-typed schema heeft, kun je behoorlijk goed bepalen wat een applicatie wel en niet mag aanroepen.
Wanneer zou je GraphQL gebruiken?
Laat ik vooropstellen dat GraphQL niet het antwoord zou moeten zijn op een tikkeltje te lui ontwikkelwerk. Wat ik daarmee bedoel is dat je, voordat je een keuze maakt, goed hebt nagedacht over je model en de bijbehorende endpoints. In de meeste gevallen zal een REST Api een prima antwoord zijn. Maar mochten je modellen relatief groot zijn en is er veel variatie nodig om de clients goed te bedienen, dan is GraphQL “the way to go” (of in ieder geval “a way to go” 😊).
Vertel me meer
Ik vind GraphQL een mooie techniek om in je gereedschapskist te hebben. Wil je jezelf er verder in verdiepen. Duik gerust in de documentatie:
Introduction to GraphQL | GraphQL