Respostas:
Desvantagens:
Mas, esses são mais do que contrariados por estes:
graphql-spring-boot-starter
e graphql-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.
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
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.
É 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.
Eu acho que o graphql no momento deve ser parte da arquitetura de backend, para upload de arquivo você ainda atinge uma API regular