Jump to section

GraphQL: linguagem de consulta para APIs

Copiar URL

Relatório Global Tech Trends 2024

A tecnologia está passando por uma acelerada transformação, gerando mudanças na forma como empresas priorizam suas áreas de negócios. O Relatório Global Tech Trends 2024, em seu 10º ano compartilhando insights do setor de tecnologia, destaca as seis prioridades da TI e três barreiras ao progresso. 

 

GraphQL é uma linguagem de consulta e ambiente de execução voltada a servidores para as interfaces de programação de aplicações (APIs) cuja prioridade é fornecer exatamente os dados que os clientes solicitam e nada além. 

As consultas de GraphQL sempre retornam resultados previsíveis. As aplicações que utilizam GraphQL são rápidas e estáveis porque elas controlam os dados que obtêm, não o servidor. O GraphQL fornece uma descrição completa e compreensível dos dados em sua API, facilitando a evolução das APIs ao longo do tempo e possibilita ferramentas de desenvolvimento poderosas.

Por que usar GraphQL?

O GraphQL foi desenvolvido para tornar as APIs mais rápidas, flexíveis e intuitivas para os desenvolvedores. Ainda é possível implantá-lo em um ambiente de desenvolvimento integrado (IDE) conhecido como GraphiQL. Como alternativa à arquitetura REST, o GraphQL permite aos desenvolvedores fazer consultas que extraem os dados de várias fontes em uma única chamada de API. 

Além disso, o GraphQL proporciona aos profissionais responsáveis pela manutenção das APIs flexibilidade para adicionar ou preterir campos, sem afetar as consultas existentes. Os desenvolvedores podem criar APIs com o método que quiserem, pois a especificação do GraphQL assegura que elas funcionem de maneira previsível para os clientes.

Conheça o Red Hat OpenShift API Management

Aumente a produtividade do desenvolvedor e entregue novas aplicações com mais rapidez com uma abordagem que prioriza APIs.

Os desenvolvedores de API usam o GraphQL para criar um esquema (schema) para descrever todos os dados disponíveis para consulta pelos clientes por meio do serviço em questão. 

Um esquema do GraphQL é composto por tipos de objeto que definem os objeto que podem ser solicitados e quais campos eles terão.

Conforme as consultas (queries) são recebidas, o GraphQL as valida de acordo com o esquema. Em seguida, o GraphQL executa as consultas validadas.

O desenvolvedor da API anexa cada campo de um determinado esquema a uma função denominada resolvedor (resolver). Durante a execução, o resolvedor é chamado para produzir o valor.

imagem

Além de definir e validar a sintaxe das consultas de API (como resumido no repositório graphql-spec), o GraphQL deixa a maioria das demais decisões a cargo do desenvolvedor da API. O GraphQL não oferece instruções sobre como armazenar dados ou que linguagem de programação usar. Os desenvolvedores podem usar PHP (graphql-php), Scala (Sangria), Python (Graphene Python), Ruby (graphql-ruby), JavaScript (graphql.js) e outras. Ele não define requisitos de rede, autorização ou paginação.

Do ponto de vista do cliente, as operações mais comuns a serem executadas pelo GraphQL provavelmente serão as consultas e mutações. Quanto aos termos do modelo de criação, leitura, atualização e exclusão (CRUD), uma consulta seria equivalente a uma leitura. Todas as outras operações (criação, atualização e exclusão) são processadas pelas mutações.

Você está pensando em experimentar o GraphQL em um ambiente corporativo? A adoção do GraphQL tem seus prós e contras.

Vantagens

  • Os esquemas definem uma única "fonte da verdade" em uma aplicação que usa o GraphQL. É uma maneira da organização federar a API inteira.
  • As chamadas do GraphQL são processadas em uma única transmissão com ida e volta. Os clientes recebem exatamente o que solicitam, sem mais dados do que o necessário (overfetching).
  • Os tipos de dados são bem definidos, o que reduz as falhas de comunicação entre o cliente e o servidor.
  • O GraphQL é introspectivo. Um cliente pode solicitar uma lista de tipos de dados disponíveis. Isso é ideal para gerar documentação automaticamente.
  • O GraphQL permite evoluir a API de uma aplicação sem prejudicar as consultas existentes.
  • Há muitas extensões open source disponíveis para o GraphQL e várias oferecem funcionalidades que não estão presentes nas APIs REST.
  • O GraphQL não determina uma arquitetura de aplicação específica. Ele pode ser introduzido em uma API REST existente e funciona com as ferramentas de gerenciamento de API que você já tem.

Desvantagens

  • Desenvolvedores acostumados com as APIs REST terão que enfrentar uma certa curva de aprendizado com o GraphQL.
  • O GraphQL direciona muito do trabalho de consulta de dados para o servidor, o que aumenta a complexidade para os desenvolvedores.
  • Dependendo de como for implementado, o GraphQL talvez exija estratégias para o gerenciamento da API diferentes das aplicadas às APIs REST, principalmente em relação aos limites de taxas e preços.
  • O armazenamento em cache é mais complexo do que na arquitetura REST.
  • Os profissionais responsáveis pela manutenção da API terão a tarefa extra de escrever um esquema do GraphQL que possa ser submetido à manutenção.

Exemplo de consulta do GraphQL

A melhor maneira de entender o GraphQL é vendo alguns exemplos de consultas e respostas. Vamos dar uma olhada em três exemplos adaptados do site do projeto GraphQL, graphql.org.

O primeiro exemplo mostra como um cliente pode construir uma consulta do GraphQL, solicitando à API que retorne campos específicos no formato determinado.

{
  me {
    name
  }
}

Uma API GraphQL retornaria um resultado como o abaixo no formato JSON:

{
  "me": {
    "name": "Dorothy"
  }
}

Um cliente também pode transmitir argumentos como parte da consulta do GraphQL, como neste exemplo:

{
  human(id: "1000") {
    name
    location
  }
}

O resultado:

{
  "data": {
    "human": {
      "name": "Dorothy,
      "location": "Kansas"
    }
  }
}

A partir daí, as coisas ficam mais interessantes. Com o GraphQL, os usuários podem definir fragmentos reutilizáveis e atribuir variáveis.

Imagine que você precisa solicitar uma lista de IDs e depois uma série de registros de cada ID. Com o GraphQL, é possível elaborar uma consulta que extraia todos os dados que você quer em uma única chamada de API. 

Portanto, esta consulta:

query HeroComparison($first: Int = 3) {
  leftComparison: hero(location: KANSAS) {
    ...comparisonFields
  }
  rightComparison: hero(location: OZ) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
        name
      }
    }
  }
}


Pode produzir o seguinte resultado:

{
  "data": {
    "leftComparison": {
      "name": "Dorothy",
      "friendsConnection": {
        "totalCount": 4,
        "edges": [
          {
            "node": {
              "name": "Aunt Em"
            }
          },
          {
            "node": {
              "name": "Uncle Henry"
            }
          },
          {
            "node": {
              "name": "Toto"
            }
          }
        ]
      }
    },
    "rightComparison": {
      "name": "Wizard",
      "friendsConnection": {
        "totalCount": 3,
        "edges": [
          {
            "node": {
              "name": "Scarecrow"
            }
          },
          {
            "node": {
              "name": "Tin Man"
            }
          },
          {
            "node": {
              "name": "Lion"
            }
          }
        ]
      }
    }
  }
}

Se você for usuário do GitHub, uma maneira rápida de ter uma experiência prática com o GraphQL seria usando o GitHub’s GraphQL Explorer.

O GraphQL foi desenvolvido pelo Facebook, que foi o primeiro a usá-lo para aplicações mobile em 2012. A especificação do GraphQL foi transformada em open source em 2015. Agora, ela é supervisionada pela GraphQL Foundation.

Há vários projetos open source que envolvem o uso do GraphQL. A lista abaixo não é muito grande, mas inclui projetos desenvolvidos para viabilizar a adoção do GraphQL.

  • Apollo, uma plataforma de GraphQL que inclui uma biblioteca cliente de front-end (Apollo Client) e um framework de servidor de back-end (Apollo Server).
  • Offix, um cliente offline que permite que as consultas e mutações do GraphQL sejam executadas mesmo quando não for possível acessar a aplicação.
  • Graphback, um cliente de linha de comando para gerar servidores Node.js habilitados para GraphQL.
  • OpenAPI-to-GraphQL, uma interface de linha de comando e biblioteca para traduzir as APIs descritas pelo OpenAPI Specifications ou Swagger em GraphQL.

Leitura recomendada

Artigo

O que é uma API?

API significa interface de programação de aplicações, um conjunto de definições e protocolos para criar e integrar softwares de aplicações.

Artigo

Qual é a função de um gateway de API?

O gateway de API é uma ferramenta de gerenciamento de interfaces de programação de aplicações (APIs) que fica entre o cliente e uma coleção de serviços de back-end.

Artigo

Por que escolher a Red Hat para o uso de APIs?

Nossas soluções de API se concentram na capacidade de reutilização, agilidade da TI e interface de gerenciamento para você avaliar, monitorar e escalar.