{"id":63386,"date":"2023-01-02T12:54:36","date_gmt":"2023-01-02T11:54:36","guid":{"rendered":"https:\/\/kinqsta.com\/it\/?p=63386&#038;preview=true&#038;preview_id=63386"},"modified":"2023-02-15T14:00:43","modified_gmt":"2023-02-15T13:00:43","slug":"graphql-nodejs","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/","title":{"rendered":"Costruire API GraphQL con Node"},"content":{"rendered":"<p>GraphQL \u00e8 la nuova parola d&#8217;ordine nello sviluppo di API. Sebbene le API RESTful rimangano la soluzione pi\u00f9 popolare per esporre i dati delle applicazioni, presentano molti limiti che GraphQL si propone di risolvere.<\/p>\n<p>GraphQL \u00e8 un query language creato da Facebook e trasformato in un progetto open-source nel 2015. Offre una sintassi intuitiva e flessibile per descrivere e accedere ai dati di un&#8217;API.<\/p>\n\n<p>In questa guida scopriremo come creare un <a href=\"https:\/\/kinqsta.com\/it\/blog\/come-installare-node-js\/\">progetto GraphQL Node.js<\/a>. Utilizzeremo GraphQL per costruire un&#8217;applicazione Todo nel <a href=\"https:\/\/kinqsta.com\/it\/blog\/cos-e-express-js\/\">framework web Express.js<\/a> per 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>Cos&#8217;\u00e8 GraphQL?<\/h2>\n<p>Dalla <a href=\"https:\/\/graphql.org\/\">documentazione ufficiale<\/a>: &#8220;GraphQL \u00e8 un linguaggio di interrogazione per le API e un runtime per soddisfare tali interrogazioni con i dati esistenti. GraphQL fornisce una descrizione completa e comprensibile dei dati della vostra API, d\u00e0 ai clienti la possibilit\u00e0 di chiedere esattamente ci\u00f2 di cui hanno bisogno e nient&#8217;altro, rende pi\u00f9 facile l&#8217;evoluzione delle API nel tempo e rende disponibili potenti strumenti per gli sviluppatori&#8221;<\/p>\n<p>GraphQL \u00e8 un runtime lato server per l&#8217;esecuzione di query che utilizzano il sistema di tipi definito per i dati. Inoltre, GraphQL non \u00e8 legato ad alcun database o motore di archiviazione specifico. Al contrario, si appoggia al vostro codice e al vostro archivio dati esistente. Troverete un confronto dettagliato di queste tecnologie nella <a href=\"https:\/\/kinqsta.com\/it\/blog\/graphql-vs-rest\/\">guida GraphQL vs. API RESTful<\/a>.<\/p>\n<p>Per creare un servizio GraphQL, iniziate definendo i tipi di schema e creando i campi che utilizzano tali tipi. Poi fornite un function resolver da eseguire su ogni campo e tipo ogni volta che i dati vengono richiesti dal client.<\/p>\n<h2>La Terminologia di GraphQL<\/h2>\n<p>Il sistema di tipi di GraphQL viene utilizzato per descrivere quali dati possono essere interrogati e quali dati possono essere manipolati. \u00c8 il cuore di GraphQL. Vediamo quali sono i diversi modi in cui possiamo descrivere e manipolare i dati in GraphQL.<\/p>\n<h3>Tipi Oggetto<\/h3>\n<p>I tipi oggetto di GraphQL sono modelli di dati contenenti campi fortemente tipizzati. Dovrebbe esserci una mappatura 1 a 1 tra i modelli e i tipi di GraphQL. Di seguito \u00e8 riportato un esempio di tipo GraphQL:<\/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<\/h3>\n<p>GraphQL Query definisce tutte le query che un client pu\u00f2 eseguire sull&#8217;API di GraphQL. Per convenzione, occorre definire un sito <code>RootQuery<\/code> che conterr\u00e0 tutte le query esistenti.<\/p>\n<p>Di seguito definiamo e mappiamo le query alle corrispondenti API RESTful:<\/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>Mutazioni<\/h3>\n<p>Se le GraphQL Query sono richieste <code>GET<\/code>, le mutazioni sono richieste <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> e <code>DELETE<\/code> che manipolano le API di GraphQL.<\/p>\n<p>Mettiamo tutte le mutazioni in un unico <code>RootMutation<\/code>:<\/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>Avrete notato l&#8217;uso dei tipi <code>-input<\/code> per le mutazioni, come <code>UserInput<\/code> e <code>TodoInput<\/code>. \u00c8 una buona pratica definire sempre i tipi di input per la creazione e l&#8217;aggiornamento delle risorse.<\/p>\n<p>Potete definire i tipi di input come quello riportato di seguito:<\/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>I resolver indicano a GraphQL cosa fare quando viene richiesta una query o una mutazione. Si tratta di una funzione di base che si occupa di raggiungere il livello del database per eseguire le operazioni CRUD (create, read, update, delete), di raggiungere un endpoint API RESTful interno o di chiamare un <a href=\"https:\/\/kinqsta.com\/it\/blog\/microservizi-vs-api\/\">microservizio<\/a> per soddisfare la richiesta del client.<\/p>\n<p>Potete creare un nuovo file <strong>resolvers.js<\/strong> e aggiungere il seguente codice:<\/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>Lo schema GraphQL \u00e8 ci\u00f2 che GraphQL espone al mondo. Pertanto, i tipi, le query e le mutazioni saranno inclusi nello schema per essere esposti.<\/p>\n<p>Di seguito spieghiamo come esporre i tipi, le query e le mutazioni:<\/p>\n<pre><code class=\"language-json\">schema {\n  query: RootQuery\n  mutation: RootMutation\n}<\/code><\/pre>\n<p>Nello script precedente, abbiamo incluso i siti <code>RootQuery<\/code> e <code>RootMutation<\/code> creati in precedenza per esporli al mondo.<\/p>\n<h2>Come Funziona GraphQL con Node.js ed Express.js?<\/h2>\n<p>GraphQL offre un&#8217;implementazione per tutti i principali linguaggi di programmazione e Node.js non ne \u00e8 esente. Sul <a href=\"https:\/\/graphql.org\/\">sito ufficiale di GraphQL<\/a> c&#8217;\u00e8 una sezione dedicata al <a href=\"https:\/\/graphql.org\/code\/#javascript\">supporto di JavaScript<\/a> e ci sono anche altre implementazioni di GraphQL per semplificare la scrittura e la programmazione.<\/p>\n<p>GraphQL Apollo fornisce un&#8217;implementazione per Node.js ed Express.js e permette di iniziare a lavorare facilmente con GraphQL.<\/p>\n<p>Nella prossima sezione scoprirete come creare e sviluppare la vostra prima applicazione GraphQL con Node.js e il framework backend <a href=\"https:\/\/kinqsta.com\/it\/blog\/cos-e-express-js\/\">Express.js<\/a> utilizzando GraphQL Apollo.<\/p>\n<h2>Configurare GraphQL con Express.js<\/h2>\n<p>Creare un server per l&#8217;API di GraphQL con Express.js \u00e8 semplice. In questa sezione vedremo come costruire un server GraphQL.<\/p>\n<h3>Inizializzare il Progetto con Express<\/h3>\n<p>Per prima cosa, bisogna installare e configurare un nuovo progetto Express.js. Create una cartella per il vostro progetto e installate Express.js con questo comando:<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt; && npm init -y\nnpm install express<\/code><\/pre>\n<p>Il comando precedente crea un nuovo file <strong>package.json<\/strong> e installa la libreria Express.js nel progetto.<\/p>\n<p>Successivamente, struttureremo il nostro progetto come mostrato nell&#8217;immagine qui sotto. Conterr\u00e0 diversi moduli per le funzionalit\u00e0 del progetto, come gli utenti, i todos, ecc.<\/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=\"Un elenco di file in graphql-todo.\" width=\"467\" height=\"595\"><figcaption class=\"wp-caption-text\">I file del progetto <em>graphql-todo<\/em>.<\/figcaption><\/figure>\n<h3>Inizializzare GraphQL<\/h3>\n<p>Iniziamo installando le dipendenze Express.js di GraphQL con il seguente comando:<\/p>\n<pre><code class=\"language-bash\">npm install apollo-server-express graphql @graphql-tools\/schema --save<\/code><\/pre>\n<h3>Creare Schemi e Tipi<\/h3>\n<p>Successivamente, creeremo un file <strong>index.js<\/strong> all&#8217;interno della cartella modules e aggiungeremo il seguente frammento di codice:<\/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>Analisi del Codice<\/h4>\n<p>Scomponiamo il frammento di codice:<\/p>\n<h5>Passo 1<\/h5>\n<p>Per prima cosa, abbiamo importato le librerie necessarie e creato i tipi di query e di mutazione predefiniti. Per ora, la query e la mutazione impostano solo la versione dell&#8217;API GraphQL. Ma estenderemo la query e la mutazione in modo da includere altri schemi man mano che procediamo.<\/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=\"Interfaccia a riga di comando che mostra il codice \"const\" per importare GraphQL e altre estensioni.\" width=\"1266\" height=\"904\"><figcaption class=\"wp-caption-text\">Importare GraphQL e le estensioni.<\/figcaption><\/figure>\n<h5>Passo 2:<\/h5>\n<p>Abbiamo poi creato un nuovo tipo scalare per il tempo e il nostro primo resolver per la query e la mutazione create in precedenza. Inoltre, abbiamo generato uno schema utilizzando la funzione <code>makeExecutableSchema<\/code>.<\/p>\n<p>Lo schema generato include tutti gli altri schemi che abbiamo importato e ne includer\u00e0 altri quando li creeremo e importeremo.<\/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=\"Interfaccia a riga di comando che mostra il codice \"const\" per creare il nostro tipo scalare e il nostro primo resolver.\" width=\"1166\" height=\"1012\"><figcaption class=\"wp-caption-text\">Creiamo un tipo scalare per il tempo e il nostro primo resolver.<\/figcaption><\/figure>\n<p>Il frammento di codice precedente mostra che abbiamo importato diversi schemi nella funzione makeExecutableSchema. Questo approccio ci aiuta a strutturare l&#8217;applicazione per renderla pi\u00f9 complessa. Successivamente, creeremo gli schemi Todo e User che abbiamo importato.<\/p>\n<h3>Creare lo Schema Todo<\/h3>\n<p>Lo schema Todo mostra semplici operazioni CRUD che gli utenti dell&#8217;applicazione possono eseguire. Di seguito \u00e8 riportato lo schema che implementa le operazioni CRUD di Todo.<\/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>Codice<\/h4>\n<p>Analizziamo il frammento di codice e scomponiamolo:<\/p>\n<h5>Passo 1:<\/h5>\n<p>Per prima cosa, abbiamo creato uno schema per il nostro Todo utilizzando le parole chiave GraphQL <code>type<\/code>, <code>input<\/code> e <code>extend<\/code>. La parola chiave <code>extend<\/code> viene utilizzata per ereditare e aggiungere nuove query e mutazioni alla query principale e alla mutazione esistente che abbiamo creato in precedenza.<\/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=\"Un'interfaccia a riga di comando che mostra lo schema del nostro script Todo, compresi i nuovi input.\" width=\"1092\" height=\"1408\"><figcaption class=\"wp-caption-text\">Creazione dello schema per il nostro Todo.<\/figcaption><\/figure>\n<h5>Passo 2:<\/h5>\n<p>Successivamente, abbiamo creato un resolver, che viene utilizzato per recuperare i dati corretti quando viene richiamata una particolare query o mutazione.<\/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=\"Un'interfaccia a riga di comando che mostra il codice per creare un risolutore per il nostro Todo.\" width=\"1092\" height=\"904\"><figcaption class=\"wp-caption-text\">Creare un resolver.<\/figcaption><\/figure>\n<p>Una volta creata la funzione resolver, possiamo creare singoli metodi per la logica e la manipolazione del database, come mostrato nell&#8217;esempio <strong>create-todo.js<\/strong>.<\/p>\n<p>Create un file <strong>create-user.js<\/strong> nella cartella <code>.\/mutations\/<\/code> e aggiungete la logica per creare un nuovo Todo nel vostro database.<\/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>Il frammento di codice qui sopra \u00e8 un modo semplificato per creare un nuovo Todo nel nostro database utilizzando l&#8217;ORM Sequelize. Potete approfondire in <a href=\"https:\/\/sequelize.org\/\">Sequelize e su come configurarlo con Node.js<\/a>.<\/p>\n<p>Potrete seguire la stessa procedura per creare diversi schemi a seconda della vostra applicazione oppure <a href=\"https:\/\/github.com\/Kaperskyguru\/graphql-todo-example\">clonare il progetto completo da GitHub<\/a>.<\/p>\n<p>Successivamente, configureremo il server con Express.js ed eseguiremo l&#8217;applicazione Todo appena creata con GraphQL e Node.js.<\/p>\n<h3>Configurazione ed Esecuzione del Server<\/h3>\n<p>Infine, configureremo il nostro server utilizzando la libreria <code>apollo-server-express<\/code> che abbiamo installato in precedenza.<\/p>\n<p><code>apollo-server-express<\/code> \u00e8 un semplice wrapper di Apollo Server per Express.js, consigliato perch\u00e9 \u00e8 stato sviluppato per essere adatto allo sviluppo di Express.js.<\/p>\n<p>Utilizzando gli esempi precedenti, configuriamo il server Express.js in modo che lavori con la libreria <code>apollo-server-express<\/code> appena installata.<\/p>\n<p>Create un file <strong>server.js<\/strong> nella directory principale e incollate il seguente codice:<\/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>Con il codice sopra riportato, avete creato il vostro primo server CRUD GraphQL per Todos e Users. Potete avviare il vostro server di sviluppo e accedere al playground utilizzando <a href=\"http:\/\/localhost:300\/graphql\">http:\/\/localhost:3000\/graphql<\/a>. Se tutto \u00e8 andato a buon fine, dovreste visualizzare la schermata seguente:<\/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=\"Un'interfaccia di sviluppo che mostra una semplice query di risposta.\" width=\"1600\" height=\"1116\"><figcaption class=\"wp-caption-text\">La schermata di verifica.<\/figcaption><\/figure>\n<h2>Riepilogo<\/h2>\n<p>GraphQL \u00e8 una moderna tecnologia supportata da Facebook che semplifica il noioso lavoro di creazione di API su larga scala con modelli architettonici RESTful.<\/p>\n\n<p>Questa guida ha illustrato GraphQL e ha dimostrato come sviluppare la prima API GraphQL con Express.js.<\/p>\n<p>Fateci sapere cosa costruite utilizzando GraphQL nei commenti qui sotto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GraphQL \u00e8 la nuova parola d&#8217;ordine nello sviluppo di API. Sebbene le API RESTful rimangano la soluzione pi\u00f9 popolare per esporre i dati delle applicazioni, presentano &#8230;<\/p>\n","protected":false},"author":193,"featured_media":63387,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26203,25847],"class_list":["post-63386","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-node-js","topic-tutorial-javascript"],"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>Costruire API GraphQL con Node<\/title>\n<meta name=\"description\" content=\"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l&#039;intero processo con semplici esempi di codice.\" \/>\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\/it\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Costruire API GraphQL con Node\" \/>\n<meta property=\"og:description\" content=\"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l&#039;intero processo con semplici esempi di codice.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T11:54:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-15T13:00:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/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=\"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l&#039;intero processo con semplici esempi di codice.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Costruire API GraphQL con Node\",\"datePublished\":\"2023-01-02T11:54:36+00:00\",\"dateModified\":\"2023-02-15T13:00:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\"},\"wordCount\":1452,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\",\"url\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\",\"name\":\"Costruire API GraphQL con Node\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png\",\"datePublished\":\"2023-01-02T11:54:36+00:00\",\"dateModified\":\"2023-02-15T13:00:43+00:00\",\"description\":\"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l'intero processo con semplici esempi di codice.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinqsta.com\/it\/argomenti\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Costruire API GraphQL con Node\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/it\/#website\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"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\/it\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinqsta.com\/it\/#\/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\/it\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Costruire API GraphQL con Node","description":"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l'intero processo con semplici esempi di codice.","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\/it\/blog\/graphql-nodejs\/","og_locale":"it_IT","og_type":"article","og_title":"Costruire API GraphQL con Node","og_description":"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l'intero processo con semplici esempi di codice.","og_url":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-01-02T11:54:36+00:00","article_modified_time":"2023-02-15T13:00:43+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","type":"image\/png"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l'intero processo con semplici esempi di codice.","twitter_image":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","twitter_creator":"@kaperskyguru","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Solomon Eseme","Tempo di lettura stimato":"10 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Costruire API GraphQL con Node","datePublished":"2023-01-02T11:54:36+00:00","dateModified":"2023-02-15T13:00:43+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/"},"wordCount":1452,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/","url":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/","name":"Costruire API GraphQL con Node","isPartOf":{"@id":"https:\/\/kinqsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","datePublished":"2023-01-02T11:54:36+00:00","dateModified":"2023-02-15T13:00:43+00:00","description":"Vuoi sapere come utilizzare GraphQL con Node.js? Qui illustriamo l'intero processo con semplici esempi di codice.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#primaryimage","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/01\/graphql-nodejs.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/it\/blog\/graphql-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinqsta.com\/it\/argomenti\/node-js\/"},{"@type":"ListItem","position":3,"name":"Costruire API GraphQL con Node"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/it\/#website","url":"https:\/\/kinqsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinqsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","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\/it\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinqsta.com\/it\/#\/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\/it\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/63386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/comments?post=63386"}],"version-history":[{"count":10,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/63386\/revisions"}],"predecessor-version":[{"id":65412,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/posts\/63386\/revisions\/65412"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/it\/wp-json\/kinsta\/v1\/posts\/63386\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media\/63387"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/media?parent=63386"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/tags?post=63386"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/it\/wp-json\/wp\/v2\/topic?post=63386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}