{"id":48296,"date":"2023-01-02T11:56:53","date_gmt":"2023-01-02T11:56:53","guid":{"rendered":"https:\/\/kinsta.com\/se\/?p=48296&#038;preview=true&#038;preview_id=48296"},"modified":"2023-09-21T09:18:48","modified_gmt":"2023-09-21T09:18:48","slug":"graphql-nodejs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/","title":{"rendered":"Bygga GraphQL API: er med Node"},"content":{"rendered":"<p>GraphQL \u00e4r det nya modeordet inom API-utveckling. \u00c4ven om RESTful API: er fortfarande \u00e4r det mest popul\u00e4ra s\u00e4ttet att exponera data fr\u00e5n applikationer, s\u00e5 rymmer de m\u00e5nga begr\u00e4nsningar som GraphQL vill l\u00f6sa.<\/p>\n<p>GraphQL \u00e4r ett s\u00f6kfr\u00e5gespr\u00e5k som skapades av Facebook och som omvandlades till ett projekt med \u00f6ppen k\u00e4llkod \u00e5r 2015. Det erbjuder en intuitiv och flexibel syntax f\u00f6r att beskriva och komma \u00e5t data i ett API.<\/p>\n<p>Den h\u00e4r guiden kommer att unders\u00f6ka hur man bygger ett <a href=\"https:\/\/kinsta.com\/se\/blog\/hur-du-installerar-node-js\/\">GraphQL node.js-projekt<\/a>. Vi kommer att anv\u00e4nda GraphQL f\u00f6r att bygga en Todo-applikation i <a href=\"https:\/\/kinsta.com\/blog\/what-is-express-js\/\">webbramverket Express.js<\/a> f\u00f6r 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>Vad \u00e4r GraphQL?<\/h2>\n<p>Det st\u00e5r i den <a href=\"https:\/\/graphql.org\/\">officiella dokumentationen<\/a>: &#8221;GraphQL \u00e4r ett s\u00f6kfr\u00e5gespr\u00e5k f\u00f6r API: er och en k\u00f6rtid f\u00f6r att uppfylla dessa fr\u00e5gor med dina befintliga data. GraphQL ger en fullst\u00e4ndig och begriplig beskrivning av data i ditt API, ger kunderna m\u00f6jlighet att endast fr\u00e5ga efter exakt vad de beh\u00f6ver, g\u00f6r det l\u00e4ttare att utveckla API: er \u00f6ver tiden och m\u00f6jligg\u00f6r kraftfulla utvecklarverktyg.&#8221;<\/p>\n<p>GraphQL \u00e4r en serverbaserad k\u00f6rtid f\u00f6r att utf\u00f6ra s\u00f6kfr\u00e5gor med hj\u00e4lp av det typsystem som du har definierat f\u00f6r dina data. GraphQL \u00e4r inte heller bundet till n\u00e5gon specifik databas eller lagringsmotor. Den st\u00f6ds ist\u00e4llet av din befintliga kod och datalagret. Du kan f\u00e5 en detaljerad j\u00e4mf\u00f6relse av dessa tekniker i <a href=\"https:\/\/kinsta.com\/se\/blog\/rest-vs-graphql\/\">guiden GraphQL vs. RESTful API<\/a>.<\/p>\n<p>F\u00f6r att skapa en GraphQL-tj\u00e4nst s\u00e5 b\u00f6rjar du med att definiera schematyper och skapa f\u00e4lt som anv\u00e4nder dessa typer. D\u00e4refter s\u00e5 tillhandah\u00e5ller du en funktions-resolver som ska utf\u00f6ras p\u00e5 varje f\u00e4lt och typ n\u00e4r data beg\u00e4rs av klientsidan.<\/p>\n<h2>Terminologi f\u00f6r GraphQL<\/h2>\n<p>GraphQL-typsystemet anv\u00e4nds f\u00f6r att beskriva vilka data som kan fr\u00e5gas ut och vilka data som du kan manipulera. Det \u00e4r k\u00e4rnan i GraphQL. L\u00e5t oss diskutera olika s\u00e4tt att beskriva och manipulera data i GraphQL.<\/p>\n<h3>Objekttyper<\/h3>\n<p>GraphQL-objekttyper \u00e4r datamodeller som inneh\u00e5ller starkt typade f\u00e4lt. Det b\u00f6r finnas en 1 till 1-mappning mellan dina modeller och GraphQL-typerna. Nedan finns ett exempel p\u00e5 en 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>S\u00f6kfr\u00e5gor<\/h3>\n<p>GraphQL Query definierar alla s\u00f6kfr\u00e5gor som en klient kan k\u00f6ra p\u00e5 GraphQL API. Du b\u00f6r definiera en <code>RootQuery<\/code> som inkluderar alla befintliga s\u00f6kfr\u00e5gor enligt konventionen.<\/p>\n<p>Nedan definierar och mappar vi fr\u00e5gorna till motsvarande RESTful API:<\/p>\n<pre><code class=\"language-json\">type RootQuery {\n  user(id: ID): User           # Corresponds to GET \/api\/users\/:id\n  users: [User]                # Corresponds to GET \/api\/users\n  todo(id: ID!): Todo    # Corresponds to GET \/api\/todos\/:id\n  todos: [Todo]          # Corresponds to GET \/api\/todos\n}<\/code><\/pre>\n<h3>Mutationer<\/h3>\n<p>Om GraphQL-f\u00f6rfr\u00e5gningar \u00e4r <code>GET<\/code> -f\u00f6rfr\u00e5gningar s\u00e5 \u00e4r mutationerna <code>POST<\/code>, <code>PUT<\/code>, <code>PATCH<\/code> och <code>DELETE<\/code> -f\u00f6rfr\u00e5gningar som manipulerar GraphQL API.<\/p>\n<p>Vi kommer att placera alla mutationer i en enda <code>RootMutation<\/code> f\u00f6r att demonstrera detta:<\/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>Du har noterat anv\u00e4ndningen av <code>-input<\/code>-typer f\u00f6r mutationerna, t.ex. <code>UserInput<\/code>, <code>TodoInput<\/code>. Det \u00e4r alltid b\u00e4st att alltid definiera Input-typer f\u00f6r att skapa och uppdatera dina resurser.<\/p>\n<p>Du kan definiera inmatningstyperna p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<pre><code class=\"language-json\">input UserInput {\n  firstname: String!\n  lastname: String\n  email: String!\n  username: String!\n}<\/code><\/pre>\n<h3>Resolvers<\/h3>\n<p>Resolvers talar om f\u00f6r GraphQL vad de ska g\u00f6ra n\u00e4r varje s\u00f6kfr\u00e5ga eller mutation beg\u00e4rs. Det \u00e4r en grundl\u00e4ggande funktion som g\u00f6r det h\u00e5rda arbetet med att sl\u00e5 p\u00e5 databaslagret f\u00f6r att g\u00f6ra CRUD-operationer (skapa, l\u00e4sa, uppdatera, ta bort), sl\u00e5 p\u00e5 en intern RESTful API-slutpunkt eller anropa en <a href=\"https:\/\/kinsta.com\/blog\/microservices-vs-api\/\">mikrotj\u00e4nst<\/a> f\u00f6r att uppfylla klientens beg\u00e4ran.<\/p>\n<p>Du kan skapa en ny <strong>resolvers.js<\/strong>-fil och l\u00e4gga till f\u00f6ljande kod:<\/p>\n<pre><code class=\"language-js\">import sequelize from '..\/models';\nexport default function resolvers () {\n  const models = sequelize.models;\n  return {\n    \/\/ Resolvers for Queries\n    RootQuery: {\n      user (root, { id }, context) {\n        return models.User.findById(id, context);\n      },\n      users (root, args, context) {\n        return models.User.findAll({}, context);\n      }\n    },\n    User: {\n      todos (user) {\n        return user.getTodos();\n      }\n    },\n  }\n  \/\/ Resolvers for Mutations\n  RootMutation: {\n    createUser (root, { input }, context) {\n      return models.User.create(input, context);    \n    },\n    updateUser (root, { id, input }, context) {\n      return models.User.update(input, { ...context, where: { id } });\n    },\n    removeUser (root, { id }, context) {\n      return models.User.destroy(input, { ...context, where: { id } });\n    },\n    \/\/ ... Resolvers for Todos go here\n  }\n}<\/code><\/pre>\n<h3>Schema<\/h3>\n<p>GraphQL-schema \u00e4r det som GraphQL exponerar f\u00f6r v\u00e4rlden. Av den anledningen s\u00e5 kommer typer, s\u00f6kfr\u00e5gor och mutationer att ing\u00e5 i schemat f\u00f6r att exponeras f\u00f6r v\u00e4rlden.<\/p>\n<p>Nedan beskrivs hur man exponerar typer, s\u00f6kfr\u00e5gor och mutationer f\u00f6r v\u00e4rlden:<\/p>\n<pre><code class=\"language-json\">schema {\n  query: RootQuery\n  mutation: RootMutation\n}<\/code><\/pre>\n<p>I ovanst\u00e5ende skript s\u00e5 har vi inkluderat <code>RootQuery<\/code> och <code>RootMutation<\/code> som vi skapade tidigare f\u00f6r att de ska exponeras f\u00f6r omv\u00e4rlden.<\/p>\n<h2>Hur fungerar GraphQL med Node.js och Express.js?<\/h2>\n<p>GraphQL tillhandah\u00e5ller en implementering f\u00f6r alla st\u00f6rre programmeringsspr\u00e5k, och Node.js \u00e4r inte undantaget. P\u00e5 den <a href=\"https:\/\/graphql.org\/\">officiella GraphQL-webbplatsen<\/a> s\u00e5 finns det en sektion f\u00f6r <a href=\"https:\/\/graphql.org\/code\/#javascript\">JavaScript-st\u00f6d<\/a>, och det finns \u00e4ven andra implementeringar av GraphQL f\u00f6r att g\u00f6ra det enkelt att skriva och koda.<\/p>\n<p>GraphQL Apollo tillhandah\u00e5ller en implementering f\u00f6r Node.js och Express.js och g\u00f6r det enkelt att komma ig\u00e5ng med GraphQL.<\/p>\n<p>In\u00e4sta avsnitt s\u00e5 kommer du att l\u00e4ra dig hur du skapar och utvecklar din f\u00f6rsta GraphQL-applikation i Node.js och <a href=\"https:\/\/kinsta.com\/blog\/what-is-express-js\/\">Express.js<\/a> backend-ramverk med hj\u00e4lp av GraphQL Apollo.<\/p>\n<h2>Konfigurera GraphQL med Express.js<\/h2>\n<p>Att bygga en GraphQL API-server med Express.js \u00e4r enkelt. I det h\u00e4r avsnittet s\u00e5 kommer vi att utforska hur man bygger en GraphQL-server.<\/p>\n<h3>Initialisera projektet med Express<\/h3>\n<p>F\u00f6rst s\u00e5 m\u00e5ste du installera och st\u00e4lla in ett nytt Express.js-projekt. Skapa en mapp f\u00f6r ditt projekt och installera Express.js med det h\u00e4r kommandot:<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt; && npm init -y\nnpm install express<\/code><\/pre>\n<p>Kommandot ovan skapar en ny <strong>package.json<\/strong>-fil och installerar Express.js-biblioteket i ditt projekt.<\/p>\n<p>D\u00e4refter s\u00e5 strukturerar vi v\u00e5rt projekt enligt bilden nedan. Det kommer att inneh\u00e5lla olika moduler f\u00f6r projektets funktioner som t.ex. anv\u00e4ndare, todos osv.<\/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=\"Filer f\u00f6r graphql-todo.\" width=\"467\" height=\"595\"><figcaption class=\"wp-caption-text\">Filer f\u00f6r <em>graphql-todo<\/em>.<\/figcaption><\/figure>\n<h3>Initialisera GraphQL<\/h3>\n<p>L\u00e5t oss b\u00f6rja med att installera GraphQL Express.js-beroendena. K\u00f6r f\u00f6ljande kommando f\u00f6r att installera:<\/p>\n<pre><code class=\"language-bash\">npm install apollo-server-express graphql @graphql-tools\/schema --save<\/code><\/pre>\n<h3>Skapa scheman och typer<\/h3>\n<p>D\u00e4refter s\u00e5 ska vi skapa en <strong>index.js<\/strong>-fil i mappen modules och l\u00e4gga till f\u00f6ljande kodutdrag:<\/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>Kodgenomg\u00e5ng<\/h4>\n<p>Vi g\u00e5r igenom kodutdraget och bryter ner det:<\/p>\n<h5>Steg 1<\/h5>\n<p>F\u00f6rst s\u00e5 importerade vi de n\u00f6dv\u00e4ndiga biblioteken och skapade standardtyper f\u00f6r s\u00f6kfr\u00e5gor och mutationer. F\u00f6rfr\u00e5gan och mutationen anger f\u00f6r tillf\u00e4llet bara versionen av GraphQL API :et. Vi kommer dock att ut\u00f6ka f\u00f6rfr\u00e5gan och mutationen f\u00f6r att inkludera andra scheman allteftersom vi forts\u00e4tter.<\/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=\"Import av GraphQL och till\u00e4gg.\" width=\"1266\" height=\"904\"><figcaption class=\"wp-caption-text\">Import av GraphQL och till\u00e4gg.<\/figcaption><\/figure>\n<h5>Steg 2:<\/h5>\n<p>D\u00e4refter s\u00e5 skapade vi en ny skal\u00e4r typ f\u00f6r tid och v\u00e5r f\u00f6rsta resolver f\u00f6r den s\u00f6kfr\u00e5ga och mutation som skapats ovan. Vi genererade dessutom \u00e4ven ett schema med hj\u00e4lp av funktionen <code>makeExecutableSchema<\/code>.<\/p>\n<p>Det genererade schemat inkluderar alla andra scheman som vi importerade och kommer \u00e4ven att inneh\u00e5lla fler n\u00e4r vi skapar och importerar dem.<\/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=\"Skapa en skal\u00e4r typ f\u00f6r tid samt v\u00e5r f\u00f6rsta resolver.\" width=\"1166\" height=\"1012\"><figcaption class=\"wp-caption-text\">Skapa en skal\u00e4r typ f\u00f6r tid samt v\u00e5r f\u00f6rsta resolver.<\/figcaption><\/figure>\n<p>Ovanst\u00e5ende kodutdrag visar att vi importerade olika scheman till funktionen makeExecutableSchema. Detta tillv\u00e4gag\u00e5ngss\u00e4tt hj\u00e4lper oss att strukturera applikationen f\u00f6r komplexitet. D\u00e4refter s\u00e5 ska vi skapa de Todo- och User-scheman som vi importerade.<\/p>\n<h3>Skapa Todo-schema<\/h3>\n<p>Todo-schemat visar enkla CRUD-operationer som applikationens anv\u00e4ndare kan utf\u00f6ra. Nedan visas schemat som implementerar Todo CRUD-operationen.<\/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>Genomg\u00e5ng av koden<\/h4>\n<p>L\u00e5t oss g\u00e5 igenom kodutdraget och bryta ner det:<\/p>\n<h5>Steg 1:<\/h5>\n<p>F\u00f6rst s\u00e5 skapade vi ett schema f\u00f6r v\u00e5r Todo med hj\u00e4lp av GraphQL <code>type<\/code>, <code>input<\/code> och <code>extend<\/code>. Nyckelordet <code>extend<\/code> anv\u00e4nds f\u00f6r att \u00e4rva och l\u00e4gga till nya s\u00f6kfr\u00e5gor och mutationer till den befintliga rotfr\u00e5gan och mutationen som vi skapade ovan.<\/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=\"Skapa schemat f\u00f6r v\u00e5r Todo.\" width=\"1092\" height=\"1408\"><figcaption class=\"wp-caption-text\">Skapa schemat f\u00f6r v\u00e5r Todo.<\/figcaption><\/figure>\n<h5>Steg 2:<\/h5>\n<p>D\u00e4refter s\u00e5 skapade vi en resolver, som anv\u00e4nds f\u00f6r att h\u00e4mta r\u00e4tt data n\u00e4r en viss s\u00f6kfr\u00e5ga eller mutation anropas.<\/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=\"Skapa en resolver.\" width=\"1092\" height=\"904\"><figcaption class=\"wp-caption-text\">Skapa en resolver.<\/figcaption><\/figure>\n<p>Med resolver-funktionen p\u00e5 plats s\u00e5 kan vi skapa enskilda metoder f\u00f6r aff\u00e4rslogiken och databasmanipulationen som visas i exemplet <strong>create-todo.js<\/strong>.<\/p>\n<p>Skapa filen <strong>create-user.js<\/strong> i mappen <code>.\/mutations\/<\/code> och l\u00e4gg till aff\u00e4rslogiken f\u00f6r att skapa en ny Todo i din databas.<\/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>Kodutdraget ovan \u00e4r ett f\u00f6renklat s\u00e4tt att skapa en ny Todo i v\u00e5r databas med hj\u00e4lp av Sequelize ORM. Du kan l\u00e4sa mer om <a href=\"https:\/\/sequelize.org\/\">Sequelize och hur du konfigurerar det med Node.js<\/a>.<\/p>\n<p>Du kan f\u00f6lja samma steg f\u00f6r att skapa m\u00e5nga scheman beroende p\u00e5 din applikation eller s\u00e5 kan du <a href=\"https:\/\/github.com\/Kaperskyguru\/graphql-todo-example\">klona hela projektet fr\u00e5n GitHub<\/a>.<\/p>\n<p>D\u00e4refter s\u00e5 ska vi konfigurera servern med Express.js och k\u00f6ra den nyskapade Todo-applikationen med GraphQL och Node.js.<\/p>\n<h3>Konfigurera och k\u00f6ra servern<\/h3>\n<p>Slutligen s\u00e5 ska vi konfigurera v\u00e5r server med hj\u00e4lp av biblioteket <code>apollo-server-express<\/code> som vi installerade tidigare.<\/p>\n<p><code>apollo-server-express<\/code> \u00e4r en enkel wrapper av Apollo Server f\u00f6r Express.js, Den rekommenderas eftersom den har utvecklats f\u00f6r att passa i Express.js-utveckling.<\/p>\n<p>Med hj\u00e4lp av de exempel som vi diskuterade ovan s\u00e5 ska vi konfigurera Express.js-servern s\u00e5 att den fungerar med det nyinstallerade <code>apollo-server-express<\/code>.<\/p>\n<p>Skapa en <strong>server.js<\/strong>-fil i rotkatalogen och klistra in f\u00f6ljande kod:<\/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>I koden ovan s\u00e5 har du framg\u00e5ngsrikt skapat din f\u00f6rsta CRUD GraphQL-server f\u00f6r Todos och Users. Du kan starta din utvecklingsserver och f\u00e5 tillg\u00e5ng till denna med hj\u00e4lp av <a href=\"http:\/\/localhost:300\/graphql\">http:\/\/localhost:3000\/graphql<\/a>. Om allt har lyckats s\u00e5 b\u00f6r du se sk\u00e4rmen nedan:<\/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=\"Verifieringssk\u00e4rmen.\" width=\"1600\" height=\"1116\"><figcaption class=\"wp-caption-text\">Verifieringssk\u00e4rmen.<\/figcaption><\/figure>\n<h2>Sammanfattning<\/h2>\n<p>GraphQL \u00e4r en modern teknik som st\u00f6ds av Facebook och som f\u00f6renklar det tr\u00e5kiga arbetet med att skapa storskaliga API: er med RESTful-arkitekturm\u00f6nster.<\/p>\n<p>Den h\u00e4r guiden har f\u00f6rklarat GraphQL och visat hur man utvecklar sitt f\u00f6rsta GraphQL API med Express.js.<\/p>\n<p>L\u00e5t oss veta vad du bygger med hj\u00e4lp av GraphQL i kommentarerna nedan.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GraphQL \u00e4r det nya modeordet inom API-utveckling. \u00c4ven om RESTful API: er fortfarande \u00e4r det mest popul\u00e4ra s\u00e4ttet att exponera data fr\u00e5n applikationer, s\u00e5 rymmer de &#8230;<\/p>\n","protected":false},"author":193,"featured_media":48297,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[784,798],"class_list":["post-48296","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-javascript-sjalvstudier","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>Bygga GraphQL API: er med Node<\/title>\n<meta name=\"description\" content=\"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.\" \/>\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\/se\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bygga GraphQL API: er med Node\" \/>\n<meta property=\"og:description\" content=\"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-02T11:56:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-21T09:18:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/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=\"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kaperskyguru\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Solomon Eseme\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\"},\"author\":{\"name\":\"Solomon Eseme\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\"},\"headline\":\"Bygga GraphQL API: er med Node\",\"datePublished\":\"2023-01-02T11:56:53+00:00\",\"dateModified\":\"2023-09-21T09:18:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\"},\"wordCount\":1665,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png\",\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\",\"name\":\"Bygga GraphQL API: er med Node\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png\",\"datePublished\":\"2023-01-02T11:56:53+00:00\",\"dateModified\":\"2023-09-21T09:18:48+00:00\",\"description\":\"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript-sj\u00e4lvstudier\",\"item\":\"https:\/\/kinsta.com\/se\/topics\/javascript-sjalvstudier\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Bygga GraphQL API: er med Node\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"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\/se\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2\",\"name\":\"Solomon Eseme\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/solomoneseme\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bygga GraphQL API: er med Node","description":"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.","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\/se\/blog\/graphql-nodejs\/","og_locale":"sv_SE","og_type":"article","og_title":"Bygga GraphQL API: er med Node","og_description":"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.","og_url":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2023-01-02T11:56:53+00:00","article_modified_time":"2023-09-21T09:18:48+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","type":"image\/png"}],"author":"Solomon Eseme","twitter_card":"summary_large_image","twitter_description":"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","twitter_creator":"@kaperskyguru","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Solomon Eseme","Ber\u00e4knad l\u00e4stid":"11 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/"},"author":{"name":"Solomon Eseme","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2"},"headline":"Bygga GraphQL API: er med Node","datePublished":"2023-01-02T11:56:53+00:00","dateModified":"2023-09-21T09:18:48+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/"},"wordCount":1665,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/","url":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/","name":"Bygga GraphQL API: er med Node","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","datePublished":"2023-01-02T11:56:53+00:00","dateModified":"2023-09-21T09:18:48+00:00","description":"Nyfiken p\u00e5 hur du anv\u00e4nder GraphQL med Node.js? Vi g\u00e5r igenom hela processen h\u00e4r med kodexempel och l\u00e4ttf\u00f6rst\u00e5eliga f\u00f6rklaringar.","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/01\/graphql-nodejs.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/graphql-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"JavaScript-sj\u00e4lvstudier","item":"https:\/\/kinsta.com\/se\/topics\/javascript-sjalvstudier\/"},{"@type":"ListItem","position":3,"name":"Bygga GraphQL API: er med Node"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","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\/se\/#\/schema\/person\/51c9c77fa35cf1ef9a46308358441ab2","name":"Solomon Eseme","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/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\/se\/blog\/author\/solomoneseme\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/48296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=48296"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/48296\/revisions"}],"predecessor-version":[{"id":50108,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/48296\/revisions\/50108"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/translations\/dk"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/48296\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/48297"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=48296"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=48296"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=48296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}