À medida que as empresas atravessam as complexidades do cenário digital, a integração perfeita de diversos sistemas emergiu como um elemento-chave para impulsionar o sucesso empresarial. No entanto, as abordagens de integração tradicionais, sobrecarregadas pela sua dependência de esquemas de dados fixos, muitas vezes tornam mais difícil acompanhar as exigências das aplicações modernas.
Adotar uma abordagem mais moderna ao acesso aos dados pode fazer toda a diferença. Ao adotar o GraphQL, as organizações podem projetar sistemas back-end mais flexíveis, escaláveis e responsivos para extrair o máximo valor de seus dados, promovendo a inovação e a diferenciação no mercado.
Cenário de exemplo: Sistema de gerenciamento de viagens
Vejamos um exemplo de um serviço hipotético de gerenciamento de viagens chamado TravelTracker.
TravelTracker é um aplicativo desenvolvido para agilizar a experiência de viagem, fornecendo aos usuários serviços personalizados com base em suas preferências de perfil, histórico de viagens e pontos de fidelidade. Este sistema gerencia dados de perfil de usuário, atendendo informações pessoais e preferências de viagem. Os dados do perfil do usuário são armazenados em um banco de dados NoSQL altamente escalonável para rápida recuperação e atualização.
O banco de dados de histórico de viagens registra atividades de viagens anteriores dos usuários, incluindo detalhes de reservas anteriores, como voos, hotéis, aluguel de carros e pacotes turísticos. Com a integração do programa de fidelidade, o saldo de milhas dos usuários, os pontos ganhos, os níveis de status elite e as recompensas disponíveis são obtidos de vários provedores de programas de fidelidade.
Em um sistema como este, definir a arquitetura de API adequada é fundamental. A arquitetura de API é a base de como vários sistemas de software interagem. Não se trata apenas de estabelecer uma conexão; trata-se de definir as regras e preparar o caminho para uma comunicação confiável e flexível dentro de um ecossistema de software.
Os estilos de arquitetura mais comuns, como REST, GraphQL, WebSocket, Webhooks, RPC, SOAP, etc., apresentam abordagens exclusivas de design de API. A seleção do estilo de API apropriado envolve considerar fatores como requisitos do projeto, considerações de desempenho, necessidades do cliente e compatibilidade do ecossistema para garantir que a arquitetura escolhida esteja alinhada com os objetivos e restrições do projeto.
Vamos explorar como o popular design baseado em REST aborda o problema e examinar se o GraphQL oferece uma alternativa melhor.
Design de API com REST vs. GraphQL
Vamos examinar o design da API no exemplo do TravelTracker. Imagine que a visualização inicial do painel do aplicativo apresenta uma visualização resumida que inclui dados importantes do perfil do usuário, histórico de viagens mais recente e dados de fidelidade principais do usuário que está conectado no momento.
Com uma abordagem de API REST, os dados necessários precisam ser coletados acessando vários endpoints. Portanto, esses endpoints podem ser definidos da seguinte forma:
/users/<id>
endpoint para buscar os dados do perfil do usuário./users/<id>/history
endpoint que retorna o histórico de viagens de um usuário./users/<id>/loyalty
endpoint que retorna uma lista de detalhes da conta de fidelidade.

Com a abordagem GraphQL, uma única consulta pode ser enviada ao servidor, especificando os dados exatos necessários. O servidor então responde com os dados solicitados.

GraphQL é o melhor REST
GraphQL, introduzido pelo Facebook em 2012 e lançado publicamente em 2015, é um protocolo de camada de aplicação projetado para aprimorar chamadas de API RESTful. Ele funciona tanto como uma linguagem de consulta para a API quanto como um tempo de execução do lado do servidor, executando consultas com base em um sistema de tipo definido para os dados.
Embora o REST seja amplamente preferido pela sua simplicidade, ampla adoção e compatibilidade com a infraestrutura existente, o GraphQL apresenta inúmeras vantagens sobre o REST.
GraphQL oferece mais flexibilidade em relação aos dados, evitando os problemas comuns de busca excessiva e insuficiente de dados. Através de seus recursos de consulta, os aplicativos clientes podem especificar com precisão os dados necessários, eliminando a necessidade de múltiplas chamadas de rede. Isso não apenas melhora o desempenho da API GraphQL, mas também resolve problemas relacionados à eficiência da largura de banda. Além disso, os clientes podem desenvolver interfaces de usuário personalizadas de forma iterativa, solicitando conjuntos de dados específicos adicionais sem quaisquer alterações no nível da API.
GraphQL possui um esquema fortemente tipado que define com precisão os dados disponíveis e sua estrutura, reduzindo a probabilidade de inconsistências durante a recuperação dos dados. Os esquemas servem como a única fonte de verdade para a API, o que é útil para os consumidores da API. Eles permitem suporte a ferramentas poderosas, incluindo documentação gerada automaticamente, verificação de tipo e integração IDE. Isso aprimora a experiência do desenvolvedor e facilita o processo de desenvolvimento, fornecendo informações e assistência valiosas.
Cada recurso em uma API RESTful é identificado por uma URL exclusiva, o que torna a API intuitiva e fácil de entender. As APIs GraphQL normalmente expõem um único endpoint que aceita consultas, mutações e assinaturas. Isso introduz maior complexidade, mas simplifica a comunicação cliente-servidor e reduz a necessidade de vários endpoints, levando a uma arquitetura mais simplificada. Também melhora a capacidade de manutenção da API.
REST vs. GraphQL: Fazendo a escolha certa
Determinar se usar REST ou GraphQL depende de vários fatores, incluindo requisitos do projeto, experiência da equipe de desenvolvimento e casos de uso específicos.
REST é mais adequado para os seguintes cenários:
- Se o aplicativo tiver necessidades diretas de dados, REST poderá ser uma escolha adequada. APIs RESTful são adequadas para operações CRUD (criar, ler, atualizar, excluir) em recursos com estruturas de dados previsíveis.
- Devido à sua natureza sem estado, as APIs REST funcionam bem com mecanismos de cache. Se o aplicativo exigir amplo cache de respostas para melhorar o desempenho e reduzir a carga do servidor, REST poderá ser uma opção melhor. O armazenamento em cache no GraphQL é possível, mas pode apresentar desafios devido à sua natureza flexível e à granularidade da recuperação de dados.
- Se o projeto precisar ser integrado a sistemas ou serviços existentes que já expõem APIs RESTful, aderir ao REST pode simplificar os esforços de integração e garantir a compatibilidade com fluxos de trabalho estabelecidos.
GraphQL se torna mais adequado para estes cenários:
- Se o aplicativo tiver requisitos de dados complexos ou precisar buscar dados de diversas fontes em uma única solicitação, os recursos flexíveis de consulta do GraphQL o tornam uma escolha atraente.
- Se os objetivos principais envolvem capacitar os clientes para solicitar apenas os dados de que necessitam e garantir a adaptabilidade da API para evoluir sem interromper os clientes existentes, então o GraphQL surge como a escolha preferida. Isto representa uma vantagem significativa, especialmente em cenários onde o aplicativo cliente opera em redes móveis lentas ou é utilizado por usuários em regiões remotas com conectividade menos consistente.
- Caso haja necessidade de acomodar vários clientes por meio da mesma API, cada um com necessidades de dados distintas, o GraphQL se destaca como a opção superior. Ele lida habilmente com diversos requisitos do cliente por meio de um único endpoint de API, garantindo que nenhuma mudança perturbadora afete os clientes existentes. Essa flexibilidade é especialmente benéfica para manter um serviço contínuo em diversas plataformas ou versões.
Crie um serviço GraphQL com Ballerina e Choreo
Existem diversas linguagens de programação e produtos de integração comumente usados para desenvolver soluções baseadas em GraphQL. A escolha da linguagem de programação ou produto de integração correto é crucial para desenvolver um aplicativo GraphQL que atenda às necessidades e tenha desempenho ideal. Ao selecionar, considere fatores como experiência da equipe de desenvolvimento, requisitos do projeto, considerações de desempenho, apoio da comunidade e compatibilidade do ecossistema.
Ballerina é uma linguagem de programação nativa da nuvem de código aberto otimizada para integração. O desenvolvimento de um serviço GraphQL com Ballerina envolve o aproveitamento de seus recursos integrados para desenvolvimento e integração de API perfeitos. Assim que a fase de desenvolvimento for concluída, os aplicativos GraphQL podem ser implantados usando tecnologia de implantação, como VMs ou Kubernetes. Também é possível usar o Choreo como plataforma de desenvolvedor interna para implantar e controlar os aplicativos GraphQL nativos da nuvem, reduzindo o tempo de lançamento no mercado.
Desenho de esquema com o sistema tipo Ballerina
Ballerina oferece suporte a abordagens de primeiro código e de esquema ao desenvolver serviços GraphQL. Com o rico suporte ao sistema de tipos do Ballerina, definir tipos e campos que refletem o modelo de dados do aplicativo é muito intuitivo. O designer de serviço GraphQL simplificará a compreensão e a navegação de serviços GraphQL complexos e permitirá que o desenvolvedor navegue neles sem esforço, sem examinar o código diretamente.
Implementação do Resolver com serviços Ballerina
O suporte integrado aos serviços Ballerina permite que os desenvolvedores escrevam resolvedores para lidar com consultas, mutações e assinaturas do GraphQL usando a sintaxe familiar da linguagem de programação. Isso permite que os desenvolvedores se concentrem na lógica de negócios e elimina qualquer carga relacionada ao protocolo.
Testando com a estrutura de teste e ferramentas de cliente Ballerina
A estrutura de teste do Ballerina fornece recursos de teste abrangentes, incluindo simulação, asserção e análise de cobertura, para validar o comportamento dos serviços GraphQL, como resolvedores e tratamento de erros. O módulo Ballerina GraphQL inclui um cliente GraphiQL integrado para testar as APIs GraphQL usando o IDE GraphiQL.
Documentação e geração de esquema
A estrutura de documentos do Ballerina permite documentar tipos, campos, consultas, mutações e assinaturas no esquema usando os comentários do documento do Ballerina. Isso gerará documentação de API interativa usando as ferramentas integradas de geração de documentação do Ballerina, facilitando a compreensão e a interação dos clientes com o serviço GraphQL. Além disso, a ferramenta GraphQL da Ballerina fornece recursos para gerar esquema GraphQL para um determinado serviço Ballerina GraphQL.
Recursos avançados do GraphQL
Além disso, Ballerina possui recursos avançados de GraphQL, como suporte integrado para cache GraphQL, federação e mecanismos de carregamento de dados, perfeitamente integrados em seu ecossistema, permitindo que os desenvolvedores arquitetem APIs GraphQL robustas e eficientes sem esforço. Medidas de segurança para proteger o serviço GraphQL podem ser implementadas usando os recursos de segurança integrados do Ballerina, como OAuth e JSON Web Tokens.
Implantação com Choreo
Finalmente, o serviço GraphQL pode ser implantado em um ambiente de produção usando Choreo. Choreo é uma plataforma interna de desenvolvedor como serviço que agiliza o processo de design, desenvolvimento, implantação e gerenciamento de aplicativos nativos da nuvem.
Choreo permite fácil implantação de aplicativos em plataformas de nuvem populares como AWS, Azure, Google Cloud e muito mais. Choreo lida com CI/CD, implantação, escalonamento e monitoramento, garantindo alta disponibilidade e confiabilidade em ambientes de produção. Além disso, o Choreo possui um console GraphQL integrado para testar endpoints GraphQL expostos publicamente.
Flexível, escalável, responsivo
À medida que as empresas navegam no cenário digital, a procura por uma integração perfeita de sistemas aumenta. GraphQL permite que as organizações arquitetem sistemas back-end mais flexíveis, escaláveis e responsivos. Usando o TravelTracker como exemplo, vimos como os recursos de consulta do GraphQL simplificam a recuperação de dados, abordando problemas como busca excessiva e insuficiente. Aproveitar os recursos do Ballerina e do Choreo aprimora ainda mais o desenvolvimento do GraphQL, oferecendo integração perfeita e implantação simplificada.
Anupama Pathirage é diretor de engenharia de integração da WSO2. Antes de ingressar no WSO2, Anupama trabalhou na DirectFN (Pvt.) Limited como líder técnica associada, onde foi responsável por pesquisar, projetar e desenvolver aplicativos de baixa latência de nível empresarial nos setores de serviços financeiros e mercado de capitais. Ela possui mestrado em ciência da computação (especialização em arquitetura de software) e bacharelado de primeira classe em ciência da computação e engenharia pelo departamento de ciência da computação e engenharia da Universidade de Moratuwa, Sri Lanka.
–
O New Tech Forum oferece um local para líderes de tecnologia – incluindo fornecedores e outros colaboradores externos – explorarem e discutirem tecnologias empresariais emergentes com profundidade e amplitude sem precedentes. A seleção é subjetiva, baseada na escolha das tecnologias que acreditamos serem importantes e de maior interesse para os leitores do InfoWorld. A InfoWorld não aceita material de marketing para publicação e reserva-se o direito de editar todo o conteúdo contribuído. Envie todos consultas para [email protected].