Explorando os Benefícios do GraphQL

Banner sobre GraphQL

Certamente você já ouviu falar sobre o GraphQL ou até mesmo teve a oportunidade de utilizá-lo em projetos. Mas você já parou para entender os benefícios dessa ferramenta?

Antes de falar sobre seus benefícios, vamos entender um pouco seu conceito e funcionamento. Conforme explicado na própria documentação:

Overview GraphQL

"GraphQL é uma linguagem de consulta para APIs e um tempo de execução para atender a essas consultas com seus dados existentes."

"GraphQL fornece uma descrição completa e compreensível dos dados em sua API, dá aos clientes o poder de solicitar exatamente o que precisam e nada mais, facilita a evolução de APIs ao longo do tempo e permite ferramentas poderosas para desenvolvedores."

Um ponto muito interessante é que ele não está vinculado a nenhum banco de dados ou mecanismo de armazenamento específico. Em vez disso, é apoiado por seu próprio código e dados existentes.

Recursos do GraphQL

  • Uma Solicitação, Muitos Recursos: Em comparação com o REST, onde é necessário fazer várias chamadas para múltiplos endpoints, com o GraphQL é possível consultar todos os recursos com uma única chamada.

  • Busca Exata de Dados: O GraphQL permite selecionar exatamente os dados que você precisa, evitando o excesso (overfetching) ou a falta (underfetching) de dados.

  • Fortemente Tipado: Cada objeto de entrada e saída tem um tipo bem definido, e isso permite o compartilhamento de tipos entre backend e frontend.

  • Melhores Ferramentas para Desenvolvedores: O GraphQL oferece playgrounds interativos com preenchimento automático, documentação viva e exploração da API.

Tipos de Operações

  • Query: Utilizada para consultar dados sem modificá-los.
  • Mutation: Utilizada para criar, atualizar ou excluir dados.
  • Subscription: Utilizada para ouvir eventos em tempo real.

Estrutura do Projeto com NestJS

Vamos aplicar esses conceitos na prática com NestJS.

A estrutura inicial do projeto inclui os módulos GraphQL, TypeORM, User e Team.

Exemplo de configuração GraphQL

Na configuração do módulo GraphQL, definimos:

  • playground: true para habilitar o explorador visual.
  • autoSchemaFile para gerar schemas automaticamente em tempo de execução.

Utilizamos @ObjectType() e @Field() para mapear entidades do TypeORM também como objetos GraphQL.

Consultas e Mutations

Usamos os decorators @Query() e @Mutation() para indicar a operação e o tipo de retorno:

@Query(() => [User])
getUsers() {
  return this.userService.findAll();
}

@Mutation(() => Team)
createTeam(@Args('name') name: string) {
  return this.teamService.create(name);
}

Playground do GraphQL

Visual do GraphQL Playground

O Playground permite executar queries, mutations e visualizar toda a documentação dos tipos da API.

Criando uma Equipe

Criando uma equipe

Criando um Usuário com Equipe

Criando um usuário

Listando Usuários

Listando usuários

Imagine que você está desenvolvendo um aplicativo que precisa apenas de firstName e lastName dos usuários. Com GraphQL, basta pedir exatamente isso na query — e nada mais será retornado.

A flexibilidade de GraphQL permite atender diferentes cenários com eficiência e simplicidade.

Conclusão

O GraphQL é uma abordagem moderna e flexível para construção de APIs. Ele fornece controle ao cliente, reduz carga de dados e melhora a experiência de desenvolvimento.

Todos os exemplos podem ser encontrados neste repositório.