{"id":64894,"date":"2023-01-02T12:53:48","date_gmt":"2023-01-02T11:53:48","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=64894&#038;preview=true&#038;preview_id=64894"},"modified":"2023-08-22T12:38:52","modified_gmt":"2023-08-22T11:38:52","slug":"construire-api-graphql-nodejs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/","title":{"rendered":"Construire des API GraphQL avec Node"},"content":{"rendered":"<p>GraphQL est le nouveau mot \u00e0 la mode dans le d\u00e9veloppement des API. Si les API RESTful restent le moyen le plus populaire d&rsquo;exposer des donn\u00e9es \u00e0 partir d&rsquo;applications, elles pr\u00e9sentent de nombreuses limitations que GraphQL vise \u00e0 r\u00e9soudre.<\/p>\n<p>GraphQL est un langage de requ\u00eate cr\u00e9\u00e9 par Facebook, qui est devenu un projet open source en 2015. Il offre une syntaxe intuitive et flexible pour d\u00e9crire et acc\u00e9der aux donn\u00e9es d&rsquo;une API.<\/p>\n\n<p>Ce guide va explorer comment construire un <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-installer-node-js\/\">projet GraphQL Node.js<\/a>. Nous utiliserons GraphQL pour construire une application Todo dans le <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-express-js\/\">framework Express.js<\/a> pour Node.<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>Qu&rsquo;est-ce que GraphQL ?<\/h2>\n<p>Extrait de la <a href=\"https:\/\/graphql.org\/\">documentation officielle<\/a>: \u00ab GraphQL est un langage de requ\u00eate pour les API et un runtime pour remplir ces requ\u00eates avec vos donn\u00e9es existantes. GraphQL fournit une description compl\u00e8te et compr\u00e9hensible des donn\u00e9es de votre API, donne aux clients le pouvoir de demander exactement ce dont ils ont besoin et rien de plus, facilite l&rsquo;\u00e9volution des API au fil du temps et permet d&rsquo;utiliser de puissants outils de d\u00e9veloppement. \u00bb<\/p>\n<p>GraphQL est un runtime c\u00f4t\u00e9 serveur permettant d&rsquo;ex\u00e9cuter des requ\u00eates \u00e0 l&rsquo;aide du syst\u00e8me de types que vous avez d\u00e9fini pour vos donn\u00e9es. En outre, GraphQL n&rsquo;est pas li\u00e9 \u00e0 une base de donn\u00e9es ou \u00e0 un moteur de stockage sp\u00e9cifique. Au lieu de cela, il s&rsquo;appuie sur votre code et votre magasin de donn\u00e9es existants. Vous pouvez obtenir une comparaison d\u00e9taill\u00e9e de ces technologies avec le <a href=\"https:\/\/kinsta.com\/fr\/blog\/graphql-vs-rest\/\">guide GraphQL vs. RESTful API<\/a>.<\/p>\n<p>Pour cr\u00e9er un service GraphQL, vous commencez par d\u00e9finir des types de sch\u00e9ma et cr\u00e9er des champs \u00e0 l&rsquo;aide de ces types. Ensuite, vous fournissez un r\u00e9solveur de fonctions \u00e0 ex\u00e9cuter sur chaque champ et chaque type chaque fois que des donn\u00e9es sont demand\u00e9es par le c\u00f4t\u00e9 client.<\/p>\n<h2>Terminologie GraphQL<\/h2>\n<p>Le syst\u00e8me de types GraphQL est utilis\u00e9 pour d\u00e9crire les donn\u00e9es qui peuvent \u00eatre interrog\u00e9es et celles que vous pouvez manipuler. Il s&rsquo;agit du c\u0153ur de GraphQL. Discutons des diff\u00e9rentes fa\u00e7ons dont nous pouvons d\u00e9crire et manipuler les donn\u00e9es dans GraphQ.<\/p>\n<h3>Types d&rsquo;objets<\/h3>\n<p>Les types d&rsquo;objets GraphQL sont des mod\u00e8les de donn\u00e9es contenant des champs fortement typ\u00e9s. Il devrait y avoir une correspondance 1 \u00e0 1 entre vos mod\u00e8les et les types GraphQL. Vous trouverez ci-dessous un exemple de type 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>Requ\u00eates<\/h3>\n<p>GraphQL Query d\u00e9finit toutes les requ\u00eates qu&rsquo;un client peut ex\u00e9cuter sur l&rsquo;API GraphQL. Par convention, vous devez d\u00e9finir un <code>RootQuery<\/code> qui contiendra toutes les requ\u00eates existantes.<\/p>\n<p>Ci-dessous, nous d\u00e9finissons et mappons les requ\u00eates \u00e0 l&rsquo;API RESTful correspondante :<\/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>Mutations<\/h3>\n<p>Si les requ\u00eates GraphQL sont des demandes <code>GET<\/code>, les mutations sont des requ\u00eates <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code>, et <code>DELETE<\/code> qui manipulent l&rsquo;API GraphQL.<\/p>\n<p>Nous allons mettre toutes les mutations dans un seul <code>RootMutation<\/code> pour faire la d\u00e9monstration :<\/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>Vous avez remarqu\u00e9 l&rsquo;utilisation de types <code>-input<\/code> pour les mutations tels que <code>UserInput<\/code>, <code>TodoInput<\/code>. La meilleure pratique consiste toujours \u00e0 d\u00e9finir des types Input pour la cr\u00e9ation et la mise \u00e0 jour de vos ressources.<\/p>\n<p>Vous pouvez d\u00e9finir les types d&rsquo;entr\u00e9e comme celui ci-dessous :<\/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>R\u00e9solveurs<\/h3>\n<p>Les r\u00e9solveurs indiquent \u00e0 GraphQL ce qu&rsquo;il doit faire lorsque chaque requ\u00eate ou mutation est demand\u00e9e. Il s&rsquo;agit d&rsquo;une fonction de base qui fait le travail difficile de frapper la couche de base de donn\u00e9es pour effectuer les op\u00e9rations CRUD (cr\u00e9ation, lecture, mise \u00e0 jour, suppression), de frapper un point de terminaison interne RESTful API, ou d&rsquo;appeler un <a href=\"https:\/\/kinsta.com\/fr\/blog\/micro-services-vs-api\/\">microservice<\/a> pour r\u00e9pondre \u00e0 la demande du client.<\/p>\n<p>Vous pouvez cr\u00e9er un nouveau fichier <strong>resolvers.js<\/strong> et ajouter le code suivant :<\/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>Sch\u00e9ma<\/h3>\n<p>Le sch\u00e9ma GraphQL est ce que GraphQL expose au monde. Par cons\u00e9quent, les types, les requ\u00eates et les mutations seront inclus dans le sch\u00e9ma pour \u00eatre expos\u00e9s au monde.<\/p>\n<p>Voici comment exposer les types, les requ\u00eates et les mutations au monde :<\/p>\n<pre><code class=\"language-json\">schema {\n  query: RootQuery\n  mutation: RootMutation\n}<\/code><\/pre>\n<p>Dans le script ci-dessus, nous avons inclus le <code>RootQuery<\/code> et le <code>RootMutation<\/code> que nous avons cr\u00e9\u00e9s plus t\u00f4t pour \u00eatre expos\u00e9s au monde.<\/p>\n<h2>Comment GraphQL fonctionne-t-il avec Node.js et Express.js ?<\/h2>\n<p>GraphQL fournit une impl\u00e9mentation pour tous les principaux langages de programmation, et Node.js n&rsquo;est pas exempt\u00e9. Sur le <a href=\"https:\/\/graphql.org\/\">site officiel de GraphQL<\/a>, il y a une section pour le <a href=\"https:\/\/graphql.org\/code\/#javascript\">support JavaScript<\/a>, et aussi, il y a d&rsquo;autres impl\u00e9mentations de GraphQL pour rendre l&rsquo;\u00e9criture et le codage simple.<\/p>\n<p>GraphQL Apollo fournit une impl\u00e9mentation pour Node.js et Express.js et facilite la prise en main de GraphQL.<\/p>\n<p>Vous apprendrez comment cr\u00e9er et d\u00e9velopper votre premi\u00e8re application GraphQL dans Node.js et le cadre backend <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-express-js\/\">Express.js<\/a> \u00e0 l&rsquo;aide de GraphQL Apollo dans la section suivante.<\/p>\n<h2>Mise en place de GraphQL avec Express.js<\/h2>\n<p>La mise en place d&rsquo;un serveur d&rsquo;API GraphQL avec Express.js est tr\u00e8s simple pour commencer. Dans cette section, nous allons explorer comment construire un serveur GraphQL.<\/p>\n<h3>Initialiser le projet avec Express<\/h3>\n<p>Tout d&rsquo;abord, vous devez installer et configurer un nouveau projet Express.js. Cr\u00e9ez un dossier pour votre projet et installez Express.js en utilisant cette commande :<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt; && npm init -y\nnpm install express<\/code><\/pre>\n<p>La commande ci-dessus cr\u00e9e un nouveau fichier <strong>package.json<\/strong> et installe la biblioth\u00e8que Express.js dans votre projet.<\/p>\n<p>Ensuite, nous allons structurer notre projet comme indiqu\u00e9 dans l&rsquo;image ci-dessous. Il contiendra diff\u00e9rents modules pour les fonctionnalit\u00e9s du projet telles que les utilisateurs, les todos, etc.<\/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=\"Fichiers pour graphql-todo.\" width=\"467\" height=\"595\"><figcaption class=\"wp-caption-text\">Fichiers pour <em>graphql-todo<\/em>.<\/figcaption><\/figure>\n<h3>Initialiser GraphQL<\/h3>\n<p>Commen\u00e7ons par installer les d\u00e9pendances GraphQL Express.js. Ex\u00e9cutez la commande suivante pour les installer :<\/p>\n<pre><code class=\"language-bash\">npm install apollo-server-express graphql @graphql-tools\/schema --save<\/code><\/pre>\n<h3>Cr\u00e9ation de sch\u00e9mas et de types<\/h3>\n<p>Ensuite, nous allons cr\u00e9er un fichier <strong>index.js<\/strong> dans le dossier modules et ajouter l&rsquo;extrait de code suivant :<\/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>Passons en revue cet extrait de code et d\u00e9composons-le :<\/p>\n<h5>\u00c9tape 1<\/h5>\n<p>Tout d&rsquo;abord, nous avons import\u00e9 les biblioth\u00e8ques requises et cr\u00e9\u00e9 des types de requ\u00eate et de mutation par d\u00e9faut. Pour l&rsquo;instant, la requ\u00eate et la mutation ne d\u00e9finissent que la version de l&rsquo;API GraphQL. Cependant, nous \u00e9tendrons la requ\u00eate et la mutation pour inclure d&rsquo;autres sch\u00e9mas au fur et \u00e0 mesure.<\/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=\"Importation de GraphQL et des extensions.\" width=\"1266\" height=\"904\"><figcaption class=\"wp-caption-text\">Importation de GraphQL et des extensions.<\/figcaption><\/figure>\n<h5>\u00c9tape 2 :<\/h5>\n<p>Nous avons ensuite cr\u00e9\u00e9 un nouveau type scalaire pour le temps et notre premier r\u00e9solveur pour la requ\u00eate et la mutation cr\u00e9\u00e9es ci-dessus. En outre, nous avons \u00e9galement g\u00e9n\u00e9r\u00e9 un sch\u00e9ma \u00e0 l&rsquo;aide de la fonction <code>makeExecutableSchema<\/code>.<\/p>\n<p>Le sch\u00e9ma g\u00e9n\u00e9r\u00e9 inclut tous les autres sch\u00e9mas que nous avons import\u00e9s et en inclura \u00e9galement d&rsquo;autres lorsque nous les cr\u00e9erons et les importerons.<\/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=\"Cr\u00e9ation d'un type scalaire pour le temps ainsi que de notre premier r\u00e9solveur.\" width=\"1166\" height=\"1012\"><figcaption class=\"wp-caption-text\">Cr\u00e9ation d&rsquo;un type scalaire pour le temps ainsi que de notre premier r\u00e9solveur.<\/figcaption><\/figure>\n<p>L&rsquo;extrait de code ci-dessus montre que nous avons import\u00e9 diff\u00e9rents sch\u00e9mas dans la fonction makeExecutableSchema. Cette approche nous aide \u00e0 structurer l&rsquo;application pour la complexit\u00e9. Ensuite, nous allons cr\u00e9er les sch\u00e9mas Todo et User que nous avons import\u00e9s.<\/p>\n<h3>Cr\u00e9ation du sch\u00e9ma Todo<\/h3>\n<p>Le sch\u00e9ma Todo montre les op\u00e9rations CRUD simples que les utilisateurs de l&rsquo;application peuvent effectuer. Voici le sch\u00e9ma qui impl\u00e9mente l&rsquo;op\u00e9ration CRUD 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>Analyse du code<\/h4>\n<p>Passons en revue l&rsquo;extrait de code et d\u00e9composons-le :<\/p>\n<h5>\u00c9tape 1 :<\/h5>\n<p>Tout d&rsquo;abord, nous avons cr\u00e9\u00e9 un sch\u00e9ma pour notre Todo en utilisant GraphQL <code>type<\/code>, <code>input<\/code>, et <code>extend<\/code>. Le mot-cl\u00e9 <code>extend<\/code> est utilis\u00e9 pour h\u00e9riter et ajouter de nouvelles requ\u00eates et mutations \u00e0 la requ\u00eate et \u00e0 la mutation racines existantes que nous avons cr\u00e9\u00e9es ci-dessus.<\/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=\"A command line interface showing the schema for our Todo script, including new inputs.\" width=\"1092\" height=\"1408\"><figcaption class=\"wp-caption-text\">Cr\u00e9ation du sch\u00e9ma pour notre Todo.<\/figcaption><\/figure>\n<h5>\u00c9tape 2 :<\/h5>\n<p>Ensuite, nous avons cr\u00e9\u00e9 un r\u00e9solveur, qui est utilis\u00e9 pour r\u00e9cup\u00e9rer les donn\u00e9es correctes lorsqu&rsquo;une requ\u00eate ou une mutation particuli\u00e8re est appel\u00e9e.<\/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=\"Cr\u00e9ation d'un r\u00e9solveur.\" width=\"1092\" height=\"904\"><figcaption class=\"wp-caption-text\">Cr\u00e9ation d&rsquo;un r\u00e9solveur.<\/figcaption><\/figure>\n<p>Une fois la fonction r\u00e9solveur en place, nous pouvons cr\u00e9er des m\u00e9thodes individuelles pour la logique commerciale et la manipulation de la base de donn\u00e9es, comme le montre l&rsquo;exemple <strong>create-todo.js<\/strong>.<\/p>\n<p>Cr\u00e9ez un fichier <strong>create-user.js<\/strong> dans le dossier <code>.\/mutations<\/code> et ajoutez la logique m\u00e9tier pour cr\u00e9er un nouveau Todo dans votre base de donn\u00e9es.<\/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>L&rsquo;extrait de code ci-dessus est une fa\u00e7on simplifi\u00e9e de cr\u00e9er un nouveau Todo dans notre base de donn\u00e9es en utilisant l&rsquo;ORM Sequelize. Vous pouvez en savoir plus sur <a href=\"https:\/\/sequelize.org\/\">Sequelize et comment le configurer avec Node.js<\/a>.<\/p>\n<p>Vous pouvez suivre la m\u00eame \u00e9tape pour cr\u00e9er plusieurs sch\u00e9mas en fonction de votre application ou vous pouvez <a href=\"https:\/\/github.com\/Kaperskyguru\/graphql-todo-example\">cloner le projet complet depuis GitHub<\/a>.<\/p>\n<p>Ensuite, nous allons configurer le serveur avec Express.js et ex\u00e9cuter l&rsquo;application Todo nouvellement cr\u00e9\u00e9e avec GraphQL et Node.js.<\/p>\n<h3>Configuration et ex\u00e9cution du serveur<\/h3>\n<p>Enfin, nous allons mettre en place notre serveur \u00e0 l&rsquo;aide de la biblioth\u00e8que <code>apollo-server-express<\/code> que nous avons install\u00e9e pr\u00e9c\u00e9demment et le configurer.<\/p>\n<p>Le <code>apollo-server-express<\/code> est un simple wrapper du serveur Apollo pour Express.js, il est recommand\u00e9 car il a \u00e9t\u00e9 d\u00e9velopp\u00e9 pour s&rsquo;adapter au d\u00e9veloppement d&rsquo;Express.js.<\/p>\n<p>En utilisant les exemples dont nous avons parl\u00e9 plus haut, configurons le serveur Express.js pour qu&rsquo;il fonctionne avec la biblioth\u00e8que <code>apollo-server-express<\/code> nouvellement install\u00e9e .<\/p>\n<p>Cr\u00e9ez un fichier <strong>server.js<\/strong> dans le r\u00e9pertoire racine et collez-y le code suivant :<\/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>Dans le code ci-dessus, vous avez cr\u00e9\u00e9 avec succ\u00e8s votre premier serveur CRUD GraphQL pour Todos et Users. Vous pouvez d\u00e9marrer votre serveur de d\u00e9veloppement et acc\u00e9der au terrain de jeu en utilisant <a href=\"http:\/\/localhost:300\/graphql\">http:\/\/localhost:3000\/graphql<\/a>. Si tout se passe bien, vous devriez voir l&rsquo;\u00e9cran ci-dessous :<\/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=\"L'\u00e9cran de v\u00e9rification.\" width=\"1600\" height=\"1116\"><figcaption class=\"wp-caption-text\">L&rsquo;\u00e9cran de v\u00e9rification.<\/figcaption><\/figure>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>GraphQL est une technologie moderne soutenue par Facebook qui simplifie le travail fastidieux li\u00e9 \u00e0 la cr\u00e9ation d&rsquo;API \u00e0 grande \u00e9chelle avec des mod\u00e8les architecturaux RESTful.<\/p>\n<p>Ce guide a \u00e9lucid\u00e9 GraphQL et montr\u00e9 comment d\u00e9velopper votre premi\u00e8re API GraphQL avec Express.js.<\/p>\n<p>Faites-nous savoir ce que vous construisez \u00e0 l&rsquo;aide de GraphQL dans les commentaires ci-dessous.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GraphQL est le nouveau mot \u00e0 la mode dans le d\u00e9veloppement des API. Si les API RESTful restent le moyen le plus populaire d&rsquo;exposer des donn\u00e9es &#8230;<\/p>\n","protected":false},"author":193,"featured_media":64895,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[994,980],"class_list":["post-64894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-node-js","topic-tutoriel-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>Construire des API GraphQL avec Node<\/title>\n<meta name=\"description\" content=\"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.\" \/>\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\/fr\/blog\/construire-api-graphql-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construire des API GraphQL avec Node\" \/>\n<meta property=\"og:description\" content=\"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T11:53:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T11:38:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/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=\"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Construire des API GraphQL avec Node\",\"datePublished\":\"2023-01-02T11:53:48+00:00\",\"dateModified\":\"2023-08-22T11:38:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\"},\"wordCount\":1821,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\",\"name\":\"Construire des API GraphQL avec Node\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png\",\"datePublished\":\"2023-01-02T11:53:48+00:00\",\"dateModified\":\"2023-08-22T11:38:52+00:00\",\"description\":\"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construire des API GraphQL avec Node\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"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\/fr\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construire des API GraphQL avec Node","description":"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.","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\/fr\/blog\/construire-api-graphql-nodejs\/","og_locale":"fr_FR","og_type":"article","og_title":"Construire des API GraphQL avec Node","og_description":"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.","og_url":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-01-02T11:53:48+00:00","article_modified_time":"2023-08-22T11:38:52+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","type":"image\/png"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","twitter_creator":"@kaperskyguru","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Solomon Eseme","Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Construire des API GraphQL avec Node","datePublished":"2023-01-02T11:53:48+00:00","dateModified":"2023-08-22T11:38:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/"},"wordCount":1821,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/","url":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/","name":"Construire des API GraphQL avec Node","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","datePublished":"2023-01-02T11:53:48+00:00","dateModified":"2023-08-22T11:38:52+00:00","description":"Vous \u00eates curieux de savoir comment utiliser GraphQL avec Node.js ? Nous allons vous guider \u00e0 travers tout le processus avec des exemples de code et des explications faciles \u00e0 comprendre.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/01\/graphql-nodejs.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/construire-api-graphql-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/fr\/sujets\/node-js\/"},{"@type":"ListItem","position":3,"name":"Construire des API GraphQL avec Node"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","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\/fr\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/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\/fr\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=64894"}],"version-history":[{"count":10,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64894\/revisions"}],"predecessor-version":[{"id":65175,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/64894\/revisions\/65175"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/translations\/dk"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/64894\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/64895"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=64894"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=64894"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=64894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}