Por que usamos o GraphQL no 8base



Amigos, olá pessoal!

Este artigo será principalmente de interesse para desenvolvedores de front-end, especialmente aqueles que estão interessados ​​no GraphQL, mas, ao mesmo tempo, espero que seja útil fazer back-end para desenvolvedores e ajudá-los a entender os benefícios do GraphQL pelos olhos do front-end.

Algumas palavras sobre mim: sou vice-presidente de tecnologia da 8base. Desenvolvemos ferramentas que permitem que desenvolvedores móveis e front-end criem rapidamente aplicativos de negócios de alta qualidade.

Fornecemos uma plataforma na qual basta definir um modelo de dados por meio de nossa interface do usuário e obter uma API GraphQL pronta para interagir com os dados. O usuário recebe um servidor configurado com funções, direitos de acesso, capacidade de trabalhar com arquivos, implantar funções sem marca, IC e muito mais. Para acelerar o desenvolvimento, também temos SDKs e bibliotecas de componentes prontos para o React. Nós escrevemos backend no Node.js

E como os principais usuários do nosso sistema são desenvolvedores de front-end e móveis, decidimos apostar no GraphQL, que inicialmente nos parecia mais flexível que o REST, e dando mais oportunidades na frente. Bem, agora que recebemos feedback suficiente dos usuários finais, podemos dizer que, no nosso caso, ele se encaixa perfeitamente.

Por que, afinal, o GraphQL?


Diferentemente do REST, cada API do GraphQL fornece um esquema que contém informações sobre os tipos de dados de entrada e saída, seus campos e os relacionamentos entre os tipos. Isso permite que você use modelos de dados com relacionamentos na API, além de fazer consultas flexíveis (consultas) e alterações nos dados (mutações) independentes da apresentação em um aplicativo cliente específico.

Além disso, a API GraphQL permite que os desenvolvedores do cliente determinem explicitamente os dados retornados, incluindo a referência a objetos relacionados em cada consulta, evitando a busca excessiva e insuficiente e reduzindo o número de solicitações da API.

Compare GraphQL e REST


Vamos comparar o GraphQL e o REST com um exemplo simples - criando um blog online. Ao exibir um artigo de blog separado, precisamos mostrar o conteúdo do artigo, o avatar e o nome do autor, uma lista de comentários, bem como o avatar e o nome de cada comentarista.

Se você estiver usando REST, precisaremos das seguintes solicitações de API:

GET /articles/:id —   ; GET /users/:id —  URL    ; GET /articles/:id/comments —    (  -        ,      4); GET /users/:id    —  URL    . 

Preste atenção ao problema de busca insuficiente (quando uma solicitação não retorna tudo o que é necessário) e busca excessiva (quando, por exemplo, a solicitação / usuários /: id retorna mais dados do que serão exibidos), bem como código mais complexo no front-end necessário para organizar uma série de solicitações de API.

No GraphQL, todas as informações podem ser obtidas em uma única consulta, desde que os desenvolvedores da API tenham indicado os relacionamentos entre artigos, usuários e comentários no esquema da API do GraphQL. Além disso, a resposta da API conterá apenas os campos solicitados, o que reduzirá seu volume.

Aqui está um exemplo de uma consulta GraphQL que retornará todas as informações em uma consulta ao mesmo tempo:

A API GraphQL permite obter todos os dados em uma consulta

Para implementar esse recurso no REST, os desenvolvedores de back-end precisariam criar uma API de terminal especial que retornaria essas informações. No entanto, o mesmo deveria ser feito para cada caso com a exibição de dados de tabelas relacionadas e, ao mesmo tempo, atualizando a API assim que o frontend precisar de campos adicionais.

Este exemplo mostra como o GraphQL alinha o "equilíbrio de poder" em favor dos desenvolvedores front-end, permitindo que eles solicitem todos os dados necessários, e oferece aos desenvolvedores de back-end a oportunidade de implementar a API para que cubra toda a área de assunto, e não uma apresentação específica no cliente.

Tudo isso, combinado com um conjunto de bibliotecas e ferramentas, leva a qualidade e a usabilidade do desenvolvedor front-end a um novo nível - e é por isso que a popularidade do GraphQL entre as equipes de desenvolvimento está crescendo em todo o mundo.

Como é na prática


Uma das desvantagens do GraphQL é sua implementação mais complexa que o REST. Para apresentar os dados de uma forma conveniente para uma variedade de aplicativos clientes, é necessária uma grande quantidade de trabalho no back-end. A implementação de operações, links, filtros, classificação e paginação CRUD para cada tipo de dados é bastante entediante. Organizar recursos importantes como direitos de acesso a dados e anexar arquivos a objetos de dados também não é tão simples.

Agora vou mostrar quais possibilidades o uso do GraphQL oferece no exemplo de nossa implementação:

  • obtenha um objeto por identificador ou qualquer campo exclusivo

  • obtenha uma lista de objetos com base em critérios de filtros, classificação, paginação e pesquisa de texto completo

  • criar, atualizar ou excluir um objeto

  • assinar eventos de dados em tempo real via soquete da web

  • Todas essas operações funcionam perfeitamente com os relacionamentos entre objetos, para que você possa consultar, criar e atualizar objetos filhos com seus pais:


Sumário


Obrigado pela atenção! Gostaria muito de ouvir sua opinião sobre o GraphQL ou sua experiência em usá-lo, seus problemas e também ficarei feliz em responder a perguntas.

Além disso, amigos, talvez você esteja interessado em ler uma série de artigos técnicos sobre nossa pilha, ou talvez algo mais?

PS Você pode aprender um pouco mais sobre os benefícios do GraphQL para desenvolvedores de front-end e como usamos o GraphQL, em um vídeo do discurso de nosso desenvolvedor de back-end Andrei Gorinov

Source: https://habr.com/ru/post/pt440184/


All Articles