Na sala Grace Hopper, no InterCon 2017, quem assumiu o palco foi o engenheiro de software Ubiratan Soares.
O que é GraphQL?
É uma spec, assim como o Rest. Foi pensado para resolver algumas dores de cabeça do Rest. Ele endereça alguns desses problemas. Ele amplamente amigável ao mobile e utiliza um modelo de licença que não inspira medo. O GraphQL impõe um contrato bem definido, chamado de schema, onde há um type system. Ao fazer uma chamada de introspeção, nos deparamos com um json repleto de informações.
“Para entendermos a existência do GraphQL, precisamos falar da API Rest. O padrão Rest não levava em consideração como nossas aplicações interagem com os devices e evoluem, o que acaba trazendo muitos problemas”. Ao falamos de produtos digitais, podemos dizer que existe uma espécie de ciclo, onde o produto passa por uma evolução e adaptação. Quando um produto demanda novas features, devemos evoluir nossa API Rest para atender ao produto. Usuários estão amplamente conectados, usufruindo dos produtos”. – Ubiratan Soares
Principais problemas do Rest
Entre os principais problemas do Rest, estão:
- Versionamento: Não existe um jeito certo para versionar uma Rest API
- Múltiplos endpoints para resolver uma necessidade específica do cliente
- Endpoints acabam expondo mais dados do que necessário
Os conceitos chave do GraphQL
Entre as vantagens do GraphQL, Ubiratan listou algumas das principais:
- Limita o número de endpoints para o mínimo possível
- Possui um contrato bem definido onde o client e o server devem respeitar um schema para troca de dados efetiva
- Fim do overfetching: O GraphQL te dá um mecanismo para que você obtenha a informação que você precisa e nada mais, sem gastos de dados desnecessários
- Fim do underfetching: Com o GraphQL, você poderá os dados necessários em uma única chamada
Para encerrar a apresentação, Soares falou um pouco sobre haver ou não riscos ao utilizar o GraphQL. Um dos exemplos na discussão, foi o caso de licenças do Facebook envolvendo o React e o GraphQL, onde a rede social acabou cedendo.