Login / Registre-se Account

API

O que é GraphQL?

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

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.

Esquemas, resolvedores e outros termos do GraphQL

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 objetos 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 fornece 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.

Vantagens e desvantagens do GraphQL em ambientes corporativos

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ê precise solicitar uma lista de IDs e depois uma série de registros de cada ID. Com o GraphQL, é possível construir 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 e a tecnologia open source

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.

Explore as soluções de API da Red Hat

Red Hat 3scale API Management

Uma plataforma de gerenciamento de API.

Red Hat Fuse logo

Uma plataforma de integração distribuída.