Wat is GraphQL

Wat is GraphQL

June 8, 2021

Door: Ton Koop

4 min. leestijd

GraphQL is een querytaal en server-side runtime voor application programming interfaces (API's) die er voor zorgt dat clients precies de gegevens krijgen waar ze om vragen en niet meer.

GraphQL is ontworpen om API's snel, flexibel en developer-friendly te maken. Met GraphQL kunnen developers requests samenstellen die gegevens ophalen uit meerdere gegevensbronnen in één enkele API-call.

Bovendien geeft GraphQL API-beheerders de flexibiliteit om velden toe te voegen of af te schaffen zonder dat dit gevolgen heeft voor bestaande queries. Developers kunnen API's bouwen met de methoden die zij prefereren, en de GraphQL specificatie zal ervoor zorgen dat deze op een voorspelbare manier kan functioneren.

Rest vs GraphQL

Developers gebruiken application programming interfaces, of API's, om gegevens en functionaliteit samen te brengen of over te dragen binnen of tussen applicaties. Als het aankomt op het werken met API's, worden ontwikkelaars vaak geconfronteerd met twee populaire opties: REST of GraphQL.

REST is een software-architectuurstijl waaraan API's voldoen zodat developers op een standaard manier met services kunnen communiceren. GraphQL is een querytaal voor API's en een runtime voor het uitvoeren van die query's. REST en GraphQL zijn vergelijkbaar in de zin dat ze databronnen identificeren als URL's waarmee de applicatie gegevens of functionaliteit kan ophalen. Echter zijn er veel verschillen.

  1. GraphQL wisselt gegevens uit op een enkel endpoint, terwijl REST vaak meerdere endpoints heeft. GraphQL resolvers halen de gegevens op voor de velden die nodig zijn. Als één resolver faalt, kan de rest van de query nog steeds bruikbare gegevens ophalen en retourneren. In veel gevallen vervangt één GraphQL query vaak meerdere REST queries.

  2. GraphQL voorkomt over-fetching en under-fetching van data - dat wil zeggen, een endpoint dat reageert op een call met respectievelijk te veel of te weinig informatie in vergelijking met wat de app nodig heeft. REST API's worden aangeboden in verschillende resolutieniveaus. Sommige niveaus halen meer gegevens op en andere minder. Dit betekent dat een app te veel gegevens kan ontvangen. Neem als voorbeeld het terugkrijgen van het hele klantprofiel, terwijl alleen de naam en het e-mailadres van de klant nodig waren. Het kan ook zijn dat er te weinig gegevens worden opgehaald, waardoor de app meerdere API-calls moet maken in plaats van slechts één.

  3. GraphQL maakt gebruik van een aangepaste query-indeling genaamd Schema Definition Language (SDL), en hoewel die aangepaste query taal wordt gebruikt voor het verzoek, wordt JSON geretourneerd. Dit maakt het voor clients makkelijker om de respons te gebruiken. GraphQL client libraries hebben native integratie met het ReactJS UI framework (en vele andere libraries) waardoor GraphQL vandaag voor veel front-end en back-end developers toegankelijk is.

  4. De beleving van de developer verschilt tussen GraphQL en REST. Om te begrijpen hoe REST API's werken, gebruikt de developer meestal een portal (docs omgeving) om de API's te ontdekken en ermee te communiceren. In GraphQL, is deze portal vaak een ingebouwde playground die ook geschikt is voor development (zie: http://api.afosto.io/gql). Het stelt ontwikkelaars in staat om nieuwe queries te verkennen op een interactieve manier. De documentatie is ook anders. REST maakt meestal gebruik van OpenAPI specs en portals. Er bestaan enkele uitbreidingen op OpenAPI. Swagger Docs bouwt bijvoorbeeld interactieve documentatie op basis van die OpenAPI-specificaties. GraphQL-developers gebruiken meestal schema-gebaseerde interactieve documentatie, zoals Apollo om GraphQL-endpoints te ontdekken, ontwikkelen en ermee te communiceren.

GraphQL API vs Rest API

GraphQL Query voorbeeld

Hieronder vind je een voorbeeld van een GraphQL query. In deze query halen we bepaalde gegevens van een contact op. Zoals hierboven uitgelegd geeft deze query ook alleen de opgevraagde gegevens als antwoord en verder geen contact details. In dit geval krijg je dus alleen de e-mail, voornaam, tweede naam en achternaam van een contact op basis van het ID van dat contact.

1 2 3 4 5 6 7 8 query identityWelcome($contact_id: String!) { contact(id: $contact_id) { email given_name additional_name family_name } }

Wil je meer weten over de toepassing van GraphQL vs. REST binnen het Afosto platform neem dan contact met ons op!

Deel dit artikel
Schrijf je in voor gratis updates, trainingen en content
Wees klaar voor de toekomst met het Afosto OMS systeem