<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rodrigo Kieffer</title>
    <description>The latest articles on DEV Community by Rodrigo Kieffer (@rodrigokieffer).</description>
    <link>https://dev.to/rodrigokieffer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F372042%2F3078f261-6ff6-4984-b7b0-297f30f216a4.jpeg</url>
      <title>DEV Community: Rodrigo Kieffer</title>
      <link>https://dev.to/rodrigokieffer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rodrigokieffer"/>
    <language>en</language>
    <item>
      <title>Introdução a GraphQL</title>
      <dc:creator>Rodrigo Kieffer</dc:creator>
      <pubDate>Wed, 20 May 2020 19:34:55 +0000</pubDate>
      <link>https://dev.to/rodrigokieffer/introducao-a-graphql-1lej</link>
      <guid>https://dev.to/rodrigokieffer/introducao-a-graphql-1lej</guid>
      <description>&lt;p&gt;GraphQL é uma especificação de Query Language para APIs baseada no conceito de &lt;a href="https://pt.wikipedia.org/wiki/Teoria_dos_grafos"&gt;grafos&lt;/a&gt;.&lt;br&gt;
Um grafo, possui vários pontos, chamados de nó e ligados uns aos outros.&lt;br&gt;
Cada nó pode ser entendido como um recurso do sistema.&lt;br&gt;
Um recurso pode ser um usuário, um cliente, uma pessoa e outro recurso pode ser o país do usuário, a peça fornecida pelo fornecedor, e assim por diante.&lt;/p&gt;

&lt;p&gt;Dessa forma, o GraphQL permite a ligação entre recursos do sistema em forma de grafo.&lt;/p&gt;

&lt;p&gt;O GraphQL também permite que as interfaces de usuário (clientes) interajam declarativamente com dados e as isolem de como esses dados são resolvidos no servidor. Quem controla quais informações são necessárias é o cliente e não mais o servidor, conforme estamos acostumados com o REST.&lt;/p&gt;

&lt;p&gt;GraphQL é agnóstico de banco de dados, isso significa que você pode utilizar qualquer banco de dados em sua API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Que problemas o GraphQL resolve?
&lt;/h3&gt;

&lt;p&gt;Criada pela equipe do Facebook em 2012, GraphQL começou a ser usada em seus aplicativos, e em 2015 a especificação se tornou &lt;em&gt;open source&lt;/em&gt; e várias empresas adotaram a tecnologia desde então.&lt;/p&gt;

&lt;p&gt;Hoje em dia muitas empresas usam o GraphQL, como Facebook, Amazon, GitHub, Twitter, PayPal, The New York Times, KLM, GetNinjas, Dailymotion, Shopify e Pinterest. Até a própria Netflix, que possui um projeto próprio, chamado &lt;em&gt;Falcor&lt;/em&gt;, hoje em dia também utiliza o GraphQL.&lt;/p&gt;

&lt;p&gt;Segundo &lt;a href="https://twitter.com/leeb?lang=en"&gt;Lee Byron&lt;/a&gt;, um dos desenvolvedores do GraphQL, o problema que o Facebook enfrentava e que serviu de motivação para criar a solução, era obter os dados necessários para o feed de notícias em dispositivos móveis, e usando conexões de rede lentas.&lt;/p&gt;

&lt;p&gt;Dentro de cada post tinha que vir uma lista dos usuários que curtiram. Dentro de cada objeto de usuário tem que vir o nome, foto do perfil, link para o perfil, se o usuário já é seu amigo, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YtpmBTr0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v5kfm9zhvhfcyc2xfp98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YtpmBTr0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v5kfm9zhvhfcyc2xfp98.png" alt="Rest and GraphQL Flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao invés de ter que ficar criando uma API para cada estrutura diferente de dados e depois juntar esses dados, que tal simplesmente dizer a “alguém” o que você precisa? Esse “alguém” é o GraphQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefícios
&lt;/h3&gt;

&lt;p&gt;Alguns benefícios que uso do GraphQL podem trazer.&lt;/p&gt;

&lt;h4&gt;
  
  
  Performance
&lt;/h4&gt;

&lt;p&gt;Ao utilizar o GraphQL as requisições se tornam mais rápidas pois o &lt;em&gt;payload&lt;/em&gt; trafegado na rede é reduzido, afinal será enviado apenas as informações necessárias.&lt;/p&gt;

&lt;p&gt;Em um cenário com REST podemos precisar de mais de uma requisição para retornar as informações necessárias. Sendo assim o GraphQL tem um ganho para as aplicações e esse ganho é ainda maior em redes mais lentas ou limitadas, como as redes móveis por exemplo.&lt;/p&gt;

&lt;h4&gt;
  
  
  Versionless
&lt;/h4&gt;

&lt;p&gt;No GraphQL temos o conceito de ser &lt;em&gt;versionless&lt;/em&gt;, ou seja, sem controle de versão para a API, bastando estender o Schema para adicionar novas informações sem impactar as aplicações antigas, que não utilizarão essas informações.&lt;/p&gt;

&lt;p&gt;Caso seja necessário remover um atributo futuramente, coloque-o como &lt;em&gt;deprecated&lt;/em&gt; indicando qual novo atributo deve ser usado e que futuramente não haverá mais o atributo deprecated no Schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8q8bkGYK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/91ellkf5kv9nn3o7cdja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8q8bkGYK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/91ellkf5kv9nn3o7cdja.png" alt="GraphQL Versionless"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Princípios Segundo a empresa Apollo
&lt;/h4&gt;

&lt;p&gt;A empresa Apollo estima que seu framework seja utilizado em mais de 90% das implementações de GraphQL e eles possuem alguns princípios de boas práticas que listei abaixo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Princípios de Integridade:&lt;/strong&gt; Garantir que o Schema GraphQL seja bem definido, estável e consistente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GraphQL Schema único — A empresa deve possuir um GraphQL Schema unificado ao invés de um por equipe.&lt;/li&gt;
&lt;li&gt;Implementação compartilhada — A implementação do GraphQL Schema deve ser compartilhada entre as equipes/times.&lt;/li&gt;
&lt;li&gt;Rastreie o Schema em Registros — Deve haver uma única fonte verdadeira para rastrear o GraphQL Schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Princípios de Agilidade:&lt;/strong&gt; Distribuir e adaptar-se rapidamente as mudanças necessárias.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Schema Abstrato e Orientado a Demanda — O esquema deve agir como uma camada de abstração que fornece flexibilidade aos consumidores, ocultando os detalhes da implementação.&lt;/li&gt;
&lt;li&gt;Abordagem Ágil para o desenvolvimento dos Schemas — O esquema deve ser construído de forma incremental com base nos requisitos reais e evoluir ao longo do tempo.&lt;/li&gt;
&lt;li&gt;Melhorar o Desempenho de forma Iterativa — O gerenciamento de desempenho deve ser um processo contínuo, adaptando-se às mudanças nas cargas de consulta e nas implementações de serviços.&lt;/li&gt;
&lt;li&gt;Use os Metadados para Capacitar os Desenvolvedores — Os desenvolvedores devem ter conhecimento da API GraphQL durante todo o processo de desenvolvimento.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Princípios de Operação:&lt;/strong&gt; Implementar a API GraphQL com segurança para produção.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Acesso e Controle de Demanda — Conceda acesso por cliente e gerencie o que e como poderão acessá-lo.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Log&lt;/em&gt; Estruturado — Capture &lt;em&gt;logs&lt;/em&gt; estruturados de todas as operações e aproveite-os como ferramenta para entender o uso da API GraphQL.&lt;/li&gt;
&lt;li&gt;Separe a Camada GraphQL da Camada de Serviço — Adote uma arquitetura em camadas com a funcionalidade da API GraphQL em uma camada separada, em vez de ser incorporada em todos os serviços.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5 motivos para adotar GraphQL em seus projetos
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;GraphQL possui Schema fortemente tipado — O GraphQL Schema é a “espinha dorsal” da API GraphQL, ele define as operações (&lt;em&gt;query&lt;/em&gt;, &lt;em&gt;mutations&lt;/em&gt; e &lt;em&gt;subscriptions&lt;/em&gt;) suportadas pela API, incluindo argumentos de entrada e respostas. Pode-se dizer que o Schema é o contrato entre o cliente e a API.&lt;/li&gt;
&lt;li&gt;Não há mais &lt;em&gt;overfetching&lt;/em&gt; ou &lt;em&gt;underfetching&lt;/em&gt; — Como o cliente diz quais dados ele precisa receber, os problemas de receber dados desnecessários (&lt;em&gt;overfetching&lt;/em&gt;) ou precisar de mais de uma requisão por não ter todos os dados em apenas uma chamada (&lt;em&gt;underfetching&lt;/em&gt;) são solucionados e esse é considerado um dos maiores benefícios do GraphQL.
3 .GraphQL permite o desenvolvimento rápido de produtos — Existe um ganho muito grande, principalmente para equipes de frontend. Com GraphQL é possível redesenhar completamente a UI de um frontend sem ter que alterar nada no backend. Com &lt;a href="https://github.com/APIs-guru/graphql-faker"&gt;GraphQL Faker&lt;/a&gt; os times de frontend ainda podem utilizar mocks das APIs.&lt;/li&gt;
&lt;li&gt;APIs GraphQL Compostas — O Schema permite combinar e mesclar várias APIs GraphQL em apenas uma. Semelhante aos componentes React que podem ser compostos por componentes existentes, A API GraphQL pode ser composta de outras APIs. Isso é extremamente benéfico para os clientes, caso contrários teriam que acessar vários endpoints de API GraphQL.&lt;/li&gt;
&lt;li&gt;Ecossistema de código aberto e uma comunidade incrível — GraphQL foi oficialmente lançado pelo Facebook em 2012 e se tornou open source em 2015, um tempo bem curto, e mesmo assim é incrível o quanto todo o ecossistema GraphQL amadureceu desde então.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://graphql.org/"&gt;GraphQL: A query language for APIs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.howtographql.com/"&gt;How to GraphQL - The Fullstack Tutorial for GraphQL&lt;/a&gt;&lt;br&gt;
&lt;a href="https://principledgraphql.com/"&gt;Principled GraphQL&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.prisma.io/blog/top-5-reasons-to-use-graphql-b60cfa683511"&gt;Top 5 Reasons to Use GraphQL | Prisma&lt;/a&gt;&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>node</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
