{"id":5036,"date":"2018-04-23T09:46:20","date_gmt":"2018-04-23T16:46:20","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5036"},"modified":"2025-06-13T20:15:00","modified_gmt":"2025-06-14T03:15:00","slug":"creating-a-graphql-application-with-node-js-and-a-nosql-database","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","title":{"rendered":"Criar um aplicativo GraphQL com Node.js e bancos de dados NoSQL"},"content":{"rendered":"<p>Tenho ouvido muitos rumores sobre o trabalho com <a href=\"https:\/\/graphql.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GraphQL<\/a> e NoSQL, internamente no Couchbase e externamente. Como esse parece ser um assunto muito discutido, pensei em passar algum tempo aprendendo sobre ele para ver como poderia ser \u00fatil na cria\u00e7\u00e3o de aplicativos da Web.<\/p>\n<p>Vindo do mundo das APIs RESTful, o GraphQL \u00e9 um conceito totalmente diferente para mim, embora tenha como objetivo resolver um problema semelhante de acesso e altera\u00e7\u00e3o de dados por meio de aplicativos voltados para o cliente. <span style=\"font-weight: 400\">Felizmente, o Node.js e os bancos de dados funcionam bem juntos, portanto, no exemplo de banco de dados GraphQL abaixo, usaremos <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/build-a-rest-api-with-node-js-express-and-couchbase\/\">usando Node.js<\/a> com<\/span> <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a> como nosso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/resources\/why-nosql\/\">Banco de dados NoSQL<\/a> camada.<\/p>\n<p><!--more--><\/p>\n<p>No momento, n\u00e3o sou um especialista em GraphQL. Venho desenvolvendo APIs RESTful com estruturas como Express e Hapi h\u00e1 muitos anos. Dito isso, vou tentar explicar como aprendi sobre elas.<\/p>\n<p>As APIs funcionam muito bem, mas quando se trata de obter as informa\u00e7\u00f5es de que voc\u00ea precisa delas, as coisas podem ser feitas melhor. Por exemplo, e se voc\u00ea precisar de um monte de dados n\u00e3o relacionados ou pouco relacionados para o seu cliente? Voc\u00ea cria um endpoint enorme que retorna muitos dados ou faz uma solicita\u00e7\u00e3o para cada endpoint de API que possa conter seus dados? E se voc\u00ea precisar de apenas um fragmento dos dados retornados de um determinado endpoint?<\/p>\n<p>\u00c9 aqui que o GraphQL entra em a\u00e7\u00e3o. Por meio da linguagem de consulta, voc\u00ea pode especificar exatamente quais dados deseja que sejam retornados ao cliente em um determinado momento, sem precisar escrever um endpoint para tudo.<\/p>\n<h2>Cria\u00e7\u00e3o de um novo aplicativo Node.js com o Express Framework<\/h2>\n<p>Usaremos o Node.js para criar uma interface para usar o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/processing-graphql-queries-with-java-spring-boot-and-nosql\/\">Consultas GraphQL<\/a>. Vamos come\u00e7ar criando um novo projeto, obtendo as depend\u00eancias e inicializando nosso projeto em prepara\u00e7\u00e3o para alguma l\u00f3gica real.<\/p>\n<p>Com o Node.js instalado, na linha de comando, execute:<\/p>\n<pre class=\"lang:default decode:true\">npm init -y\r\nnpm install couchbase --save\r\nnpm install express --save\r\nnpm install express-graphql --save\r\nnpm install graphql --save\r\nnpm install uuid --save<\/pre>\n<p>Os comandos acima inicializar\u00e3o um novo projeto criando um arquivo\u00a0<strong>package.json<\/strong> e instalando as depend\u00eancias necess\u00e1rias. Das depend\u00eancias, estamos instalando o Couchbase e um pacote para gerar cadeias de caracteres UUID que mais tarde representar\u00e3o nossas chaves de documento. Os outros pacotes est\u00e3o relacionados ao GraphQL e \u00e0 vincula\u00e7\u00e3o ao Express Framework.<\/p>\n<p>Crie um arquivo chamado\u00a0<strong>app.js<\/strong> em seu projeto e inclua o seguinte c\u00f3digo:<\/p>\n<pre class=\"lang:default decode:true\">const Express = require(\"express\");\r\nconst Couchbase = require(\"couchbase\");\r\nconst ExpressGraphQL = require(\"express-graphql\");\r\nconst BuildSchema = require(\"graphql\").buildSchema;\r\nconst UUID = require(\"uuid\");\r\n\r\nvar schema = BuildSchema(``);\r\n\r\nvar resolvers = { };\r\n\r\nvar app = Express();\r\n\r\napp.use(\"\/graphql\", ExpressGraphQL({\r\n    schema: schema,\r\n    rootValue: resolvers,\r\n    graphiql: true\r\n}));\r\n\r\napp.listen(3000, () =&gt; {\r\n    console.log(\"Listening at :3000\");\r\n});<\/pre>\n<p>Ainda n\u00e3o vamos nos preocupar em preencher nosso esquema e configurar nosso banco de dados. No c\u00f3digo acima, observe que importamos cada uma de nossas depend\u00eancias e inicializamos o Express. Tamb\u00e9m definimos um \u00fanico ponto de extremidade de API, que \u00e9 como vamos fazer com que o Couchbase e o GraphQL interajam. Essencialmente, emitiremos todas as consultas GraphQL para esse \u00fanico endpoint e ele responder\u00e1 com os dados corretos com base em nosso esquema e resolvedores.<\/p>\n<h2>Defini\u00e7\u00e3o de um esquema e resolvedores GraphQL<\/h2>\n<p>Agora que j\u00e1 temos a base do aplicativo, vamos definir um esquema e os resolvedores para realmente vincular os dados a poss\u00edveis consultas e tipos de dados.<\/p>\n<p>Para este exemplo, vamos criar um aplicativo simples de blog. Por esse motivo, pode fazer sentido ter os seguintes modelos de esquema:<\/p>\n<pre class=\"lang:default decode:true\">var schema = BuildSchema(`\r\n    type Account {\r\n        id: String,\r\n        firstname: String,\r\n        lastname: String,\r\n    }\r\n    tipo Blog {\r\n        id: String,\r\n        account: String!\r\n        title: String!\r\n        content: String\r\n    }\r\n`);<\/pre>\n<p>Sabemos que teremos contas e que teremos artigos de blog para uma determinada conta. O ponto de exclama\u00e7\u00e3o em qualquer tipo de dados significa que se trata de uma propriedade obrigat\u00f3ria.<\/p>\n<p>Agora precisamos conectar nosso modelo ao Couchbase para que possamos consultar os dados ou at\u00e9 mesmo criar dados.<\/p>\n<h2>Consulta e muta\u00e7\u00e3o de dados do Couchbase Server, o banco de dados NoSQL<\/h2>\n<p>Vamos supor que voc\u00ea j\u00e1 tenha <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a> em execu\u00e7\u00e3o. N\u00e3o h\u00e1 nenhum requisito especial de configura\u00e7\u00e3o do Couchbase para este exemplo espec\u00edfico.<\/p>\n<p>A primeira etapa \u00e9 conectar-se ao Couchbase Server a partir do aplicativo Node.js. Na se\u00e7\u00e3o\u00a0<strong>app.js<\/strong> adicione as seguintes linhas:<\/p>\n<pre class=\"lang:default decode:true\">var cluster = new Couchbase.Cluster(\"couchbase:\/\/localhost\");\r\ncluster.authenticate(\"example\", \"123456\");\r\nvar bucket = cluster.openBucket(\"example\");<\/pre>\n<p>As linhas acima pressup\u00f5em que o Node.js e o banco de dados - Couchbase, neste exemplo - estejam sendo executados no computador local. Vamos usar um Bucket chamado <code>exemplo<\/code> e uma conta de usu\u00e1rio RBAC chamada <code>exemplo<\/code>.<\/p>\n<p>Os modelos de dados para o GraphQL j\u00e1 est\u00e3o em vigor, mas ainda n\u00e3o definimos as poss\u00edveis consultas ou muta\u00e7\u00f5es. Vamos modificar o esquema em nosso aplicativo para que se pare\u00e7a com o seguinte:<\/p>\n<pre class=\"lang:default decode:true\">var schema = BuildSchema(`\r\n    type Query {\r\n        account(id: String!): Account,\r\n        accounts: [Account],\r\n        blog(id: String!): Blog,\r\n        blogs(account: String!): [Blog]\r\n    }\r\n    tipo Account {\r\n        id: String,\r\n        firstname: String,\r\n        lastname: String,\r\n    }\r\n    tipo Blog {\r\n        id: String,\r\n        account: String!\r\n        title: String!\r\n        content: String\r\n    }\r\n    tipo Muta\u00e7\u00e3o {\r\n        createAccount(firstname: String!, lastname: String!): Account\r\n        createBlog(account: String!, title: String!, content: String!): Blog\r\n    }\r\n`);<\/pre>\n<p>Tanto para as consultas quanto para as muta\u00e7\u00f5es, ser\u00e3o chamadas fun\u00e7\u00f5es especiais de resolu\u00e7\u00e3o que fazem o trabalho pesado. Como resultado, um <code>Conta<\/code> ou um <code>Blog<\/code> ser\u00e1 devolvido.<\/p>\n<p>Come\u00e7ando com as muta\u00e7\u00f5es, estamos esperando um <code>createAccount<\/code> que espera dois par\u00e2metros. Ela pode se parecer com o seguinte:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    createAccount: (data) =&gt; {\r\n        var id = UUID.v4();\r\n        data.type = \"account\";\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.insert(id, data, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve({ \"id\": id });\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>Observe que nossa fun\u00e7\u00e3o resolver tem apenas um par\u00e2metro, embora estiv\u00e9ssemos passando dois em nosso esquema. Todos os nossos par\u00e2metros de dados residir\u00e3o na se\u00e7\u00e3o <code>dados<\/code> vari\u00e1vel. A pr\u00f3pria fun\u00e7\u00e3o espera que retornemos uma promessa.<\/p>\n<p>Voc\u00ea notar\u00e1 que estamos retornando um <code>id<\/code> e nada mais. Lembre-se, esperamos um <code>Conta<\/code> a ser devolvido, mas nem todas as partes do <code>Conta<\/code> precisa estar presente. No entanto, talvez seja uma pr\u00e1tica melhor devolver tudo.<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    createBlog: (data) =&gt; {\r\n        var id = UUID.v4();\r\n        data.type = \"blog\";\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.insert(id, data, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve({ \"id\": id });\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>O <code>criarBlog<\/code> \u00e9 praticamente a mesma que a fun\u00e7\u00e3o anterior, com a exce\u00e7\u00e3o de que os dados de entrada s\u00e3o diferentes e a fun\u00e7\u00e3o <code>tipo<\/code> \u00e9 definida como outra coisa. Todas as nossas fun\u00e7\u00f5es estar\u00e3o no mesmo <code>solucionadores<\/code> objeto.<\/p>\n<p>Com as muta\u00e7\u00f5es fora do caminho, os dados podem ser consultados. Pegue o <code>conta<\/code> por exemplo:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    account: (data) =&gt; {\r\n        var id = data.id;\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.get(id, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result.value);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>Nada realmente diferente est\u00e1 acontecendo entre essa fun\u00e7\u00e3o de consulta espec\u00edfica e a fun\u00e7\u00e3o de muta\u00e7\u00e3o. Estamos esperando um <code>id<\/code> a ser passado e estamos usando-o para fazer uma pesquisa.<\/p>\n<p>Para recuperar todas as contas, podemos usar uma consulta N1QL:<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    accounts: () =&gt; {\r\n        var statement = \"SELECT META(account).id, account.* FROM `\" + bucket._name + \"` AS account WHERE account.type = 'account'\";\r\n        var query = Couchbase.N1qlQuery.fromString(statement);\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.query(query, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>Voc\u00ea consegue ver a tend\u00eancia agora quando se trata de consultar e alterar dados? Para concluir o trabalho, vamos dar uma olhada em nossas duas fun\u00e7\u00f5es finais, uma para obter um \u00fanico blog e outra para obter todos os blogs.<\/p>\n<pre class=\"lang:default decode:true\">var resolvers = {\r\n    blog: (data) =&gt; {\r\n        var id = data.id;\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.get(id, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result.value);\r\n            });\r\n        });\r\n    },\r\n    blogs: (dados) =&gt; {\r\n        var statement = \"SELECT META(blog).id, blog.* FROM `\" + bucket._name + \"` AS blog WHERE blog.type = 'blog' AND blog.account = $account\";\r\n        var query = Couchbase.N1qlQuery.fromString(statement);\r\n        return new Promise((resolve, reject) =&gt; {\r\n            bucket.query(query, { \"account\": data.account }, (error, result) =&gt; {\r\n                if(error) {\r\n                    return reject(error);\r\n                }\r\n                resolve(result);\r\n            });\r\n        });\r\n    }\r\n};<\/pre>\n<p>Nesse momento, nosso aplicativo est\u00e1 completo. Pelo menos completo o suficiente para este exemplo espec\u00edfico. Agora, provavelmente, devemos test\u00e1-lo com algumas consultas GraphQL.<\/p>\n<h2>Execu\u00e7\u00e3o de consultas GraphQL com a interface gr\u00e1fica<\/h2>\n<p>Se estiver usando o Node.js e o pacote GraphQL para o Express, voc\u00ea ter\u00e1 uma boa interface gr\u00e1fica para executar consultas. Navegue at\u00e9 https:\/\/localhost:3000\/graphql em seu navegador da Web e voc\u00ea ver\u00e1 algo parecido com o seguinte:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5038 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/04\/graphql-nodejs.png\" alt=\"\" width=\"1500\" height=\"679\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png 1500w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-300x136.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-1024x464.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-768x348.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs-1320x598.png 1320w\" sizes=\"auto, (max-width: 1500px) 100vw, 1500px\" \/><\/p>\n<p>Portanto, vamos criar uma consulta de muta\u00e7\u00e3o que inserir\u00e1 dados para n\u00f3s.<\/p>\n<pre class=\"lang:default decode:true\">muta\u00e7\u00e3o CreateAccount($firstname: String!, $lastname: String!) {\r\n  createAccount(firstname: $firstname, lastname: $lastname) {\r\n    id\r\n  }\r\n}<\/pre>\n<p>A muta\u00e7\u00e3o acima receber\u00e1 dois par\u00e2metros obrigat\u00f3rios e, em seguida, executar\u00e1 nosso <code>createAccount<\/code> passando cada um desses par\u00e2metros. Os par\u00e2metros podem ser definidos na fun\u00e7\u00e3o <strong>Vari\u00e1veis de consulta<\/strong> do GraphQL explorer. Os par\u00e2metros seriam mais ou menos assim:<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"firstname\": \"Erika\",\r\n  \"lastname\": \"Raboy\"\r\n}<\/pre>\n<p>Ap\u00f3s uma muta\u00e7\u00e3o bem-sucedida, obteremos o <code>id<\/code> que \u00e9 o que solicitamos. Depois de preencher nosso banco de dados com dados, poder\u00edamos fazer uma consulta GraphQL mais sofisticada, como a seguinte:<\/p>\n<pre class=\"lang:default decode:true\">consulta GetAccountData($id: String!) {\r\n  account(id: $id) {\r\n    firstname\r\n    lastname\r\n  }\r\n  blogs(account: $id) {\r\n    title\r\n    content\r\n  }\r\n}<\/pre>\n<p>Para a consulta acima, voc\u00ea passaria uma conta v\u00e1lida e ela retornaria as informa\u00e7\u00f5es da conta, bem como as informa\u00e7\u00f5es do blog que essa conta escreveu. Por meio das consultas GraphQL, voc\u00ea pode solicitar determinadas propriedades ou todas as propriedades, evitando que voc\u00ea fa\u00e7a v\u00e1rias solicita\u00e7\u00f5es.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Voc\u00ea acabou de ver como criar um banco de dados Node.js simples aproveitando o GraphQL em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a>. O fato de o GraphQL oferecer um meio de consultar os dados de que voc\u00ea precisa n\u00e3o elimina a necessidade de escrever consultas de qualidade que se comuniquem com o seu banco de dados. Lembre-se, o GraphQL \u00e9 apenas uma linguagem de consulta voltada para o cliente, n\u00e3o uma linguagem de consulta de banco de dados de back-end. Em outras palavras, deixe o Couchbase fazer o trabalho pesado quando fizer sentido.<\/p>\n<p>Se voc\u00ea quiser obter mais ajuda com o SDK do Node.js para o Couchbase, consulte o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">Portal do desenvolvedor do Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been hearing a lot of buzz around working with GraphQL and NoSQL, internally within Couchbase and externally. Since it sounds like a hot topic, I figured I&#8217;d spend some time learning about it to see how it could be [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1816,9327,1822,1812],"tags":[1393,2210,1543,1725],"ppma_author":[9032],"class_list":["post-5036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-server","category-javascript","category-node-js","category-n1ql-query","tag-api","tag-graphql","tag-javascript","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Creating a GraphQL Application With Node.js and a NoSQL Database<\/title>\n<meta name=\"description\" content=\"Learn GraphQL for querying in a NoSQL Node.js database application that&#039;s built for Couchbase. You&#039;ll also learn when to use GraphQL, and when not to.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create a GraphQL Application With Node.js, NoSQL Databases\" \/>\n<meta property=\"og:description\" content=\"Learn GraphQL for querying in a NoSQL Node.js database application that&#039;s built for Couchbase. You&#039;ll also learn when to use GraphQL, and when not to.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-23T16:46:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"679\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Create a GraphQL Application With Node.js, NoSQL Databases\",\"datePublished\":\"2018-04-23T16:46:20+00:00\",\"dateModified\":\"2025-06-14T03:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"},\"wordCount\":1265,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"API\",\"graphql\",\"javascript\",\"NoSQL Database\"],\"articleSection\":[\"Application Design\",\"Couchbase Server\",\"JavaScript\",\"Node.js\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\",\"name\":\"Creating a GraphQL Application With Node.js and a NoSQL Database\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-04-23T16:46:20+00:00\",\"dateModified\":\"2025-06-14T03:15:00+00:00\",\"description\":\"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a GraphQL Application With Node.js, NoSQL Databases\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating a GraphQL Application With Node.js and a NoSQL Database","description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","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:\/\/www.couchbase.com\/blog\/pt\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","og_locale":"pt_BR","og_type":"article","og_title":"Create a GraphQL Application With Node.js, NoSQL Databases","og_description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2018-04-23T16:46:20+00:00","article_modified_time":"2025-06-14T03:15:00+00:00","og_image":[{"width":1500,"height":679,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/04\/graphql-nodejs.png","type":"image\/png"}],"author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Create a GraphQL Application With Node.js, NoSQL Databases","datePublished":"2018-04-23T16:46:20+00:00","dateModified":"2025-06-14T03:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"},"wordCount":1265,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["API","graphql","javascript","NoSQL Database"],"articleSection":["Application Design","Couchbase Server","JavaScript","Node.js","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","url":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/","name":"Creating a GraphQL Application With Node.js and a NoSQL Database","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-04-23T16:46:20+00:00","dateModified":"2025-06-14T03:15:00+00:00","description":"Learn GraphQL for querying in a NoSQL Node.js database application that's built for Couchbase. You'll also learn when to use GraphQL, and when not to.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/creating-a-graphql-application-with-node-js-and-a-nosql-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create a GraphQL Application With Node.js, NoSQL Databases"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, defensor dos desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy \u00e9 um defensor das modernas tecnologias de desenvolvimento m\u00f3vel e da Web. Ele tem experi\u00eancia em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experi\u00eancias de desenvolvimento relacionadas a tornar o desenvolvimento m\u00f3vel e da Web mais f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy \u00e9 um defensor das modernas tecnologias de desenvolvimento m\u00f3vel e da Web. Ele tem experi\u00eancia em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experi\u00eancias de desenvolvimento relacionadas a tornar o desenvolvimento m\u00f3vel e da Web mais f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=5036"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5036\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=5036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5036"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}