GraphQl - Introdução
Tags: graphql, node
Published: 2021-07-17 01:44:10

A query language for you API

## Oque é GraphQL?

GraphQL é uma linguagem de Query (bem como SQL) criada pelo Facebook em 2012 e lançada publicamente em 2015. É visto pela comunidade como uma alternativa ao padrão REST, o qual reina sobre o desenvolvimento.

É **importante** eliminar logo de cara a ideia de que o GraphQL vai matar o REST. Ambos os estilos de arquitetura possuem suas próprias características e cada uma se encaixa em situações diferentes.

## Para que serve o GraphQL afinal?

A principal função do GraphQl é evitar o Overfetching, ou seja buscar da requisição apenas o necessário, isso em ambientes como AWS que tem a monetização pay per use (cobra pelo tráfego da informação) é uma mão na roda, ja que você não gasta dinheiro atoa com dados de uma requisição que vocẽ não precisaria.

## Como faço para usá-lo?


###### Inicie o Package.json

```
npm init -y
yarn init -y
```

###### Baixe as dependências

```
npm install apollo-server graphql
yarn add apollo-server graphql
```

###### Coding
Starter index.js

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/311ttl9yfpbw5swyc78r.png)

Sem definição de tipos do GraphQl.

**Observação!**

No graphQl toda requisição é post, e toda Request bate no mesmo endpoint que por convenção é /graphql .

Então, como é que a requisição sabe oque ela precisa fazer ou que rumo ela precisa tomar?

> R: Nós fazemos isso por meio de Query, Mutation.

Se nós quisermos listar as informações específicas de um usuário por exemplo nos usamos Query

> Em paralelo com HTTP ela seria o método GET

Já Mutation ele serve pra quando queremos manipular dados

> Em paralelo com HTTP (POST/PUT/PATCH/DELETE)

###### Scalar Types
São basicamente os tipos primitivos que temos, são eles:

1. String
2. Int
3. Boolean
4. Float
5. ID

Beleza, então como escrevemos agora um hello world com GraphQl?

###### Hello World
Dentro das definições de tipos nos diremos oque o usuário poderá pesquisar, assim:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vk77c4s0j2s1bb9tzpp9.png)
> Imagem das definições de tipos

Logo em seguida, diremos oque o usuário poderá obter com os 'resolvers', ao realizar uma consulta onde tentará trazer o hello por meio de sua requisição do tipo Query.

**Observação!**

O GraphQl usa o mapeamento de 1-1 logo a primeira informação a ser consultada na Query, deve ser também a primeira a ser trazida no resolver de sua Query e assim sucessivamente.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0mtyi2wz9dkxnnpod5kk.png)
> Imagem da Query + Resolver

###### Executando o código
Primeiro inicializamos o servidor. 

```
node src/index.js
```

🚀 Server Started at http://localhost:4000/

###### The Playground GraphQl

Aqui nesse exemplo: executaremos uma Query assim como definimos no tipo de requisição, e ele deverá trazer os dados estabelecidos pelo Resolver baseado no mapeamento de 1 por 1. Assim:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fgbxc2i9m0vvolm3e9zv.gif)

###### It's done!

Agora você acabou de fazer sua primeira chamada API utilizando o graphQL, simples não?