Como e por que usar GraphQL?
Tags: webdev, programming, braziliandevs, graphql
Published: 2024-02-06 10:24:54

Eae gente bonita beleza? Recentemente comecei a olhar um pouco para os lados para aprender sobre outras formas de comunicação no backend além do famoso REST e acabei chegando no GraphQL e hoje vou falar um pouco mais sobre ele.

## Tabela de conteúdo
- [O que é GraphQL](#o-que-é-graphql)
 - [Como eu uso isso?](#como-eu-uso-isso)
- [Como funciona](#como-funciona)
- [Eu só consigo consultar?](#eu-só-consigo-consultar)
- [Opinião](#opinião)
- [Fontes](#fontes)


## O que é GraphQL

Bom, o GraphQL é uma Query Language, ou melhor dizendo uma linguagem de consulta desenvolvida pelo Facebook. A ideia do GraphQL é poder dar uma autonomia maior para quem vai consumir as API's, pois você pode escrever a consulta da forma que achar melhor para a ocasião, evitando que fique preso a diversas chamadas REST.

## Como funciona

Eu sempre posterguei pesquisar o que é GraphQL porque pensava que era um bicho de 7 cabeças e aqui estou eu enganado sobre isso. Bom basicamente com o GraphQL você pode criar modelos, relações e também mutations.

Vamos um passo de cada vez vou usar o exemplo do próprio site do [GraphQL](https://graphql.org/) para isso.

Abaixo temos um exemplo de descrição de dados e também de uma relação onde existe a entidade `Project `com as propriedades `name`, `tagline `e `contributors `que tem vários `Users`.

```graphql
type Project {
  name: String
  tagline: String
  contributors: [User]
}
```

### Como eu uso isso?

É bem mais simples do que se imagina, a sintaxe do GraphQL se assimila muito com a sintaxe do JSON, o que facilita muito o seu entendimento.

Abaixo temos um exemplo de uma consulta. Nós vamos consultar a tabela `project` e vamos pesquisar pelo parâmetro `name` sendo igual a "GraphQL" e agora vem o brilho da coisa, nós pegamos apenas aquilo que realmente precisamos e no caso abaixo vamos pegar apenas o que queremos nesse o valor de `tagline`.

```graphql
{
  project(name: "GraphQL") {
    tagline
  }
}
```

E como mágica temos o resultado abaixo:

```graphql
{
  "project": {
    "tagline": "A query language for APIs"
  }
}
```

Fácil né? Agora vou te mostrar um exemplo de uma query onde temos relações.
```graphql
{
  project(name: "GraphQL") {
    tagline,
    user {
      name,
    }
  }
}
```
Com isso teremos o seguinte resultado:

```graphql
{
  "project": {
    "tagline": "A query language for APIs",
    "user": {
      "name": "Mark",
    }
  }
}
```

## Eu só consigo consultar?

Você pode pensar que no GraphQL você pode apenas fazer consulta já que ela é uma linguagem de consulta. Porém, é aí que você se engana no GraphQL temos uma coisa chamada mutations, elas têm a mesma sintaxe de uma query apenas iniciando com a palavra-chave mutation e com elas você consegue criar e editar dados na base.

## Opinião

Ok, admito GraphQL é lindo, mas vale a pena sair usando por aí sem pensar duas vezes? Na minha humilde opinião a resposta é não. Ele fica bem em sistemas onde você tem dezenas de tabelas e as queries tem diversos joins. Caso contrario usar em sistemas menores parece querer matar barata com canhão.

Recomendo também uma leitura sobre a [teoria dos grafos](https://pt.wikipedia.org/wiki/Teoria_dos_grafos) na qual a linguagem se baseia.


## Fontes

[GraphQL // Dicionário do Programador](https://www.youtube.com/watch?v=xbLpIhCsIdg)
[Documentação do GraphQL](https://graphql.org/)
[API usando GraphQL](https://github.com/Cristuker/go-graphql)

Se chegou até aqui, me segue la nas [redes vizinhas](https://cristiansilva.dev/).

<img src="https://media.giphy.com/media/xULW8v7LtZrgcaGvC0/giphy.gif" alt="thank you dog" />