Skip to content

Alguns códigos e anotações sobre o estudo da ferramenta GraphQL. Contém exemplos em Javascript e em Python.

Notifications You must be signed in to change notification settings

NadiaaOliverr/GraphQL-Fundamentos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introdução

  • O que é o GraphQL?
    • É uma linguagem de consulta e mutação de dados de API. Não necessariamente tem relação com SQL, com banco de dados. É possível usar o GraphQL sem nem existir um banco de dados.
      • Liberdade para montar as consultas pedindo exatamente o que você quer que o servidor te retorne.
      • Exemplo do youtube: quando entramos em um canal é possível ver várias playlists, cada vídeo mostra informações de likes, visualizações, etc... se fosse feito com REST, teria que ser feito uma chamada para cada coisa. Uma chamada para pegar as playlists, os vídeos, uma chamada para pegar os likes... Com Graphql montamos uma única consulta com tudo que precisamos.
      • A aplicação frontend irá dizer o que quer e em resposta a API graphQL devolve os dados que foram solicitados
    • GraphQL contras:
      • É mais complexo seu uso.
      • Problemas de cache pode acontecer.
      • Problemas de performance pode acontecer, porque dependendo da consulta, da profundidade que ela tenha, pode afetar uma quantidade grande de resolvers, podendo chegar até mesmo a derrubar o banco de dados.
  • O que o GraphQL resolve?
    • Ele resolve alguns problemas de uma API REST, como:
      • Under fetch: você precisa de algum tipo de informação e a API te devolve MENOS do que você precisa. Isso faz com que você tenha que fazer várias requisições e montar no client-side o objeto da forma que você precisa.
      • Over-fetch: você precisa de algum tipo de informação e a API te devolve MAIS do que você precisa, vindo dados desnecessários para o frontend. Obs: é possível trabalhar com o patter de Partial Response/Update para devolver apenas os dados pedidos.
      • Interfaces com usabilidade questionável: ou seja, ela será toda baseada conforme no que a API devolve, o que pode acarretar em muita navegação e pouco dado que de fato importa.
      • API que devolve somente o que uma tela específica precisa, o que prejudica a granularidade, navegabilidade e reuso dessa API.
      • Muitos endpoints para atender fins específicos, sendo que tem a tendência a ficar grande a URL. Enquanto no GraphQL usamos uma única URL apenas.

Anotações de codificação

  • Para testar as API em desenvolvimento podemos utilizar o Apollo Server, que nada mais é que do que um servidor GraphQL.

  • A exclamação nos types é para dizer que sempre irá retornar exatamente o tipo especificado, não aceitando valores nulos.

  • Por padrão, temos os seguites tipos de scalar: String, Int, Float, ID, Boolean

  • Em Query colocamos os pontos de entrada da API. É como se fosse os recursos(exemplo: /produtos) das API's REST's.

  • Exemplo de consulta GraphQL (com e sem parâmetro):

      usuario(id: 2) {
        nome
        id
      }
    
      produtoEmDestaque {
            nome preco desconto precoComDesconto
      }
      
  • Exemplo de mutation GraphQL (create):

     novoUsuario(
        nome: "Ana"
        email: "ana@ana.com"
        idade: 34
      ) {
        id nome email 
        perfil 
        { 
          nome 
        }
      }
    
  • Exemplo de mutation GraphQL (delete):

      excluirUsuario(id: 2) {
        nome id
      }
    
  • Fragments são utilizados para reutilização de dados, para evitar a repetição de campos. Exemplo de um fragment:

      query {
        usuario(id: 3) {
          ...usuarioCompleto
        }
    
        usuarios {
          ...usuarioCompleto
        }
      }
    
      # Fragment
      fragment usuarioCompleto on Usuario {
    
        id nome email idade salario vip
    
        perfil {
          nome
          id
        }
      }
  • Input: agrupar o que mandamos de argumento para os resolvers, exemplo de consulta com um input que chama dados:

      novoUsuario(
          dados: {
            nome: "Ana com Input"
            email: "anacinput@ana.com"
            idade: 34
          }
        ) {
          id nome email perfil { nome }
        }

Banco de dados com GraphQL

  • Dependências necessárias:
  • Criando as migrations: npx knex migrate:make nomedamigrate

About

Alguns códigos e anotações sobre o estudo da ferramenta GraphQL. Contém exemplos em Javascript e em Python.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published