Een beginner’s gids voor GraphQL Interfaces en Unions

Wat is GraphQL?

GraphQL is een open-source querytaal voor API’s, die aanvankelijk in 2012 door Facebook is ontwikkeld en in 2015 aan het publiek is vrijgegeven. Het biedt een flexibele en efficiënte alternatieve voor traditionele REST API’s door clients in staat te stellen alleen de specifieke gegevens op te vragen die ze nodig hebben, wat problemen van over-fetching en under-fetching oplost die vaak optreden bij REST API’s.

Een van de redenen voor de groeiende populariteit van GraphQL is de clientgestuurde aard. Dit maakt het bijzonder geschikt voor moderne toepassingen waar prestaties, schaalbaarheid en naadloze gebruikerservaringen cruciaal zijn. GraphQL stelt clients in staat om meerdere bronnen in één verzoek te combineren, waardoor het netwerkverkeer vermindert en het een uitstekende oplossing is voor mobiele apps met beperkte bandbreedte of complexe front-end behoeften.

Belangrijke bedrijven zoals GitHub, Twitter, Indeed en Shopify hebben GraphQL omarmd, wat de potentie benadrukt om de ontwikkeling van API’s te stroomlijnen en de interacties tussen client en server te verbeteren.

GraphQL Interface

In GraphQL fungeert een Interface op een vergelijkbare manier als interfaces in objectgeoriënteerd programmeren. Het is een abstract type dat een set van gemeenschappelijke velden definieert die door meerdere objecttypen kunnen worden geïmplementeerd. Dit zorgt ervoor dat de client met vertrouwen deze gemeenschappelijke velden kan opvragen over verschillende types.

Markdown

 

GraphQL client query:

Markdown

 

In dit voorbeeld zijn de gemeenschappelijke velden zoals id, name en model beschikbaar voor alle objecttypen die de Vehicle interface implementeren. Echter, de typespecifieke velden zoals fuelType voor Car en gearCount en isElectric voor Bicycle kunnen worden opgevraagd met behulp van fragmenten.

Als de client alleen gemeenschappelijke velden nodig heeft, kunnen ze de fragmenten weglaten:

Markdown

 

Voordelen van het gebruik van interfaces

  1. Codeherbruikbaarheid: Gemeenschappelijke velden kunnen in de interface worden gedefinieerd en gedeeld tussen meerdere typen, waardoor redundantie wordt verminderd.
  2. Vereenvoudigde client-side logica: Klanten hoeven geen voorwaardelijke controles voor objecttypen uit te voeren. Ze kunnen exacte typen aanvragen en met vertrouwen de antwoorden verwerken.
  3. Schema-uitbreidbaarheid: Het toevoegen van een nieuw gemeenschappelijk veld wordt gemakkelijker, omdat het alleen in de interface hoeft te worden gedefinieerd.
  4. Afgedwongen structuur: Interfaces handhaven een gedeelde structuur tussen alle implementerende typen, wat zorgt voor consistentie (bijv. alle voertuigen moeten een id, name en model hebben).
  5. Geünificeerde query’s: In plaats van verschillende typen afzonderlijk te raadplegen, kunnen klanten een enkele interface raadplegen om gegevens van alle implementerende typen te verkrijgen.
  6. Verbeterde documentatie: Door gemeenschappelijk gedrag te definiëren via interfaces, wordt het gemakkelijker voor API-gebruikers om gerelateerde typen te begrijpen en ermee te werken.

GraphQL Unie

Een Union in GraphQL is een abstract type dat cliënten in staat stelt om meerdere objecttypes te queryen die op een bepaalde manier met elkaar verband houden via een enkel veld. In tegenstelling tot interfaces vereisen unions niet dat de lidtypes gemeenschappelijke velden delen. Dit maakt unions ideaal voor het afhandelen van gevallen waarin verwante types verschillende structuren hebben, maar samen moeten worden gequeryd.

Markdown

 

GraphQL clientquery:

Markdown

 

In dit voorbeeld zijn Product, Service en Abonnement allemaal verschillende types die behoren tot de PurchaseItem-unie. De cliënt kan alle drie de types queryen met behulp van fragments in een enkele query, ook al delen ze geen enkele velden.

Belangrijke opmerking over unions: de lidtypes van een Unietype moeten allemaal Object basis types zijn; Scalar, Interface en Union types mogen geen lidtypes van een Union zijn. Evenzo mogen wrapper-types geen lidtypes van een Union zijn.

Voordelen van het gebruik van Unions

  • Flexibele Groepering: Unions maken het mogelijk om verwante types te queryen die geen gemeenschappelijke velden delen, wat anders lastig te hanteren zou zijn.
  • Vereenvoudigde Foutafhandeling: Cliënten kunnen fragments gebruiken om specifieke types te queryen, waardoor de behoefte aan complexe voorwaardelijke logica aan de cliëntzijde vermindert.
  • Heterogene Gegevensafhandeling: Een enkele query kan gegevens ophalen van meerdere types, waardoor de afhandeling van verschillende datastructuren wordt vereenvoudigd.
  • Nuttig voor Foutreacties: Unies zijn bijzonder nuttig wanneer je succesreacties en foutdetails wilt combineren in één enkele reactietype, waardoor cliënten ze efficiënt kunnen afhandelen.

In Samenvatting

GraphQL Interfaces en Unies bieden krachtige manieren om je GraphQL-schema te structureren, wat flexibiliteit mogelijk maakt en de interacties tussen cliënt en server vereenvoudigt. Interfaces maken gedeelde velden over types mogelijk, wat de herbruikbaarheid van code bevordert en het uitbreiden van schema’s vergemakkelijkt. Unies daarentegen bieden een manier om verschillende types samen te queryen zonder dat gemeenschappelijke velden nodig zijn.

Source:
https://dzone.com/articles/a-beginners-guide-to-graphql-interfaces-and-unions