{"id":57361,"date":"2023-01-02T12:51:16","date_gmt":"2023-01-02T11:51:16","guid":{"rendered":"https:\/\/kinqsta.com\/de\/?p=57361&#038;preview=true&#038;preview_id=57361"},"modified":"2023-07-27T11:08:20","modified_gmt":"2023-07-27T10:08:20","slug":"graphql-nodejs","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/","title":{"rendered":"Aufbau von GraphQL APIs mit Node"},"content":{"rendered":"<p>GraphQL ist das neue Modewort in der API-Entwicklung. RESTful-APIs sind zwar nach wie vor der beliebteste Weg, um Daten aus Anwendungen zu ver\u00f6ffentlichen, aber sie haben viele Einschr\u00e4nkungen, die mit GraphQL gel\u00f6st werden sollen.<\/p>\n<p>GraphQL ist eine von Facebook entwickelte Abfragesprache, die 2015 in ein Open-Source-Projekt umgewandelt wurde. Sie bietet eine intuitive und flexible Syntax f\u00fcr die Beschreibung von und den Zugriff auf Daten in einer API.<\/p>\n\n<p>In diesem Leitfaden erf\u00e4hrst du, wie du ein GraphQL-<a href=\"https:\/\/kinqsta.com\/de\/blog\/so-installierst-du-node-js\/\">Node.js-Projekt<\/a> erstellen kannst. Wir werden GraphQL verwenden, um eine Todo-Anwendung im <a href=\"https:\/\/kinqsta.com\/de\/blog\/was-ist-express-js\/\">Express.js Web-Framework<\/a> f\u00fcr Node zu erstellen.<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Was ist GraphQL?<\/h2>\n<p>Aus der <a href=\"https:\/\/graphql.org\/\">offiziellen Dokumentation<\/a>: &#8222;GraphQL ist eine Abfragesprache f\u00fcr APIs und eine Laufzeitumgebung, um diese Abfragen mit deinen vorhandenen Daten zu erf\u00fcllen. GraphQL liefert eine vollst\u00e4ndige und verst\u00e4ndliche Beschreibung der Daten in deiner API, gibt den Kunden die M\u00f6glichkeit, genau das abzufragen, was sie brauchen, und nicht mehr, erleichtert die Weiterentwicklung von APIs im Laufe der Zeit und erm\u00f6glicht leistungsstarke Entwicklerwerkzeuge.&#8220;<\/p>\n<p>GraphQL ist eine serverseitige Laufzeitumgebung f\u00fcr die Ausf\u00fchrung von Abfragen unter Verwendung des Typsystems, das du f\u00fcr deine Daten definiert hast. Au\u00dferdem ist GraphQL nicht an eine bestimmte Datenbank oder Speicher-Engine gebunden. Stattdessen wird es von deinem bestehenden Code und Datenspeicher unterst\u00fctzt. Einen detaillierten Vergleich dieser Technologien findest du in der <a href=\"https:\/\/kinqsta.com\/de\/blog\/graphql-vs-rest\/\">Anleitung GraphQL vs. RESTful API<\/a>.<\/p>\n<p>Um einen GraphQL-Dienst zu erstellen, definierst du zun\u00e4chst Schematypen und erstellst Felder, die diese Typen verwenden. Als N\u00e4chstes stellst du einen Funktionsresolver bereit, der f\u00fcr jedes Feld und jeden Typ ausgef\u00fchrt wird, wenn Daten von der Client-Seite angefordert werden.<\/p>\n<h2>GraphQL-Terminologie<\/h2>\n<p>Das GraphQL-Typensystem wird verwendet, um zu beschreiben, welche Daten abgefragt werden k\u00f6nnen und welche Daten du manipulieren kannst. Es ist der Kern von GraphQL. Im Folgenden werden die verschiedenen M\u00f6glichkeiten zur Beschreibung und Manipulation von Daten in GraphQL erl\u00e4utert.<\/p>\n<h3>Objekttypen<\/h3>\n<p>GraphQL-Objekttypen sind Datenmodelle, die stark typisierte Felder enthalten. Es sollte eine 1:1-Zuordnung zwischen deinen Modellen und GraphQL-Typen geben. Unten findest du ein Beispiel f\u00fcr einen GraphQL-Typ:<\/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>Abfragen<\/h3>\n<p>GraphQL Query definiert alle Abfragen, die ein Client \u00fcber die GraphQL API ausf\u00fchren kann. Du solltest eine <code>RootQuery<\/code> definieren, die per Konvention alle bestehenden Abfragen enth\u00e4lt.<\/p>\n<p>Im Folgenden definieren wir die Abfragen und ordnen sie der entsprechenden RESTful-API zu:<\/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>Mutationen<\/h3>\n<p>Wenn GraphQL-Abfragen <code>GET<\/code> Anfragen sind, sind Mutationen <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> und <code>DELETE<\/code> Anfragen, die die GraphQL-API manipulieren.<\/p>\n<p>Zur Veranschaulichung f\u00fcgen wir alle Mutationen in eine einzige <code>RootMutation<\/code> ein:<\/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>Sie haben die Verwendung von <code>-input<\/code>-Typen f\u00fcr die Mutationen bemerkt, wie z.B. <code>UserInput<\/code>, <code>TodoInput<\/code>. Es ist immer die beste Praxis, Input-Typen f\u00fcr das Erstellen und Aktualisieren deiner Ressourcen zu definieren.<\/p>\n<p>Du kannst die Eingabearten wie die folgende definieren:<\/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>Resolver<\/h3>\n<p>Resolver sagen GraphQL, was zu tun ist, wenn eine Abfrage oder Mutation angefordert wird. Es handelt sich um eine grundlegende Funktion, die die harte Arbeit erledigt, indem sie die Datenbankschicht anspricht, um die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, L\u00f6schen) auszuf\u00fchren, einen internen RESTful API-Endpunkt anspricht oder einen <a href=\"https:\/\/kinqsta.com\/de\/blog\/microservices-vs-api\/\">Microservice<\/a> aufruft, um die Anfrage des Kunden zu erf\u00fcllen.<\/p>\n<p>Du kannst eine neue <strong>resolvers.js<\/strong>-Datei erstellen und den folgenden Code einf\u00fcgen:<\/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>Das GraphQL-Schema ist das, was GraphQL der Welt offenbart. Deshalb werden die Typen, Abfragen und Mutationen in das Schema aufgenommen, um der Welt offenbart zu werden.<\/p>\n<p>Im Folgenden wird beschrieben, wie du Typen, Abfragen und Mutationen der Welt zug\u00e4nglich machst:<\/p>\n<pre><code class=\"language-json\">schema {\n  query: RootQuery\n  mutation: RootMutation\n}<\/code><\/pre>\n<p>Im obigen Skript haben wir <code>RootQuery<\/code> und <code>RootMutation<\/code>, die wir zuvor erstellt haben, f\u00fcr die Welt zug\u00e4nglich gemacht.<\/p>\n<h2>Wie funktioniert GraphQL mit Node.js und Express.js?<\/h2>\n<p>GraphQL bietet eine Implementierung f\u00fcr alle wichtigen Programmiersprachen, auch Node.js ist davon nicht ausgenommen. Auf der <a href=\"https:\/\/graphql.org\/\">offiziellen GraphQL-Website<\/a> gibt es einen Abschnitt f\u00fcr die <a href=\"https:\/\/graphql.org\/code\/#javascript\">Unterst\u00fctzung von JavaScript<\/a>, und es gibt auch andere Implementierungen von GraphQL, die das Schreiben und Kodieren erleichtern.<\/p>\n<p>GraphQL Apollo bietet eine Implementierung f\u00fcr Node.js und Express.js und macht den Einstieg in GraphQL leicht.<\/p>\n<p>Im n\u00e4chsten Abschnitt erf\u00e4hrst du, wie du deine erste GraphQL-Anwendung in Node.js und dem Backend-Framework <a href=\"https:\/\/kinqsta.com\/de\/blog\/was-ist-express-js\/\">Express.js<\/a> mit GraphQL Apollo erstellst und entwickelst.<\/p>\n<h2>Einrichten von GraphQL mit Express.js<\/h2>\n<p>Der Aufbau eines GraphQL-API-Servers mit Express.js ist ein einfacher Einstieg. In diesem Abschnitt erfahren wir, wie man einen GraphQL-Server aufbaut.<\/p>\n<h3>Projekt mit Express initialisieren<\/h3>\n<p>Zuerst musst du ein neues Express.js Projekt installieren und einrichten. Erstelle einen Ordner f\u00fcr dein Projekt und installiere Express.js mit diesem Befehl:<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt; && npm init -y\nnpm install express<\/code><\/pre>\n<p>Der obige Befehl erstellt eine neue <strong>package.json<\/strong>-Datei und installiert die Express.js-Bibliothek in deinem Projekt.<\/p>\n<p>Als N\u00e4chstes strukturieren wir unser Projekt wie in der Abbildung unten gezeigt. Es wird verschiedene Module f\u00fcr die Funktionen des Projekts enthalten, wie z. B. Benutzer, ToDos usw.<\/p>\n<figure style=\"width: 467px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/graphql-todo-structrue.png\" alt=\"Eine Liste der Dateien in graphql-todo\" width=\"467\" height=\"595\"><figcaption class=\"wp-caption-text\">Dateien f\u00fcr <em>graphql-todo<\/em><\/figcaption><\/figure>\n<h3>GraphQL initialisieren<\/h3>\n<p>Beginnen wir mit der Installation der GraphQL Express.js-Abh\u00e4ngigkeiten. F\u00fchre den folgenden Befehl aus, um sie zu installieren:<\/p>\n<pre><code class=\"language-bash\">npm install apollo-server-express graphql @graphql-tools\/schema --save<\/code><\/pre>\n<h3>Schemas und Typen erstellen<\/h3>\n<p>Als N\u00e4chstes erstellen wir eine <strong>index.js<\/strong>-Datei im modules-Ordner und f\u00fcgen den folgenden Codeschnipsel hinzu:<\/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>Code-Walkthrough<\/h4>\n<p>Gehen wir den Codeschnipsel durch und schl\u00fcsseln ihn auf:<\/p>\n<h5>Schritt 1<\/h5>\n<p>Zuerst haben wir die erforderlichen Bibliotheken importiert und Standardabfrage- und Mutationstypen erstellt. Die Abfrage und die Mutation legen vorerst nur die Version der GraphQL API fest. Im weiteren Verlauf werden wir die Abfrage und die Mutation jedoch erweitern, um andere Schemata einzubeziehen.<\/p>\n<figure style=\"width: 1266px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-1.png\" alt=\"Eine Kommandozeilenschnittstelle, die den \"const\"-Code f\u00fcr den Import von GraphQL und anderen Erweiterungen zeigt\" width=\"1266\" height=\"904\"><figcaption class=\"wp-caption-text\">GraphQL und Erweiterungen importieren<\/figcaption><\/figure>\n<h5>Schritt 2:<\/h5>\n<p>Dann haben wir einen neuen skalaren Typ f\u00fcr Zeit und unseren ersten Resolver f\u00fcr die oben erstellte Abfrage und Mutation erstellt. Au\u00dferdem haben wir mit der Funktion <code>makeExecutableSchema<\/code>\u00a0ein Schema erstellt.<\/p>\n<p>Das generierte Schema enth\u00e4lt alle anderen Schemata, die wir importiert haben, und wird auch weitere enthalten, wenn wir sie erstellen und importieren.<\/p>\n<figure style=\"width: 1166px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-2.png\" alt=\"Eine Kommandozeilenschnittstelle, die den \"const\"-Code f\u00fcr die Erstellung unseres skalaren Typs und unseres ersten Resolvers zeigt\" width=\"1166\" height=\"1012\"><figcaption class=\"wp-caption-text\">Wir erstellen einen skalaren Typ f\u00fcr die Zeit und unseren ersten Resolver<\/figcaption><\/figure>\n<p>Der obige Codeschnipsel zeigt, dass wir verschiedene Schemata in die Funktion makeExecutableSchema importiert haben. Dieser Ansatz hilft uns dabei, die Anwendung komplexer zu gestalten. Als N\u00e4chstes erstellen wir die Schemata Todo und User, die wir importiert haben.<\/p>\n<h3>Todo-Schema erstellen<\/h3>\n<p>Das Todo-Schema zeigt einfache CRUD-Operationen, die die Benutzer der Anwendung durchf\u00fchren k\u00f6nnen. Im Folgenden siehst du das Schema, das die Todo-CRUD-Operation implementiert.<\/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>Code-Walkthrough<\/h4>\n<p>Gehen wir das Codeschnipsel durch und schl\u00fcsseln es auf:<\/p>\n<h5>Schritt 1:<\/h5>\n<p>Zuerst haben wir ein Schema f\u00fcr unser Todo mit GraphQL <code>type<\/code>, <code>input<\/code> und <code>extend<\/code> erstellt. Das Schl\u00fcsselwort <code>extend<\/code> wird verwendet, um neue Abfragen und Mutationen an die bestehende Stammabfrage und Mutation, die wir oben erstellt haben, zu vererben und hinzuzuf\u00fcgen.<\/p>\n<figure style=\"width: 1092px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0-3.png\" alt=\"Eine Kommandozeilenschnittstelle, die das Schema f\u00fcr unser Todo-Skript zeigt, einschlie\u00dflich neuer Eingaben\" width=\"1092\" height=\"1408\"><figcaption class=\"wp-caption-text\">Erstellen des Schemas f\u00fcr unseren Todo<\/figcaption><\/figure>\n<h5>Schritt 2:<\/h5>\n<p>Als N\u00e4chstes haben wir einen Resolver erstellt, mit dem wir die richtigen Daten abrufen, wenn eine bestimmte Abfrage oder Mutation aufgerufen wird.<\/p>\n<figure style=\"width: 1092px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/pasted-image-0.png\" alt=\"A command line interface showing the code to create a resolver for our Todo.\" width=\"1092\" height=\"904\"><figcaption class=\"wp-caption-text\">Einen Resolver erstellen.<\/figcaption><\/figure>\n<p>Mit der Resolver-Funktion k\u00f6nnen wir einzelne Methoden f\u00fcr die Gesch\u00e4ftslogik und die Datenbankmanipulation erstellen, wie im Beispiel <strong>create-todo.js<\/strong> gezeigt.<\/p>\n<p>Erstelle eine Datei <strong>create-user.js<\/strong> im Ordner <code>.\/mutations\/<\/code> und f\u00fcge die Gesch\u00e4ftslogik hinzu, um ein neues Todo in deiner Datenbank zu erstellen.<\/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>Das obige Codeschnipsel ist eine vereinfachte Art, ein neues Todo in unserer Datenbank mit dem Sequelize ORM zu erstellen. Du kannst hier mehr \u00fcber <a href=\"https:\/\/sequelize.org\/\">Sequelize erfahren und wie du es mit Node.js<\/a> einrichtest.<\/p>\n<p>Du kannst denselben Schritt befolgen, um je nach deiner Anwendung mehrere Schemata zu erstellen, oder du kannst <a href=\"https:\/\/github.com\/Kaperskyguru\/graphql-todo-example\">das komplette Projekt von GitHub klonen<\/a>.<\/p>\n<p>Als N\u00e4chstes werden wir den Server mit Express.js einrichten und die neu erstellte Todo-Anwendung mit GraphQL und Node.js ausf\u00fchren.<\/p>\n<h3>Einrichten und Ausf\u00fchren des Servers<\/h3>\n<p>Zum Schluss richten wir unseren Server mit der <code>apollo-server-express<\/code> Bibliothek ein, die wir zuvor installiert haben, und konfigurieren ihn.<\/p>\n<p><code>apollo-server-express<\/code> ist ein einfacher Wrapper von Apollo Server f\u00fcr Express.js. Er wird empfohlen, weil er f\u00fcr die Entwicklung von Express.js entwickelt wurde.<\/p>\n<p>Anhand der Beispiele, die wir oben besprochen haben, konfigurieren wir den Express.js-Server so, dass er mit dem neu installierten <code>apollo-server-express<\/code> funktioniert.<\/p>\n<p>Erstelle eine <strong>server.js<\/strong>-Datei im Stammverzeichnis und f\u00fcge den folgenden Code ein:<\/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>Mit dem obigen Code hast du erfolgreich deinen ersten CRUD-GraphQL-Server f\u00fcr Todos und Benutzer erstellt. Du kannst deinen Entwicklungsserver starten und mit <a href=\"http:\/\/localhost:300\/graphql\">http:\/\/localhost:3000\/graphql<\/a> auf den Playground zugreifen. Wenn alles erfolgreich war, solltest du den unten stehenden Bildschirm sehen:<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/12\/new_graphql_playground.png\" alt=\"Eine Entwicklungsschnittstelle, die eine einfache Abfrage als Antwort zeigt\" width=\"1600\" height=\"1116\"><figcaption class=\"wp-caption-text\">Der Verifizierungsbildschirm<\/figcaption><\/figure>\n<h2>Zusammenfassung<\/h2>\n<p>GraphQL ist eine moderne, von Facebook unterst\u00fctzte Technologie, die dir die m\u00fchsame Arbeit bei der Erstellung gro\u00dfer APIs mit RESTful-Architekturmustern abnehmen kann.<\/p>\n<p>Dieser Leitfaden erl\u00e4utert GraphQL und zeigt dir, wie du deine erste GraphQL-API mit Express.js entwickelst.<\/p>\n<p>Lass uns in den Kommentaren unten wissen, was du mit GraphQL entwickelst.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GraphQL ist das neue Modewort in der API-Entwicklung. RESTful-APIs sind zwar nach wie vor der beliebteste Weg, um Daten aus Anwendungen zu ver\u00f6ffentlichen, aber sie haben &#8230;<\/p>\n","protected":false},"author":193,"featured_media":57362,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[952,965],"class_list":["post-57361","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>Aufbau von GraphQL APIs mit Node<\/title>\n<meta name=\"description\" content=\"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aufbau von GraphQL APIs mit Node\" \/>\n<meta property=\"og:description\" content=\"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T11:51:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T10:08:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/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=\"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Aufbau von GraphQL APIs mit Node\",\"datePublished\":\"2023-01-02T11:51:16+00:00\",\"dateModified\":\"2023-07-27T10:08:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\"},\"wordCount\":1507,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\",\"url\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\",\"name\":\"Aufbau von GraphQL APIs mit Node\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png\",\"datePublished\":\"2023-01-02T11:51:16+00:00\",\"dateModified\":\"2023-07-27T10:08:20+00:00\",\"description\":\"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript-Tutorials\",\"item\":\"https:\/\/kinqsta.com\/de\/thema\/javascript-tutorials\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Aufbau von GraphQL APIs mit Node\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/de\/#website\",\"url\":\"https:\/\/kinqsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"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:\/\/kinqsta.com\/de\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/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:\/\/kinqsta.com\/de\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Aufbau von GraphQL APIs mit Node","description":"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.","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:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/","og_locale":"de_DE","og_type":"article","og_title":"Aufbau von GraphQL APIs mit Node","og_description":"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.","og_url":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-01-02T11:51:16+00:00","article_modified_time":"2023-07-27T10:08:20+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","type":"image\/png"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.","twitter_image":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","twitter_creator":"@kaperskyguru","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Solomon Eseme","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinqsta.com\/de\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Aufbau von GraphQL APIs mit Node","datePublished":"2023-01-02T11:51:16+00:00","dateModified":"2023-07-27T10:08:20+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/"},"wordCount":1507,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/","url":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/","name":"Aufbau von GraphQL APIs mit Node","isPartOf":{"@id":"https:\/\/kinqsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","datePublished":"2023-01-02T11:51:16+00:00","dateModified":"2023-07-27T10:08:20+00:00","description":"Bist du neugierig, wie du GraphQL mit Node.js nutzen kannst? Wir f\u00fchren dich hier mit Codebeispielen und leicht verst\u00e4ndlichen Erkl\u00e4rungen durch den gesamten Prozess.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#primaryimage","url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","contentUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/01\/graphql-nodejs.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/de\/blog\/graphql-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"JavaScript-Tutorials","item":"https:\/\/kinqsta.com\/de\/thema\/javascript-tutorials\/"},{"@type":"ListItem","position":3,"name":"Aufbau von GraphQL APIs mit Node"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/de\/#website","url":"https:\/\/kinqsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinqsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","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:\/\/kinqsta.com\/de\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/#\/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:\/\/kinqsta.com\/de\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/57361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/comments?post=57361"}],"version-history":[{"count":11,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/57361\/revisions"}],"predecessor-version":[{"id":57969,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/57361\/revisions\/57969"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/57361\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/media\/57362"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/media?parent=57361"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/tags?post=57361"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/topic?post=57361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}