Existem muitos padrões de arquitetura de software livre para criar e distribuir aplicativos. APIs REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Processual Call) e GraphQL são as mais populares.

As APIs RESTful são o padrão de arquitetura de API mais usado. Se você escreveu APIs RESTful complexas com muitos endpoints, provavelmente percebeu como elas podem ser complicadas. Isso é especialmente verdadeiro se houver apenas pequenas diferenças entre os pontos finais.

Você também pode encontrar problemas com a busca de dados, pois as APIs RESTful não são flexíveis o suficiente para selecionar dados específicos. GraphQL resolve esses problemas de APIs RESTful.

O que é GraphQL?

GraphQL (Graph Query Language) é uma linguagem de consulta e tempo de execução para criar APIs. Ao contrário das APIs REST com muitos endpoints para consumir dados, as APIs GraphQL têm um ponto de entrada. Você pode buscar dados específicos descrevendo-os em consultas.

O Especificação do GraphQL

define a linguagem de consulta e como os servidores GraphQL operam. Você pode criar e consumir APIs GraphQL em linguagens do lado do servidor, de Python a Javascript, e qualquer idioma que suporte HTTP.

A Meta construiu o GraphQL em 2012 como uma alternativa ao REST para construir em HTTP. Eles lançaram o GraphQL como um padrão de código aberto em 2015. Hoje, a fundação GraphQL supervisiona o desenvolvimento da especificação GraphQL.

O GraphQL é relativamente novo, com baixa adoção e há custos ocultos para usá-lo. Construir APIs GraphQL pode ser desnecessariamente complexo, especialmente para pequenos projetos com poucos terminais.

Além disso, todas as solicitações do GraphQL acabam retornando um código de status 200, independentemente do estado da solicitação.

Como funciona o GraphQL?

Diferente REST, que é orientado a recursos, GraphQL requer que você pense nos dados como um gráfico para interagir com os dados. Você pode especificar a estrutura dos dados e a especificação fornece uma interface de consulta robusta para interagir com a API por HTTP. Você poderá usar vários recursos, dependendo do Pacote ou biblioteca GraphQL você escolhe usar.

Os esquemas GraphQL incluem tipos de objeto que definem o objeto solicitável e seus campos disponíveis. Nas consultas e mutações da API, o pacote GraphQL valida as consultas e as executa com base nas funções de manipulador especificadas (resolvedores).

Por que você deve usar o GraphQL?

REST é um padrão fácil de usar e a maioria das linguagens de programação possui ferramentas para criar APIs RESTful rapidamente. No entanto, há muitos problemas com a construção e o consumo de APIs RESTful.

Aqui estão alguns dos problemas com REST que fazem com que os desenvolvedores prefiram o GraphQL para alguns casos de uso.

Busca de dados ineficiente

As APIs RESTful retransmitem dados com base na especificação do endpoint. Eles não são flexíveis o suficiente para recuperar dados além do que está codificado na função do manipulador do terminal.

Suponha que um endpoint retorne uma lista de dados na chamada e você precise especificar valores ou critérios para campos. Nesse caso, o desenvolvedor precisa criar um endpoint e definir a lógica de negócios para retornar os dados. Você pode analisar o recurso valioso manualmente, o que eventualmente leva mais tempo.

O GraphQL resolve o problema da busca ineficiente de dados, pois você pode consultar APIs para retornar dados com base em critérios e especificações de forma flexível.

As APIs do GraphQL são interativas; você pode especificar os dados que precisa recuperar em uma sintaxe fácil e legível.

{
usuário (onde: {idade: {_eq: "89"}}) {
nome
escola(onde: {vivo: {_eq: verdadeiro}}) {
biografia
nacionalidade
}
}
}

A consulta GraphQL acima consulta um do utilizador esquema para entradas onde o idade campo é 89. A consulta tem uma consulta incorporada para entradas onde o vivo campo avalia verdadeiro. Ele retorna os campos de nome, biografia e nacionalidade do esquema.

Desenvolvimento rápido

Construir e consumir GraphQL APIs é mais fácil do que usar REST, especialmente quando o tamanho do projeto aumenta. Durante a fase de desenvolvimento, você não precisa desenvolver tantas rotas e funções de manipulador quanto ao desenvolver APIs RESTful. Consumir APIs GraphQL não é tão tedioso quanto APIs RESTful.

No REST, diferentes endpoints dão acesso a diferentes recursos, ao contrário do GraphQL, onde há um único endpoint. Isso gera flexibilidade e desempenho, e as consultas podem chamar diferentes funções de resolução.

A linguagem de definição de esquema GraphQL

O GraphQL Schema Definition Language (SDL) especifica os esquemas para serviços GraphQL.

A sintaxe do GraphQL SDL é fácil de ler e entender. Você especificará a estrutura do seu esquema em um arquivo com a extensão .graphql ou .graphqls extensão.

tipo Humano {
nome: Corda!
idade: Int!
}

input AddHuman {
nome: Corda!
idade: Int!
}

tipo Mutação {
CreateHuman (entrada: AddHuman!): Humano!
DeleteHuman (id: Int!): Corda!
UpdateHuman (id: Int!): Corda!
}

tipo Consulta {
GetHuman (id: Int!): Humano!
GetHumans: [Humano!]!
}

O código GraphQL acima é o esquema para uma API GraphQL que define a estrutura da API para solicitações. O esquema define a funcionalidade CRUD para a API.

No lado do cliente, com base na estrutura do esquema e nos dados ou operação do cliente, o cliente pode executar um consulta (GET ou DELETE em REST) ​​ou um mutação (PUT ou POST).

Aqui está um exemplo de consulta ao Humano esquema.

consulta Humano {
nome
idade
}

A consulta acima retornaria o esquema humano nome e idade dados de campo.

As mutações do GraphQL têm uma sintaxe bastante diferente em comparação com as consultas. Aqui está um exemplo de operação de mutação no Humano esquema.

mutação {
CreateHuman (entrada:{ nome:"homem", idade: 1000000000000000,}) {
nome
idade
}
}

As entradas do código de mutação nome e idade campos para o cliente e retorna os dados dos campos.

Você precisará de um armazenamento de dados para persistência ao criar sua API GraphQL. Como o REST e a maioria das arquiteturas da Web baseadas em HTTP, o GraphQL não tem estado e você pode usar qualquer armazenamento de dados ou banco de dados para seu aplicativo.

Construindo uma API GraphQL

GraphQL é uma especificação e você pode criar GraphQL nas linguagens de servidor mais populares. Você terá que encontrar uma biblioteca com os recursos necessários para o seu projeto.

Ao escolher uma biblioteca GraphQL, você deseja usar uma biblioteca rica em recursos que suporte todos os tipos e operações GraphQL. A maioria das bibliotecas adota uma abordagem de esquema primeiro ou código primeiro. No primeiro, você define um esquema GraphQL e a biblioteca gera resolvedores e código clichê. Para o último, você codifica os resolvedores sem definir um esquema.

GraphQL está ganhando adoção

Desde o início do GraphQL, desenvolvedores e empresas lançaram ferramentas para simplificar seu uso. Isso pode reduzir o tempo de desenvolvimento de projetos menores e médios.

Você pode conferir os clientes GraphQL de software livre, a documentação do GraphQL e sua especificação para saber mais.