{"id":12987,"date":"2018-03-23T09:05:34","date_gmt":"2018-03-23T12:05:34","guid":{"rendered":"http:\/\/www.impacta.com.br\/blog\/?p=12987"},"modified":"2018-03-23T09:05:34","modified_gmt":"2018-03-23T12:05:34","slug":"introducao-ao-graphql-a-linguagem-de-consulta-do-facebook","status":"publish","type":"post","link":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/","title":{"rendered":"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook"},"content":{"rendered":"<p><span style=\"font-size: 14pt;\">Sem d\u00favidas, o <a href=\"https:\/\/graphql.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GraphQL <\/a>\u00e9 o novo hype do momento e, com certeza, voc\u00ea j\u00e1 ouviu falar que ele est\u00e1 chegando para dominar o mundo de cria\u00e7\u00e3o de APIs, n\u00e3o \u00e9 mesmo?<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Para quem ainda n\u00e3o ouviu sobre, o GraphQL \u00e9 uma tecnologia que se originou do Facebook, o que fez com que sua fama crescesse ferozmente. Muito interessante e \u00fatil, a ferramenta serve como uma m\u00e3o na roda na hora de criarmos uma API que vai precisar ser alterada para retornar mais ou menos dados, mais ou menos relacionamentos, etc.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Sem d\u00favidas \u00e9 uma tecnologia que est\u00e1 se espalhando muito r\u00e1pido e, se voc\u00ea est\u00e1 procurando vagas de trabalhos em startups, \u00e9 certo que j\u00e1 viu muitas empresas pedindo conhecimento nele. N\u00e3o \u00e9?<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\"><strong>Introdu\u00e7\u00e3o ao GraphQL<\/strong><\/span><\/h2>\n<p><span style=\"font-size: 14pt;\">O GraphQL \u00e9 uma ferramenta baseada em requisi\u00e7\u00e3o de dados &#8211; Query Language, e que permite ser bem espec\u00edfico.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\"><strong>Mas como?<\/strong> <\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Vamos a um exemplo: na p\u00e1gina principal do seu blog, voc\u00ea n\u00e3o precisa de todos os dados de um post, e \u00e0s vezes, precisa apenas do t\u00edtulo e do conte\u00fado. Em uma api rest voc\u00ea teria que criar um endpoint s\u00f3 para isso, ou ent\u00e3o, fazer um monte de verifica\u00e7\u00f5es no seu <a title=\"Desenvolvedor: Front-End, Back-End ou Full Stack?\" href=\"https:\/\/www.impacta.com.br\/blog\/2017\/10\/25\/desenvolvedor-front-end-back-end-ou-full-stack\/\" target=\"_blank\" rel=\"noopener noreferrer\">back-end<\/a> para retornar somente aquilo que foi pedido, certo? J\u00e1 com GraphQL voc\u00ea consegue fazer esse pedido sem muita dor de cabe\u00e7a.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">No entanto, o GraphQL n\u00e3o \u00e9 feito s\u00f3 de queries. Com ele tamb\u00e9m \u00e9 poss\u00edvel executar mutations, que s\u00e3o respons\u00e1veis pela inser\u00e7\u00e3o e altera\u00e7\u00e3o de dados.<\/span><\/p>\n<h3><span style=\"font-size: 14pt;\"><strong>Aplicando o GraphQL<\/strong><\/span><\/h3>\n<p><span style=\"font-size: 14pt;\">Vamos \u00e0 um exemplo de GraphQL com NodeJS para que voc\u00ea possa ter uma ideia melhor do que estou fazendo. <\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Acesse-o, clone-o e o execute. Use este post apenar como um guia pois ele s\u00f3 funcionar\u00e1 com o c\u00f3digo. (Todo c\u00f3digo est\u00e1 dispon\u00edvel em\u00a0<a href=\"https:\/\/github.com\/arthurmoro\/graphql\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/arthurmoro\/graphql<\/a>).<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">N\u00e3o vou entrar muito em detalhes de depend\u00eancias e etc., pois tudo isso est\u00e1 dispon\u00edvel no reposit\u00f3rio do GitHub que deixei acima, ok?<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Eu segui a metodologia de separar todo o c\u00f3digo do GraphQL em pequenos arquivos para melhorar a compreens\u00e3o e manutenibilidade.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Primeiro eu verifiquei quais os dados a minha API de blog iria precisar (Voc\u00ea precisa especificar isso para que o desenvolvimento ocorra bem). Com essa especifica\u00e7\u00e3o em m\u00e3os, eu criei 3 tipos de dados:<\/span><\/p>\n<ul>\n<li><strong><span style=\"font-size: 14pt;\">Autor<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt;\">Coment\u00e1rios<\/span><\/strong><\/li>\n<li><strong><span style=\"font-size: 14pt;\">Post<\/span><\/strong><\/li>\n<\/ul>\n<p><span style=\"font-size: 14pt;\">Para criar um tipo, voc\u00ea dever\u00e1 seguir a documenta\u00e7\u00e3o do GraphQL para Javascript.<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Como podemos ver no exemplo do tipo Post:<\/span><\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_J4muKVLzptjjnDp_vKV8Zw.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12995\" title=\"GraphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_J4muKVLzptjjnDp_vKV8Zw.png\" alt=\"GraphQL\" width=\"600\" height=\"550\" \/><\/a><\/p>\n<p style=\"text-align: center;\">\n<p style=\"text-align: center;\">Trecho de c\u00f3digo que representa a cria\u00e7\u00e3o de tipos de objetos do GraphQL (c\u00f3digo se encontra no link: https:\/\/raw.githubusercontent.com\/arthurmoro\/graphql\/master\/src\/schema\/types\/Post.js)<\/p>\n<p style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Na linha:\u00a0<span style=\"color: #3366ff;\">export<\/span> <\/p>\n<p><span style=\"color: #cc99ff;\">const Post<\/span> = new <span style=\"color: #800080;\"><strong>GraphQLObjectType<\/strong><\/span><\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Eu exporto uma nova\u00a0inst\u00e2ncia de um tipo de Objeto do GraphQL<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Na linha:\u00a0<strong>name<\/strong>:\u00a0\u201c<span style=\"color: #008000;\"><strong>Post<\/strong><\/span>\u201d<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Eu dou o nome de Post para o tipo do Objeto.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Logo depois em\u00a0\u201c<strong>fields<\/strong>&#8221; eu\u00a0\u201cseto\u201d todos os campos que o meu Objeto do tipo post possui.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">No campo\u00a0\u201c<strong>Author<\/strong>\u201d e\u00a0\u201c<strong>Comments<\/strong>\u201d podemos perceber algo diferente, certo? Aqui, buscamos as refer\u00eancias do post. Podemos dizer que nosso post possui um Autor e os Coment\u00e1rios, certo? E \u00e9 isso que esse campo faz. O\u00a0\u201c<strong>resolver<\/strong>\u201d destes campos nos traz objetos a quais este post \u00e9 relacionado, e voc\u00ea n\u00e3o precisa fazer isso na m\u00e3o.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Abaixo disso, observamos a linha:\u00a0<span style=\"color: #3366ff;\">export<\/span> <span style=\"color: #cc99ff;\">const PostInputType<\/span> = <span style=\"color: #800080;\">new\u00a0<\/span><\/span><span style=\"color: #800080;\"><strong>GraphQLInputObjectType<\/strong><\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Que exporta uma vari\u00e1vel que est\u00e1 instanciando um novo <strong>Objecto<\/strong> do tipo <strong>Input<\/strong> do <strong>GraphQL.\u00a0<\/strong>Esta linha \u00e9 a encarregada de criar um tipo de dados que efetuara a <strong>Mutation<\/strong>. Ou seja,\u00a0inser\u00e7\u00e3o de Posts em nossa base de dados.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Ap\u00f3s implementar os nossos Tipos de vari\u00e1veis, vamos implementar as nossas queries, ou seja, as buscas que o nosso GraphQL ser\u00e1 capaz de efetuar.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Neste exemplo criei 3 tipos de queries. Uma para <strong>Posts <\/strong>(retornar\u00e1 todos os posts), <strong>Post <\/strong>(retornar\u00e1 um post atrav\u00e9s de um ID) e <strong>Author<\/strong> (retornar\u00e1 um autor atrav\u00e9s de um id e tamb\u00e9m todos os seus posts).<\/span><\/p>\n<p style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Para exemplificar destrincharei a busca de UM post. Assim teremos ideia de como enviar argumentos.<\/span><\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_lFbxOwBa5RDGegh12hc2Nw.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12997\" title=\"2graphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_lFbxOwBa5RDGegh12hc2Nw.png\" alt=\"2graphQL\" width=\"600\" height=\"395\" \/><\/a><\/p>\n<p style=\"text-align: center;\">\n<p style=\"text-align: center;\">Trecho de c\u00f3digo que representa a declara\u00e7\u00e3o de uma query no GraphQL (c\u00f3digo se encontra no link: https:\/\/raw.githubusercontent.com\/arthurmoro\/graphql\/master\/src\/schema\/queries\/post.js)<\/p>\n<div><span style=\"font-size: 14pt;\">Vamos l\u00e1, exportaremos um objeto que conter\u00e1:\u00a0<\/span><\/div>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"font-size: 14pt;\">O\u00a0nome que ser\u00e1 retornado &#8211; \u2018post\u2019.<\/span><\/li>\n<li><span style=\"font-size: 14pt;\">Dentro do objeto post temos o tipo do retorno. Neste caso \u00e9 Post, aquele tipo que criamos logo ali em cima.<\/span><\/li>\n<li><span style=\"font-size: 14pt;\">Description \u00e9 a descri\u00e7\u00e3o da\u00a0query, ela ir\u00e1 aparecer no playground do GraphQL (<em>explicarei mais pra frente<\/em>)<\/span><\/li>\n<li><span style=\"font-size: 14pt;\">Esta nossa\u00a0query recebe um argumento id que \u00e9 no tipo inteiro e\u00a0n\u00e3o pode ser nulo.<\/span><\/li>\n<li><span style=\"font-size: 14pt;\">E, por fim, em resolver, buscaremos o post que pertence ao id.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-size: 14pt;\">Agora, vamos ver como que fazemos uma <strong>Mutation<\/strong>.\u00a0<\/span><\/h3>\n<div style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Vamos criar a mutation para inserir um Post, ok?<\/span><\/div>\n<div style=\"text-align: center;\"><\/div>\n<div style=\"text-align: center;\">\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_AmtN4QORbJ_IZjbabzh4_Q.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12998\" title=\"3 GraphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_AmtN4QORbJ_IZjbabzh4_Q.png\" alt=\"3 GraphQL\" width=\"600\" height=\"278\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Trecho de c\u00f3digo que representa a cria\u00e7\u00e3o de uma Mutation no GraphQL (c\u00f3digo se encontra no link: https:\/\/raw.githubusercontent.com\/arthurmoro\/graphql\/master\/src\/schema\/mutations\/addPost.js)<\/p>\n<\/div>\n<div style=\"text-align: center;\"><\/div>\n<div>\n<div style=\"text-align: left;\"><span style=\"color: #333333;\"><span style=\"font-size: 14pt;\">Agora, vamos estudar essas linhas. Como vimos na query acima, esta aqui possui as mesmas coisas:\u00a0O <strong>nome<\/strong> da Mutation (addPost), o <strong>tipo<\/strong> (Post), a <strong>descri\u00e7\u00e3o<\/strong>, os <strong>argumentos<\/strong> e o <strong>resolver<\/strong>.<\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<div><\/div>\n<div><span style=\"color: #333333; font-size: 14pt;\">O tipo aqui \u00e9 um PostInput, aquele que criamos l\u00e1 em cima junto ao tipo do post, e o resolve vai executar uma\u00a0fun\u00e7\u00e3o com os dados do input para que o mesmo seja inserido no nosso banco de dados.<\/span><\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: center;\"><\/div>\n<div style=\"text-align: left;\"><span style=\"color: #333333; font-size: 14pt;\">Finalmente, agora, podemos criar o nosso\u00a0schema e importar todas as nossas queries e mutations para o GraphQL.<\/span><\/div>\n<div>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_wnJ7Z4KxZvGjwTyZZUlHDQ.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-12999\" title=\"4 GraphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_wnJ7Z4KxZvGjwTyZZUlHDQ.png\" alt=\"4 GraphQL\" width=\"600\" height=\"587\" \/><\/a><\/p>\n<p style=\"text-align: center;\">\n<p style=\"text-align: center;\">C\u00f3digo que representa a cria\u00e7\u00e3o de um Schema no GraphQL (c\u00f3digo se encontra no link: https:\/\/raw.githubusercontent.com\/arthurmoro\/graphql\/master\/src\/schema\/index.js)<\/p>\n<div>\n<div><span style=\"font-size: 14pt;\">Aqui neste arquivo vamos importar todas as nossas queries e mutations para que possamos inseri-las em nosso Schema do GraphQL.<\/span><\/div>\n<p>&nbsp;<\/p>\n<div><\/div>\n<div><span style=\"font-size: 14pt;\">Depois desta trabalheira toda&#8230; UFA! vamos importar esse Schema em nossa \u00edndex e criar um middleware que vai execut\u00e1-la em um endpoint de nossa escolha.\u00a0Para exemplificar utilizei o <strong>GraphiQL<\/strong>, mas existem outros playgrounds no mercado.<\/span><\/div>\n<p>&nbsp;<\/p>\n<div><\/div>\n<div style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Para que possamos utilizar o playground, vou utilizar o express como um framework NodeJS e o express-graphql para nosso endpoint execute o graphql sem muita dificuldade.\u00a0Para que tudo funcione, importe as depend\u00eancias e adicione as linhas do nosso middleware:<\/span><\/div>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_0roa97rkAWejH-xBt4L4ag.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-13000\" title=\"5 GraphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_0roa97rkAWejH-xBt4L4ag.png\" alt=\"5 GraphQL\" width=\"600\" height=\"406\" \/><\/a><\/p>\n<div>\n<div style=\"text-align: center;\"><\/div>\n<div>\n<div style=\"text-align: left;\"><span style=\"font-size: 14pt;\">Agora, execute o comando npm run serve e acesse, no seu browser, o endpoint: \/graphql.<\/span><\/div>\n<div><\/div>\n<div style=\"text-align: left;\"><strong><span style=\"font-size: 14pt;\">Execute uma query para retornar um post:<\/span><\/strong><\/div>\n<div style=\"text-align: center;\"><\/div>\n<div style=\"text-align: center;\">\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_uk70BcZgtvNGjrMs7briaQ.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-13001\" title=\"6GraphQL\" src=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2018\/03\/1_uk70BcZgtvNGjrMs7briaQ.png\" alt=\"6GraphQL\" width=\"600\" height=\"283\" \/><\/a><\/p>\n<p style=\"text-align: center;\">\n<p style=\"text-align: center;\">Exemplo de query do GraphQL. Para ver este exemplo, rode o servidor localmente, acesse o endere\u00e7o: https:\/\/localhost:4000\/graphql e execute a query: {post(id:1){id, title, content, comments { name, content } } }<\/p>\n<\/div>\n<div style=\"text-align: left;\"><strong><span style=\"font-size: 14pt;\">Se tudo correr bem o retorno ser\u00e1:<\/span><\/strong><\/div>\n<div><span style=\"font-size: 14pt;\">{<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0&#8220;data&#8221;: {<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0&#8220;post&#8221;: {<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;title&#8221;: &#8220;My first blog post&#8221;,<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;content&#8221;: &#8220;This is my very first blog post. Hope you like it!&#8221;<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">}<\/span><\/div>\n<div><\/div>\n<p>&nbsp;<\/p>\n<div><strong><span style=\"font-size: 14pt;\">Se voc\u00ea estiver executando atrav\u00e9s do c\u00f3digo do meu reposit\u00f3rio, adicione o autor na chamada:<\/span><\/strong><\/div>\n<div><span style=\"font-size: 14pt;\">query{<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0post(id: 1){<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0content<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0author{<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">}<\/span><\/div>\n<div><\/div>\n<p>&nbsp;<\/p>\n<div><strong><span style=\"font-size: 14pt;\">E\u00a0ver\u00e1 que o resultado agora conter\u00e1 o nome do autor do post:<\/span><\/strong><\/div>\n<div><\/div>\n<div><span style=\"font-size: 14pt;\">{<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0&#8220;data&#8221;: {<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0&#8220;post&#8221;: {<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;title&#8221;: &#8220;My first blog post&#8221;,<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;content&#8221;: &#8220;This is my very first blog post. Hope you like it!&#8221;,<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;author&#8221;: {<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;Xavier Decuyper&#8221;<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"font-size: 14pt;\">}<\/span><\/div>\n<div><\/div>\n<p>&nbsp;<\/p>\n<div><span style=\"font-size: 14pt;\">Muito legal, n\u00e9?<\/span><\/div>\n<p>&nbsp;<\/p>\n<div><\/div>\n<div><span style=\"font-size: 14pt;\"><span style=\"font-size: 14pt;\">Agora \u00e9 s\u00f3 aprofundar os estudar e colocar isso em produ\u00e7\u00e3o. Tenho certeza que, se bem usado, ir\u00e1 facilitar sua vida.\u00a0Lembrando que o exemplo foi realizado usando NodeJS, por\u00e9m, GraphQL n\u00e3o serve somente para o Javascript, ok?\u00a0<\/span>No site do GraphQL temos exemplo para v\u00e1rias outras linguagens.<\/span><\/div>\n<p>&nbsp;<\/p>\n<div><span style=\"font-size: 14pt;\">Vamos codar, devs!<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sharing-default-minimal post-bottom\"><div class=\"nectar-social default\" data-position=\"\" data-rm-love=\"0\" data-color-override=\"override\"><div class=\"nectar-social-inner\"><a href=\"#\" class=\"nectar-love\" id=\"nectar-love-12987\" title=\"Love this\"> <i class=\"icon-salient-heart-2\"><\/i><span class=\"love-text\">Love<\/span><span class=\"total_loves\"><span class=\"nectar-love-count\">0<\/span><\/span><\/a><a class='facebook-share nectar-sharing' href='#' title='Share this'> <i class='fa fa-facebook'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='twitter-share nectar-sharing' href='#' title='Share this'> <i class='fa icon-salient-x-twitter'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='linkedin-share nectar-sharing' href='#' title='Share this'> <i class='fa fa-linkedin'><\/i> <span class='social-text'>Share<\/span> <\/a><a class='pinterest-share nectar-sharing' href='#' title='Pin this'> <i class='fa fa-pinterest'><\/i> <span class='social-text'>Pin<\/span> <\/a><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Sem d\u00favidas, o GraphQL \u00e9 o novo hype do momento e, com certeza, voc\u00ea j\u00e1 ouviu falar que ele est\u00e1 chegando para dominar o mundo de cria\u00e7\u00e3o de APIs, n\u00e3o \u00e9 mesmo? Para quem ainda n\u00e3o ouviu sobre, o GraphQL \u00e9 uma tecnologia que se originou do Facebook, o que fez com que sua fama [&hellip;]<\/p>\n","protected":false},"author":37,"featured_media":16891,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[119,579,580],"class_list":["post-12987","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","tag-banco-de-dados","tag-graphql","tag-nosql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook<\/title>\r\n<meta name=\"description\" content=\"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/\" \/>\r\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook\" \/>\r\n<meta property=\"og:description\" content=\"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Blog Impacta - Dicas e Not\u00edcias sobre Carreira\" \/>\r\n<meta property=\"article:published_time\" content=\"2018-03-23T12:05:34+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"850\" \/>\r\n\t<meta property=\"og:image:height\" content=\"284\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"Arthur Moro\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arthur Moro\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/\",\"name\":\"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook\",\"isPartOf\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg\",\"datePublished\":\"2018-03-23T12:05:34+00:00\",\"author\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/4df1541a44120dcb10201def6125b351\"},\"description\":\"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg\",\"contentUrl\":\"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg\",\"width\":850,\"height\":284},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.impacta.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#website\",\"url\":\"https:\/\/www.impacta.com.br\/blog\/\",\"name\":\"Blog Impacta - Dicas e Not\u00edcias sobre Carreira\",\"description\":\"Dicas, Not\u00edcias e Conte\u00fados sobre Carreira, Tecnologia, Design, Gest\u00e3o e Marketing. Conhe\u00e7a e Acompanhe o Blog Impacta\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.impacta.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/4df1541a44120dcb10201def6125b351\",\"name\":\"Arthur Moro\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4cd7a111ae041da99027d363f5081986?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4cd7a111ae041da99027d363f5081986?s=96&d=mm&r=g\",\"caption\":\"Arthur Moro\"},\"url\":\"https:\/\/www.impacta.com.br\/blog\/author\/arthur-moro\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook","description":"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!","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.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/","og_locale":"pt_BR","og_type":"article","og_title":"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook","og_description":"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!","og_url":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/","og_site_name":"Blog Impacta - Dicas e Not\u00edcias sobre Carreira","article_published_time":"2018-03-23T12:05:34+00:00","og_image":[{"width":850,"height":284,"url":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg","type":"image\/jpeg"}],"author":"Arthur Moro","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Arthur Moro","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/","url":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/","name":"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook","isPartOf":{"@id":"https:\/\/www.impacta.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage"},"image":{"@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage"},"thumbnailUrl":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg","datePublished":"2018-03-23T12:05:34+00:00","author":{"@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/4df1541a44120dcb10201def6125b351"},"description":"Arthur Moro, Desenvolvedor Full Stack, explica como come\u00e7ar a utilizar o GraphQL com NodeJS. Confira!","breadcrumb":{"@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#primaryimage","url":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg","contentUrl":"https:\/\/www.impacta.com.br\/blog\/wp-content\/uploads\/2020\/04\/GraphQL_arthurMoro.jpg","width":850,"height":284},{"@type":"BreadcrumbList","@id":"https:\/\/www.impacta.com.br\/blog\/introducao-ao-graphql-a-linguagem-de-consulta-do-facebook\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.impacta.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Introdu\u00e7\u00e3o ao GraphQL: a linguagem de consulta do Facebook"}]},{"@type":"WebSite","@id":"https:\/\/www.impacta.com.br\/blog\/#website","url":"https:\/\/www.impacta.com.br\/blog\/","name":"Blog Impacta - Dicas e Not\u00edcias sobre Carreira","description":"Dicas, Not\u00edcias e Conte\u00fados sobre Carreira, Tecnologia, Design, Gest\u00e3o e Marketing. Conhe\u00e7a e Acompanhe o Blog Impacta","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.impacta.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/4df1541a44120dcb10201def6125b351","name":"Arthur Moro","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.impacta.com.br\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4cd7a111ae041da99027d363f5081986?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4cd7a111ae041da99027d363f5081986?s=96&d=mm&r=g","caption":"Arthur Moro"},"url":"https:\/\/www.impacta.com.br\/blog\/author\/arthur-moro\/"}]}},"acf":{"post_description":null,"capa_mobile":null},"_links":{"self":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts\/12987","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/comments?post=12987"}],"version-history":[{"count":0,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/posts\/12987\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/media\/16891"}],"wp:attachment":[{"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/media?parent=12987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/categories?post=12987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.impacta.com.br\/blog\/wp-json\/wp\/v2\/tags?post=12987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}