> For the complete documentation index, see [llms.txt](https://docs.autentique.com.br/api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.autentique.com.br/api/2/sobre-o-graphql.md).

# Sobre o GraphQL

### O que é GraphQL?

Quando você pensa em Facebook, provavelmente a primeira coisa que vem à cabeça são fotos de gatinhos e parentes distantes, mas eles também criam tecnologias interessantes, como o GraphQL.

Nas própria palavras do [site oficial do GraphQL](https://graphql.org):

> O GraphQL é uma linguagem de consulta para APIs e uma runtime para atender essas consultas com os dados existentes. O GraphQL fornece uma descrição completa e compreensível dos dados em sua API, oferece aos clientes o poder de solicitar exatamente o que eles precisam e nada mais, facilita a evolução das APIs ao longo do tempo e permite ferramentas poderosas para o desenvolvedor.

Ou seja, é uma forma alheia ao REST de executar requisições para APIs, onde você pode escolher quais informações retornar, executar múltiplas queries não co-dependentes em uma mesma requisição. Além de ser muito conveniente para nós, do lado da API, não precisar ficar alterando os endpoints para atender novas funcionalidades.

### Por quê estamos usando GraphQL?

O GraphQL nos permite construir uma aplicação mais dinâmica e atender melhor às necessidades específicas dos clientes que utilizam a API sem precisar fazer modificações que afetem todos os usuários.

Você sabe aquele momento que percebe que o seu *backend* está tão cheio de ~~gambiarras~~ funcionalidades novas que começa a se tornar um emaranhado de código que ninguém mais entende completamente. Como aquelas empresas com aplicações em COBOL e que cobram absurdamente caro para implementarem melhorias, já que os programadores não sabem o quê vai quebrar até mesmo pra tirar um comentário? Pois é... motivo número 1. (Isso justifica não apenas o GraphQL, mas o porque é bom refazer as coisas de tempos em tempos).

GraphQL  facilita muito a nossa vida ao reduzir os *controllers* do modelo MVC. Além de outras vantagens  para nós e para você integrar com a API. Dentre elas:

* Volume menor de requisições para a API, encadeando várias queries que não dependem umas das outras, em uma mesma requisição;
* É fortemente tipado, evitando possíveis bugs ao receber dados em um formato inesperado;
* O corpo e tempo de resposta das requisições é menor, uma vez que é possível escolher somente as informações necessárias.

Nós estamos gostando do GraphQL e esperamos que você também consiga se divertir fazendo as *queries* e usando os geradores de código que vem no pacotão de algo que disponibiliza um *schema* que contém tudo o que pode ser feito com a API.

{% hint style="info" %}
Você pode entender melhor tudo que você pode fazer com o GraphQL em <https://graphql.org>

Para mais materiais e outras utilidades, consulte essa lista de coisas legais para GraphQL: <https://github.com/chentsulin/awesome-graphql>
{% endhint %}
