{"id":48913,"date":"2023-01-02T12:55:03","date_gmt":"2023-01-02T11:55:03","guid":{"rendered":"https:\/\/kinsta.com\/nl\/?p=48913&#038;preview=true&#038;preview_id=48913"},"modified":"2023-06-09T10:34:07","modified_gmt":"2023-06-09T08:34:07","slug":"graphql-nodejs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/","title":{"rendered":"GraphQL API&#8217;s bouwen met Node"},"content":{"rendered":"<p>GraphQL is trending binnen de wereld van API ontwikkeling. Hoewel RESTful API&#8217;s nog steeds de meest populaire manier blijven om data van applicaties bloot te stellen (te exposen), kennen ze tegelijkertijd veel beperkingen die GraphQL wil oplossen.<\/p>\n<p>GraphQL is een door Facebook gecre\u00eberde querytaal, die in 2015 werd omgezet in een open-source project. De taal biedt een intu\u00eftieve en flexibele syntaxis voor het beschrijven en openen van gegevens in een API.<\/p>\n\n<p>Deze gids zal onderzoeken hoe je een GraphQL <a href=\"https:\/\/kinsta.com\/nl\/blog\/node-js-installeren\/\">Node.js project<\/a> kunt bouwen. We zullen GraphQL gebruiken om een Todo applicatie te bouwen in het <a href=\"https:\/\/kinsta.com\/blog\/what-is-express-js\/\">Express.js webframework<\/a> voor Node.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Wat is GraphQL?<\/h2>\n<p>Uit de <a href=\"https:\/\/graphql.org\/\">offici\u00eble documentatie<\/a>: &#8220;GraphQL is een querytaal voor API&#8217;s en een runtime voor het vervullen van die query&#8217;s met je bestaande gegevens. GraphQL biedt een volledige en begrijpelijke beschrijving van de gegevens in je API, geeft clients de mogelijkheid om precies te vragen wat ze nodig hebben en niets meer, maakt het gemakkelijker om API&#8217;s in de loop der tijd te evolueren, en maakt krachtige developertools mogelijk.&#8221;<\/p>\n<p>GraphQL is een server-side runtime voor het uitvoeren van query&#8217;s met behulp van het type systeem dat je voor je gegevens hebt gedefinieerd. GraphQL is ook niet gebonden aan een specifieke database of opslag-engine. In plaats daarvan wordt het ondersteund door je bestaande code en gegevensopslag. Een gedetailleerde vergelijking van deze technologie\u00ebn vind je in de <a href=\"https:\/\/kinsta.com\/nl\/blog\/graphql-vs-rest\/\">GraphQL vs. RESTful API gids<\/a>.<\/p>\n<p>Om een GraphQL dienst te maken, begin je met het defini\u00ebren van schema types en het cre\u00ebren van velden die die types gebruiken. Vervolgens geef je een functie-resolver die op elk veld en type wordt uitgevoerd wanneer gegevens door de client worden opgevraagd.<\/p>\n<h2>GraphQL terminologie<\/h2>\n<p>Het GraphQL typesysteem wordt gebruikt om te beschrijven welke gegevens kunnen worden opgevraagd en welke gegevens je kunt manipuleren. Dit is de kern van GraphQL. Laten we verschillende manieren bespreken waarop we gegevens kunnen beschrijven en manipuleren in GraphQ.<\/p>\n<h3>Objecttypen<\/h3>\n<p>GraphQL objecttypen zijn gegevensmodellen die sterk getypeerde velden bevatten. Er moet een 1-op-1 mapping zijn tussen je modellen en GraphQL types. Hieronder staat een voorbeeld van GraphQL Type:<\/p>\n<pre><code class=\"language-json\">type User {\n  id: ID! # The \"!\" means required\n  firstname: String\n  lastname: String\n  email: String\n  username: String\n  todos: [Todo] # Todo is another GraphQL type\n}<\/code><\/pre>\n<h3>Query&#8217;s<\/h3>\n<p>GraphQL Query definieert alle query&#8217;s die een klant kan uitvoeren op de GraphQL API. Je moet een <code>RootQuery<\/code> defini\u00ebren die volgens afspraak alle bestaande query&#8217;s bevat.<\/p>\n<p>Hieronder defini\u00ebren en mappen we de query&#8217;s naar de bijbehorende RESTful API:<\/p>\n<pre><code class=\"language-json\">type RootQuery {\n  user(id: ID): User           # Corresponds to GET \/api\/users\/:id\n  users: [User]                # Corresponds to GET \/api\/users\n  todo(id: ID!): Todo    # Corresponds to GET \/api\/todos\/:id\n  todos: [Todo]          # Corresponds to GET \/api\/todos\n}<\/code><\/pre>\n<h3>Mutaties<\/h3>\n<p>Als GraphQL Queries <code>GET<\/code> verzoeken zijn, dan zijn mutaties <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code>, en <code>DELETE<\/code> verzoeken die de GraphQL API manipuleren.<\/p>\n<p>We zetten alle mutaties in een enkele <code>RootMutation<\/code> om te demonstreren:<\/p>\n<pre><code class=\"language-json\">type RootMutation {\n  createUser(input: UserInput!): User             # Corresponds to POST \/api\/users\n  updateUser(id: ID!, input: UserInput!): User    # Corresponds to PATCH \/api\/users\n  removeUser(id: ID!): User                       # Corresponds to DELETE \/api\/users\n  createTodo(input: TodoInput!): Todo\n  updateTodo(id: ID!, input: TodoInput!): Todo\n  removeTodo(id: ID!): Todo\n}<\/code><\/pre>\n<p>Je merkte waarschijnlijk al op dat we <code>-input<\/code> types gebruiken voor de mutaties, zoals <code><code>UserInput<\/code>, <code>TodoInput<\/code><\/code> . Het is altijd een best practice om altijd Input types te defini\u00ebren bij het maken en updaten van je resources.<\/p>\n<p>Je kunt de invoertypes defini\u00ebren zoals hieronder:<\/p>\n<pre><code class=\"language-json\">input UserInput {\n  firstname: String!\n  lastname: String\n  email: String!\n  username: String!\n}<\/code><\/pre>\n<h3>Resolvers<\/h3>\n<p>Resolvers vertellen GraphQL wat er moet gebeuren bij het opvragen van een query of mutatie. Het is een basisfunctie die het zware werk doet om de databaselaag aan te spreken om de CRUD (create, read, update, delete) operaties uit te voeren, een intern RESTful API endpoint aan te spreken, of een <a href=\"https:\/\/kinsta.com\/nl\/blog\/microservices-versus-api\/\">microservice<\/a> te callen om het verzoek van de client te vervullen.<\/p>\n<p>Je kunt een nieuw <strong>resolvers.js<\/strong> bestand maken en de volgende code toevoegen:<\/p>\n<pre><code class=\"language-js\">import sequelize from '..\/models';\nexport default function resolvers () {\n  const models = sequelize.models;\n  return {\n    \/\/ Resolvers for Queries\n    RootQuery: {\n      user (root, { id }, context) {\n        return models.User.findById(id, context);\n      },\n      users (root, args, context) {\n        return models.User.findAll({}, context);\n      }\n    },\n    User: {\n      todos (user) {\n        return user.getTodos();\n      }\n    },\n  }\n  \/\/ Resolvers for Mutations\n  RootMutation: {\n    createUser (root, { input }, context) {\n      return models.User.create(input, context);    \n    },\n    updateUser (root, { id, input }, context) {\n      return models.User.update(input, { ...context, where: { id } });\n    },\n    removeUser (root, { id }, context) {\n      return models.User.destroy(input, { ...context, where: { id } });\n    },\n    \/\/ ... Resolvers for Todos go here\n  }\n}<\/code><\/pre>\n<h3>Schema<\/h3>\n<p>GraphQL schema is wat GraphQL blootstelt aan de wereld. Daarom zullen de types, query&#8217;s en mutaties in het schema worden opgenomen om aan de wereld te worden blootgesteld.<\/p>\n<p>Hieronder staat hoe je types, queries en mutaties aan de wereld blootstelt:<\/p>\n<pre><code class=\"language-json\">schema {\n  query: RootQuery\n  mutation: RootMutation\n}<\/code><\/pre>\n<p>In het bovenstaande script hebben we de eerder gemaakte <code>RootQuery<\/code> en <code>RootMutation<\/code> opgenomen om te exposen.<\/p>\n<h2>Hoe werkt GraphQL met Node.js en Express.js?<\/h2>\n<p>GraphQL biedt een implementatie voor alle grote programmeertalen, en Node.js is daar niet van uitgezonderd. Op de <a href=\"https:\/\/graphql.org\/\">offici\u00eble GraphQL website<\/a> is er een sectie voor <a href=\"https:\/\/graphql.org\/code\/#javascript\">ondersteuning van JavaScript<\/a>, en ook zijn er andere implementaties van GraphQL om het schrijven en coderen eenvoudig te maken.<\/p>\n<p>GraphQL Apollo biedt een implementatie voor Node.js en Express.js en maakt het eenvoudig om met GraphQL aan de slag te gaan.<\/p>\n<p>In de volgende paragraaf leer je hoe je je eerste GraphQL applicatie in Node.js en <a href=\"https:\/\/kinsta.com\/blog\/what-is-express-js\/\">Express.js<\/a> backend framework kunt maken en ontwikkelen met GraphQL Apollo..<\/p>\n<h2>GraphQL opzetten met Express.js<\/h2>\n<p>Het bouwen van een GraphQL API server met Express.js is eenvoudig om mee te beginnen. In deze sectie zullen we onderzoeken hoe je een GraphQL server bouwt.<\/p>\n<h3>Project initialiseren met Express<\/h3>\n<p>Eerst moet je een nieuw Express.js project installeren en opzetten. Maak een map aan voor je project en installeer Express.js met dit commando:<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt; && npm init -y\nnpm install express<\/code><\/pre>\n<p>Bovenstaand commando maakt een nieuw <strong>package.json<\/strong> bestand aan en installeert de Express.js bibliotheek in je project.<\/p>\n<p>Vervolgens gaan we ons project structureren zoals in de afbeelding hieronder. Het zal verschillende modules bevatten voor de functies van het project, zoals gebruikers, todo&#8217;s, enz.<\/p>\n<figure style=\"width: 467px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/graphql-todo-structrue.png\" alt=\"Een lijst met bestanden in graphql-todo.\" width=\"467\" height=\"595\"><figcaption class=\"wp-caption-text\">Bestanden voor <em>graphql-todo<\/em>.<\/figcaption><\/figure>\n<h3>GraphQL initialiseren<\/h3>\n<p>Laten we beginnen met het installeren van de GraphQL Express.js dependencies. Voer het volgende commando uit om te installeren:<\/p>\n<pre><code class=\"language-bash\">npm install apollo-server-express graphql @graphql-tools\/schema --save<\/code><\/pre>\n<h3>Schema&#8217;s en types aanmaken<\/h3>\n<p>Vervolgens maken we een bestand <strong>index.js<\/strong> aan in de map modules en voegen we het volgende stukje code toe:<\/p>\n<pre><code class=\"language-js\">const { gql } = require('apollo-server-express');\nconst users = require('.\/users');\nconst todos = require('.\/todos');\nconst { GraphQLScalarType } = require('graphql');\nconst { makeExecutableSchema } = require('@graphql-tools\/schema');\nconst typeDefs = gql`\n  scalar Time\n  type Query {\n    getVersion: String!\n  }\n  type Mutation {\n    version: String!\n  }\n`;\nconst timeScalar = new GraphQLScalarType({\n  name: 'Time',\n  description: 'Time custom scalar type',\n serialize: (value) =&gt; value,\n});\nconst resolvers = {\n  Time: timeScalar,\n  Query: {\n    getVersion: () =&gt; `v1`,\n  },\n};\nconst schema = makeExecutableSchema({\n  typeDefs: [typeDefs, users.typeDefs, todos.typeDefs],\n  resolvers: [resolvers, users.resolvers, todos.resolvers],\n});\nmodule.exports = schema;<\/code><\/pre>\n<h4>Uitleg code<\/h4>\n<p>Laten we het codefragment doornemen en bij langsgaan:<\/p>\n<h5>Stap 1<\/h5>\n<p>Eerst hebben we de vereiste bibliotheken ge\u00efmporteerd en standaard query- en mutatietypen aangemaakt. De query en mutatie stellen voorlopig alleen de versie van de GraphQL API in. We zullen de query en mutatie echter uitbreiden met andere schema&#8217;s als we verder gaan.<\/p>\n<figure style=\"width: 1266px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-1.png\" alt=\"Een opdrachtregelinterface met de \"const\" code voor het importeren van GraphQL en andere extensies.\" width=\"1266\" height=\"904\"><figcaption class=\"wp-caption-text\">Het importeren van GraphQL en extensies.<\/figcaption><\/figure>\n<h5>Stap 2:<\/h5>\n<p>Vervolgens maakten we een nieuw scalar type voor de tijd en onze eerste resolver voor de hierboven gemaakte query en mutatie. Daarnaast hebben we ook een schema gegenereerd met de functie <code>makeExecutableSchema<\/code>.<\/p>\n<p>Het gegenereerde schema bevat alle andere schema&#8217;s die we importeerden en zal er ook meer bevatten naarmate we ze aanmaken en importeren.<\/p>\n<figure style=\"width: 1166px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-2.png\" alt=\"Een opdrachtregelinterface met de const code voor het maken van ons scalar type en onze eerste resolver.\" width=\"1166\" height=\"1012\"><figcaption class=\"wp-caption-text\">Het aanmaken van een scalar type voor tijd en onze eerste resolver.<\/figcaption><\/figure>\n<p>Het bovenstaande codefragment laat zien dat we verschillende schema&#8217;s hebben ge\u00efmporteerd in de makeExecutableSchema functie. Deze aanpak helpt ons bij het structureren van de applicatie met het oog op complexiteit. Vervolgens gaan we de ge\u00efmporteerde Todo en User schema&#8217;s aanmaken.<\/p>\n<h3>Todo schema maken<\/h3>\n<p>Het Todo schema toont eenvoudige CRUD operaties die gebruikers van de applicatie kunnen uitvoeren. Hieronder staat het schema dat de Todo CRUD operatie implementeert.<\/p>\n<pre><code class=\"language-js\">const { gql } = require('apollo-server-express');\nconst createTodo = require('.\/mutations\/create-todo');\nconst updateTodo = require('.\/mutations\/update-todo');\nconst removeTodo = require('.\/mutations\/delete-todo');\nconst todo = require('.\/queries\/todo');\nconst todos = require('.\/queries\/todos');\nconst typeDefs = gql`\n  type Todo {\n    id: ID!\n    title: String\n    description: String\n    user: User\n  }\n  input CreateTodoInput {\n    title: String!\n    description: String\n    isCompleted: Boolean\n  }\n  input UpdateTodoInput {\n    title: String\n    description: String\n    isCompleted: Boolean\n  }  extend type Query {\n    todo(id: ID): Todo!\n    todos: [Todo!]\n  }\n  extend type Mutation {\n    createTodo(input: CreateTodoInput!): Todo\n    updateTodo(id: ID!, input: UpdateTodoInput!): Todo\n    removeTodo(id: ID!): Todo\n  }\n`;\n\/\/ Provide resolver functions for your schema fields\nconst resolvers = {\n  \/\/ Resolvers for Queries\n  Query: {\n    todo,\n    todos,\n  },\n  \/\/ Resolvers for Mutations\n  Mutation: {\n    createTodo,\n    updateTodo,\n    removeTodo,\n  },\n};\nmodule.exports = { typeDefs, resolvers };<\/code><\/pre>\n<h4>Uitleg code<\/h4>\n<p>Laten we het codefragment doornemen:<\/p>\n<h5>Stap 1:<\/h5>\n<p>Eerst hebben we een schema gemaakt voor onze Todo met GraphQL <code>type<\/code>, <code>input<\/code>, en <code>extend<\/code>. Het keyword <code>extend<\/code> wordt gebruikt om nieuwe query&#8217;s en mutaties te inheriten en toe te voegen aan de bestaande hoofdquery en mutatie die we hierboven hebben gemaakt.<\/p>\n<figure style=\"width: 1092px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-3.png\" alt=\"Een opdrachtregelinterface met het schema voor ons Todo-script, inclusief nieuwe invoer.\" width=\"1092\" height=\"1408\"><figcaption class=\"wp-caption-text\">Het maken van het schema voor onze Todo.<\/figcaption><\/figure>\n<h5>Stap 2:<\/h5>\n<p>Vervolgens hebben we een resolver gemaakt, die wordt gebruikt om de juiste gegevens op te halen als een bepaalde query of mutatie wordt gecalld.<\/p>\n<figure style=\"width: 1092px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0.png\" alt=\"Een opdrachtregelinterface met de code om een resolver voor onze Todo te maken.\" width=\"1092\" height=\"904\"><figcaption class=\"wp-caption-text\">Een resolver maken.<\/figcaption><\/figure>\n<p>Met de nu ingestelde resolverfunctie kunnen we individuele methoden maken voor de bedrijfslogica en database-manipulatie, zoals te zien is in het <strong>create-todo.js<\/strong> voorbeeld.<\/p>\n<p>Maak een bestand <strong>create-user.js<\/strong> in de map <code>.\/mutations<\/code> en voeg de bedrijfslogica toe om een nieuwe Todo in je database aan te maken.<\/p>\n<pre><code class=\"language-js\">const models = require('..\/..\/..\/models');\nmodule.exports = async (root, { input }, context) =&gt; {\n  return models.todos.push({ ...input });\n};<\/code><\/pre>\n<p>Het bovenstaande codefragment is een vereenvoudigde manier om een nieuwe Todo in onze database aan te maken met behulp van de Sequelize ORM. Je kunt meer leren over <a href=\"https:\/\/sequelize.org\/\">Sequelize en hoe je het instelt met Node.js<\/a>.<\/p>\n<p>Je kunt dezelfde stap volgen om vele schema&#8217;s te maken, afhankelijk van je applicatie, of je kunt <a href=\"https:\/\/github.com\/Kaperskyguru\/graphql-todo-example\">het complete project klonen van GitHub<\/a>.<\/p>\n<p>Vervolgens gaan we de server opzetten met Express.js en de nieuw gemaakte Todo applicatie draaien met GraphQL en Node.js.<\/p>\n<h3>Instellen en draaien van de server<\/h3>\n<p>Tot slot gaan we onze server opzetten met de <code>apollo-server-express<\/code> bibliotheek die we eerder installeerden en configureren.<\/p>\n<p>De <code>apollo-server-express<\/code> is een eenvoudige wrapper van Apollo Server voor Express.js, hij wordt aanbevolen omdat hij ontwikkeld is om in Express.js development te passen.<\/p>\n<p>Laten we met behulp van de voorbeelden die we hierboven hebben besproken, de Express.js server configureren om te werken met de nieuw ge\u00efnstalleerde <code>apollo-server-express<\/code>.<\/p>\n<p>Maak een <strong>server.js<\/strong> bestand in de hoofdmap en plak er de volgende code in:<\/p>\n<pre><code class=\"language-js\">\nconst express = require('express');\nconst { ApolloServer } = require('apollo-server-express');\nconst schema = require('.\/modules');\nconst app = express();\nasync function startServer() {\n  const server = new ApolloServer({ schema });\n  await server.start();\n  server.applyMiddleware({ app });\n}\nstartServer();\napp.listen({ port: 3000 }, () =&gt;\n  console.log(`Server ready at http:\/\/localhost:3000`)\n);<\/code><\/pre>\n<p>In bovenstaande code heb je met succes je eerste CRUD GraphQL server voor Todo&#8217;s en Gebruikers gemaakt. Je kunt je ontwikkelingsserver starten en je testproject openen met <a href=\"http:\/\/localhost:300\/graphql\">http:\/\/localhost:3000\/graphql<\/a>. Als alles gelukt is, zou je onderstaand scherm moeten krijgen:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/12\/new_graphql_playground.png\" alt=\"Een ontwikkelingsinterface die een eenvoudige query als respons toont.\" width=\"1600\" height=\"1116\"><figcaption class=\"wp-caption-text\">Het verificatiescherm.<\/figcaption><\/figure>\n<h2>Samenvatting<\/h2>\n<p>GraphQL is een door Facebook ondersteunde moderne technologie die het vervelende werk vereenvoudigt van het maken van grootschalige API&#8217;s met RESTful architectuurpatronen.<\/p>\n<p>In deze gids hebben we je meer verteld over GraphQL en laten zien hoe je je eerste GraphQL API kunt ontwikkelen met Express.js.<\/p>\n<p>Laat ons weten wat jij aan het bouwen bent met GraphQL in onderstaande comments.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GraphQL is trending binnen de wereld van API ontwikkeling. Hoewel RESTful API&#8217;s nog steeds de meest populaire manier blijven om data van applicaties bloot te stellen &#8230;<\/p>\n","protected":false},"author":193,"featured_media":48914,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[848,860],"class_list":["post-48913","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-javascript-tutorials","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GraphQL API&#039;s bouwen met Node - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GraphQL API&#039;s bouwen met Node\" \/>\n<meta property=\"og:description\" content=\"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T11:55:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-09T08:34:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Solomon Eseme\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"GraphQL API&#8217;s bouwen met Node\",\"datePublished\":\"2023-01-02T11:55:03+00:00\",\"dateModified\":\"2023-06-09T08:34:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\"},\"wordCount\":1559,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\",\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\",\"name\":\"GraphQL API's bouwen met Node - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\",\"datePublished\":\"2023-01-02T11:55:03+00:00\",\"dateModified\":\"2023-06-09T08:34:07+00:00\",\"description\":\"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GraphQL API&#8217;s bouwen met Node\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g\",\"caption\":\"Solomon Eseme\"},\"description\":\"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me\",\"sameAs\":[\"https:\/\/masteringbackend.com\",\"https:\/\/linkedin.com\/in\/solomoneseme\",\"https:\/\/x.com\/kaperskyguru\"],\"url\":\"https:\/\/kinsta.com\/nl\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GraphQL API's bouwen met Node - Kinsta\u00ae","description":"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/","og_locale":"nl_NL","og_type":"article","og_title":"GraphQL API's bouwen met Node","og_description":"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.","og_url":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2023-01-02T11:55:03+00:00","article_modified_time":"2023-06-09T08:34:07+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","type":"image\/png"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","twitter_creator":"@kaperskyguru","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Solomon Eseme","Geschatte leestijd":"11 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"GraphQL API&#8217;s bouwen met Node","datePublished":"2023-01-02T11:55:03+00:00","dateModified":"2023-06-09T08:34:07+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/"},"wordCount":1559,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/","url":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/","name":"GraphQL API's bouwen met Node - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","datePublished":"2023-01-02T11:55:03+00:00","dateModified":"2023-06-09T08:34:07+00:00","description":"Benieuwd hoe je GraphQL gebruikt met Node.js? We zullen je hier door het hele proces leiden met codevoorbeelden en gemakkelijk te begrijpen uitleg.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/01\/graphql-nodejs.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/graphql-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/node-js\/"},{"@type":"ListItem","position":3,"name":"GraphQL API&#8217;s bouwen met Node"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1c701993f8ff8c8df2a4c5664834a4e5?s=96&d=mm&r=g","caption":"Solomon Eseme"},"description":"I am a Software Engineer and Content Creator who is geared toward building high-performing and innovative products following best practices and industry standards. I also love writing about it at Masteringbackend.com. Follow me on Twitter, LinkedIn, and About Me","sameAs":["https:\/\/masteringbackend.com","https:\/\/linkedin.com\/in\/solomoneseme","https:\/\/x.com\/kaperskyguru"],"url":"https:\/\/kinsta.com\/nl\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/48913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=48913"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/48913\/revisions"}],"predecessor-version":[{"id":49244,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/48913\/revisions\/49244"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/translations\/dk"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/48913\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/48914"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=48913"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=48913"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=48913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}