GraphQL is een querytaal waarmee over meerdere API's (application programming interfaces) tegelijk gezocht en gewerkt kan worden. Deze taal zorgt ervoor dat clients precies de gegevens krijgen waar ze om vragen en niet meer dan dat. Voor elke applicatie is het belangrijk om zo efficiënt mogelijk data te versturen tussen client en API’s met zo min mogelijk load. Dit is precies waar GraphQL op inhaakt.
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.
- 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.
- 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.
- 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.
- 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 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.
1query identityWelcome($contact_id: String!) {
2 contact(id: $contact_id) {
3 email
4 given_name
5 additional_name
6 family_name
7 }
8}
Wil je meer weten over de toepassing van GraphQL vs. REST binnen het Afosto platform neem dan contact met ons op!
GraphQL FAQ
Wat is het verschil tussen GraphQL en React?
GraphQL is een api techniek terwijl React een app framework is. GraphQL is te gebruiken in een React app voor het ophalen van data. Ze zijn niet vervangbaar voor elkaar.
Wat is een GraphQL resolver?
Een resolver is een verzameling van functies die response genereren voor een GraphQL query. Simpel gezegd fungeert een resolver als een GraphQL query handler en zorgt voor het juiste antwoord op een GraphQL query.
Mijn naam is Ton, mede-eigenaar van Afosto en in het bezit van een masterdiploma in International Business and Management. Bij Afosto fungeer ik als een stuwende kracht achter het ondernemerssucces van onze klanten. Mijn diepgaande expertise in e-commerce en mijn passie voor het uitbouwen van bedrijven zijn fundamenteel in mijn werkwijze om retailers te ondersteunen. Met het geavanceerde headless commerce platform van Afosto bied ik inventieve oplossingen die niet alleen de efficiëntie verhogen, maar ook de groei van bedrijven stimuleren. Ik hou er van om mijn kennis te delen zodat we samen succes kunnen hebben.
Meer van Ton Koop