Por que usar o GraphQL em vez do REST?
O REST é um dos estilos de arquitetura fundamentais das APIs web. No entanto, à medida que o mundo se torna mais interconectado, a necessidade de desenvolver aplicativos robustos e escaláveis se tornará uma questão mais urgente. Embora REST seja atualmente o padrão do setor para a criação de APIs web, há várias desvantagens recorrentes nas implementações RESTful que já foram identificadas:
-
Solicitações de dados: usando APIs RESTful, você normalmente solicitaria os dados de que precisa por meio de endpoints. O problema surge quando há dados que podem não estar tão bem empacotados. Os dados de que você precisa podem estar por trás de várias camadas de abstração, e a única maneira de buscar os dados é usando vários endpoints, o que significa fazer várias solicitações para extrair todos os dados.
-
Busca excessiva e busca insuficiente: piorando ainda mais a questão de várias solicitações, os dados de cada endpoint são estritamente definidos, o que significa que você retornará qualquer dado que seja definido para essa API, mesmo que tecnicamente não tenha interesse nele.
Isso pode resultar em busca excessiva, o que significa que nossas solicitações retornam dados supérfluos. Por exemplo, digamos que você esteja solicitando dados pessoais da empresa e queira saber os nomes dos funcionários de um certo departamento. O endpoint que retorna os dados contém os nomes, mas também pode conter outros dados, como cargo ou data de nascimento. Como a API é fixa, você não pode simplesmente solicitar os nomes individualmente; o resto dos dados vem com eles.
A situação oposta, na qual não retornamos dados suficientes, é chamada de busca insuficiente. Para obter todos os dados solicitados, talvez seja necessário fazer várias solicitações ao serviço. Dependendo de como os dados foram estruturados, você pode se deparar com consultas ineficientes, resultando em problemas como o temido problema n+1.
-
Iterações de desenvolvimento lentas: muitos desenvolvedores adaptam suas APIs RESTful para se adequarem ao fluxo de seus aplicativos. No entanto, conforme seus aplicativos crescem, tanto o front-end quanto o back-end podem exigir grandes mudanças. Como resultado, as APIs podem não se ajustar mais ao formato dos dados de forma eficiente ou impactante. Isso resulta em iterações de produto mais lentas devido à necessidade de modificações na API.
-
Desempenho em grande escala: devido a esse acúmulo de problemas, há muitas áreas em que a escalabilidade será afetada. O desempenho no lado do aplicativo pode ser afetado porque suas solicitações retornarão dados de mais ou de menos (resultando em mais solicitações). Ambas as situações causam sobrecarga desnecessária na rede, resultando em baixo desempenho. Do lado do desenvolvedor, a velocidade de desenvolvimento pode ser reduzida porque suas APIs são fixas e não se ajustam mais aos dados solicitados.
O ponto de venda do GraphQL é superar as desvantagens do REST. Aqui estão algumas das principais soluções que o GraphQL oferece aos desenvolvedores:
-
Endpoints únicos: o GraphQL usa um único endpoint para consultar dados. Não há necessidade de criar várias APIs para se adequar ao formato dos dados. Isso resulta em menos solicitações passando pela rede.
-
Busca: o GraphQL resolve os problemas inerentes da busca excessiva e insuficiente simplesmente definindo os dados de que você precisa. O GraphQL permite que você modele os dados de acordo com suas necessidades, para que você receba apenas o que solicitou.
-
Abstração: as APIs GraphQL contêm alguns componentes e sistemas que descrevem os dados usando um padrão independente de linguagem. Em outras palavras, a forma e a estrutura dos dados são padronizadas para que tanto o front-end quanto o back-end saibam como eles serão enviados pela rede. Isso permite que os desenvolvedores de ambos os lados trabalhem com os sistemas do GraphQL e não em torno deles.
-
Iterações rápidas: devido à padronização dos dados, as mudanças em uma extremidade do desenvolvimento podem não ser necessárias na outra. Por exemplo, alterações na apresentação do front-end podem não resultar em alterações extensivas no back-end porque o GraphQL permite que a especificação dos dados seja modificada prontamente. Você pode simplesmente definir ou modificar a forma dos dados para atender às necessidades do aplicativo à medida que ele cresce. Isso resulta em menos trabalho potencial de desenvolvimento.
Esses são apenas alguns dos benefícios do GraphQL. Nas próximas seções, você aprenderá como o GraphQL é estruturado e as propriedades que o tornam uma alternativa exclusiva ao REST.