Login / Registre-se Account
Jump to section

O que é GraphQL?

Copiar URL

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. 

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 construir solicitações 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.

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.

Avaliação sem custo

Experimente o Red Hat OpenShift API Management

Tenha uma experiência de autosserviço de 60 dias para descobrir os benefícios de um serviço de API totalmente gerenciado.

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.

APIs e a Red Hat

Red Hat 3scale API Management

Facilite o compartilhamento, a proteção, a distribuição, o controle e a monetização das APIs para usuários internos ou externos.

Red Hat Fuse logo

Uma plataforma distribuída de integração nativa em nuvem que conecta suas APIs, seja on-premise, na nuvem e em qualquer outro ambiente de sua escolha.

Serviço de gestão de APIs hospedado e gerenciado oferecido como uma solução complementar ao Red Hat OpenShift Dedicated.

Illustration - mail

Quer receber mais conteúdo deste tipo?

Cadastre-se para receber a nossa newsletter Red Hat Shares.