O que é GraphQL?
GraphQL é uma linguagem de consulta (query language) para interfaces de programação de aplicações (APIs) e um ambiente de runtime que executa essas consultas com base nos seus dados. A 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 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.
Schemas, resolvers, queries e outros termos comuns da linguagem 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 conforme 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.
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 serão provavelmente 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.
Acelere o desenvolvimento de apps nativas em nuvem
Recursos da Red Hat
GraphQL: vantagens e desvantagens
Você está pensando em experimentar o GraphQL em um ambiente corporativo? A adoção do GraphQL tem 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, reduzindo 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 query 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.
GraphQL e o 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.
Blog da Red Hat
Tudo relacionado à Red Hat: soluções, treinamentos e certificações Red Hat, casos de sucesso de clientes, novidades dos nossos parceiros e notícias sobre projetos das comunidades open source.