Desvantagens:
- Você precisa aprender a configurar o GraphQL. O ecossistema ainda está evoluindo rapidamente, então você precisa acompanhá-lo.
- Você precisa enviar as consultas do cliente, você pode apenas enviar strings, mas se quiser mais conforto e armazenamento em cache, você usará uma biblioteca cliente -> código extra em seu cliente
- Você precisa definir o esquema de antemão => trabalho extra antes de obter os resultados
- Você precisa ter um endpoint Graphql em seu servidor => novas bibliotecas que você ainda não conhece
- As consultas Graphql têm mais bytes do que simplesmente ir para um endpoint REST
- O servidor precisa fazer mais processamento para analisar a consulta e verificar os parâmetros
Mas, esses são mais do que contrariados por estes:
- GraphQL não é tão difícil de aprender
- O código extra tem apenas alguns KB
- Ao definir um esquema, você evitará muito mais trabalho depois de corrigir bugs e resistir a atualizações complicadas
- Há muitas pessoas mudando para GraphQL, então há um rico ecossistema em desenvolvimento, com ferramentas excelentes
- Ao usar consultas persistentes na produção (substituindo consultas GraphQL por simplesmente um ID e parâmetros), você realmente envia menos bytes do que com REST
- O processamento extra para consultas recebidas é insignificante
- Fornecer uma dissociação limpa de API e back-end permite uma iteração muito mais rápida em melhorias de back-end
graphql-spring-boot-starter
egraphql-java-tools
começar. Crie seu esquema no recurso .graphqls e crie classes Resolver e pronto. Para colocar um exemplo de teste em funcionamento, demorou cerca de 10 minutos.Eu encontrei algumas preocupações importantes para qualquer pessoa que esteja considerando usar GraphQL , e até agora os pontos principais são:
Consulta em profundidade indefinida : GraphQL não pode consultar em profundidade indefinida, então se você tem uma árvore e deseja retornar um ramo sem saber a profundidade, você terá que fazer alguma paginação.
Estrutura de resposta específica : No GraphQL, a resposta corresponde ao formato da consulta, portanto, se você precisar responder em uma estrutura muito específica, terá que adicionar uma camada de transformação para remodelar a resposta.
Cache no nível da rede : devido à maneira comum como o GraphQL é usado sobre HTTP (um POST em um único endpoint), o cache no nível da rede torna-se difícil. Uma maneira de resolver isso é usar consultas persistentes.
Manipulando upload de arquivo : Não há nada sobre upload de arquivo na especificação GraphQL e mutações não aceita arquivos nos argumentos. Para resolver isso, você pode fazer upload de arquivos usando outro tipo de APIs (como REST) e passar a URL do arquivo carregado para a mutação GraphQL, ou injetar o arquivo no contexto de execução, para que você tenha o arquivo dentro das funções de resolução.
Execução imprevisível : A natureza do GraphQL é que você pode consultar combinando quaisquer campos que desejar, mas essa flexibilidade não é gratuita. É bom saber algumas preocupações, como Consultas de Desempenho e N + 1.
APIs super simples : no caso de você ter um serviço que expõe uma API realmente simples, GraphQL apenas adicionará uma complexidade extra, portanto, uma API REST simples pode ser melhor.
fonte
O maior problema que vejo com o GraphQL ou seja, se você está usando com banco de dados relacional é com joins .
O fato de você poder permitir / não permitir alguns campos torna as junções não triviais (não simples). O que leva a consultas extras.
Além disso, as consultas aninhadas no graphql levam a consultas circulares e podem travar o servidor . Cuidado extra deve ser tomado.
A limitação da taxa de chamadas torna-se difícil porque agora o usuário pode disparar várias consultas em uma chamada.
DICA : Use o dataloader do Facebook para reduzir o número de consultas em caso de javascript / node
fonte
cost
à solicitação. Além disso, isso não é uma preocupação se você estiver usando consultas predefinidas, nas quais o cliente apenas envia o ID.Está ficando cada vez melhor a cada ano e, por enquanto, a comunidade do GraphQL está crescendo e, como resultado, há muito mais soluções para muitos problemas que foram destacados em outras respostas antes. Mas, para admitir o que ainda está impedindo as empresas de alocar todos os recursos ao GraphQL, gostaria de listar alguns problemas e soluções seguidos de outros não resolvidos.
Mas existem mais alguns casos que podem ser considerados desvantagens:
Para resumir, GraphQL é apenas uma ferramenta para objetivos específicos e com certeza não é uma solução mágica para todos os problemas e, claro, não é um substituto para o REST.
fonte
É muito bom ter um único endpoint e expor todos os dados. Encontro abaixo pontos a serem considerados para GraphQL:
Além disso, deve-se considerar os Prós após sua implementação:
Fácil de adicionar condições usando argumentos e ordenação personalizada, uma vez implementada
Use muitos filtros personalizados e se livre de todas as ações que precisam ser criadas, por exemplo, um usuário pode ter id, nome, etc como argumentos e realizar a filtragem. Além disso, os filtros também podem ser aplicados nos grupos dos usuários.
fonte
Eu acho que o graphql no momento deve ser parte da arquitetura de backend, para upload de arquivo você ainda atinge uma API regular
fonte