Comunicação entre Sistemas: O Poder do GraphQL e a Estratégia BFF

Dando continuidade à nossa série sobre Comunicação entre Sistemas, após explorarmos a maturidade do padrão REST, hoje avançamos para uma tecnologia que revolucionou a forma como consumimos dados, especialmente em dispositivos móveis: o GraphQL.Na NetExperts, como especialistas em infraestrutura e desenvolvimento, vemos o GraphQL não apenas como uma alternativa ao REST, mas como o motor principal para uma arquitetura de alta performance chamada BFF (Backend For Frontend).

O que é o padrão BFF (Backend For Frontend)?

O BFF é uma camada de backend intermediária, desenhada especificamente para atender às necessidades de uma interface de usuário particular (como um aplicativo iOS, Android ou um painel Web).

Em arquiteturas tradicionais, o frontend muitas vezes precisa consultar múltiplos microsserviços para montar uma única tela. O BFF centraliza essas chamadas:

  • Agregação: Ele busca dados de diferentes fontes (bancos de dados ou APIs REST legadas) e consolida tudo em uma única resposta.
  • Customização: Entrega apenas o que aquela interface específica precisa, sem carregar dados inúteis.
  • Segurança: Atua como um proxy, escondendo a complexidade e os endereços internos da sua infraestrutura.

Por que o GraphQL Reina no BFF?

O GraphQL é a linguagem de consulta perfeita para essa camada intermediária. Enquanto no REST o servidor impõe a estrutura do dado, no GraphQL o cliente solicita exatamente o que deseja.

A Otimização Vital para o Mobile

Aplicações móveis enfrentam desafios como latência de rede e consumo de bateria. O uso de GraphQL no BFF resolve dois problemas críticos:

  1. Overfetching: O app não baixa informações desnecessárias. Se a tela precisa apenas do nome do cliente, o GraphQL não enviará o endereço, CPF e histórico de compras.
  2. Underfetching: Resolve o problema de precisar fazer 5 requisições diferentes para exibir uma tela. Com uma única query, o BFF resolve todas as dependências no lado do servidor, onde a conexão é estável e rápida.

Tutorial: Implementando uma API GraphQL com Node.js

Para criar essa camada de comunicação, utilizaremos o Apollo Server, a biblioteca mais robusta para ecossistemas Node.js.

1. Estrutura de Arquivos

  • package.json (configurações)
  • schema.graphql (definição dos tipos)
  • index.js (servidor e lógica)

2. Instalação

Bash

npm init -y

npm install apollo-server graphql

3. Implementação do Servidor (index.js)

JavaScript

const { ApolloServer, gql } = require(‘apollo-server’);

// 1. Definição do Schema (Contrato entre Frontend e Backend)

const typeDefs = gql`

  type Servidor {

    id: ID!

    hostname: String

    ip: String

    status: String

  }

  type Query {

    # Rota para buscar servidores da empresa

    listaServidores: [Servidor]

  }

`;

// 2. Resolvers (A “mágica” que busca os dados)

const resolvers = {

  Query: {

    listaServidores: () => {

      // Aqui você poderia buscar de um banco de dados ou outra API

      return [

        { id: “1”, hostname: “srv-google-premier”, ip: “10.0.0.1”, status: “Ativo” },

        { id: “2”, hostname: “srv-vpn-netexperts”, ip: “10.0.0.2”, status: “Manutenção” }

      ];

    },

  },

};

const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {

  console.log(`🚀 BFF GraphQL NetExperts pronto em ${url}`);

});

Como o Frontend realiza a chamada (Passo a Passo)

Diferente do REST, onde usamos vários endpoints, no GraphQL existe apenas um único endpoint (geralmente /graphql) e todas as requisições são do tipo POST.

Exemplo de Query enviada pelo Frontend:

GraphQL

query {

  listaServidores {

    hostname

    status

  }

}

Implementação no Frontend (JavaScript):

JavaScript

async function fetchBFF() {

  const query = `

    query {

      listaServidores {

        hostname

        status

      }

    }

  `;

  const response = await fetch(‘http://localhost:4000/’, {

    method: ‘POST’,

    headers: { ‘Content-Type’: ‘application/json’ },

    body: JSON.stringify({ query }),

  });

  const { data } = await response.json();

  console.log(“Dados recebidos do BFF:”, data.listaServidores);

}

Conclusão

A comunicação entre sistemas via GraphQL permite que a NetExperts entregue softwares mais rápidos e resilientes. Ao adotar o padrão BFF, você isola a complexidade do seu ecossistema de servidores e entrega uma experiência fluida para o usuário final, especialmente em dispositivos móveis onde cada byte conta.

Referências e Documentações Oficiais: