ouro.capital
||
gateways

API de Checkout: REST vs GraphQL para Pagamentos no Brasil

2024-05-03·10 min read·Matheus Feijão

Ponto-chave

A escolha entre REST e GraphQL no checkout não é apenas técnica, mas estratégica. O REST oferece a segurança e a previsibilidade exigidas pelos grandes gateways, enquanto o GraphQL brilha em e-commerces complexos ao reduzir a latência em redes móveis brasileiras.

Imagine a Black Friday de 2023. O comércio eletrônico brasileiro movimentou cerca de R$ 8,7 bilhões em poucos dias. Nos bastidores desse volume colossal, cada milissegundo de carregamento de página ditou quem lucrou e quem amargou carrinhos abandonados. Quando o cliente aperta o botão 'Finalizar Compra', uma verdadeira sinfonia de chamadas de rede acontece em frações de segundo. O maestro dessa orquestra? A sua API de checkout.

Por anos, o debaté sobre a arquitetura dessas APIs ficou restrito aos fóruns de desenvolvedores. Hoje, essa decisão subiu para a mesa da diretoria. A forma como seu front-end se comúnica com o gateway de pagamento (seja ele Stone, Mercado Pago, Pagar.me ou Nubank) afeta diretamente a sua taxa de conversão, seus custos de infraestrutura e a sua resiliência contra fraudes.

Nossa análise foca exatamente no embaté que está redefinindo as integrações financeiras modernas: REST vs GraphQL. Qual modelo entrega a melhor experiência de pagamento? Quando vale a pena abandonar o padrão consolidado do mercado para abraçar a flexibilidade prometida pelo GraphQL? Vamos dissecar as duas abordagens, olhando para os desafios reais do e-commerce brasileiro — da latência das redes 3G no interior do país às exigências do PCI-DSS.

A Evolução Inevitável: De SOAP a GraphQL

Para entender a encruzilhada atual, precisamos olhar rápidamente pelo retrovisor. Duas décadas atrás, as integrações de pagamento no Brasil dependiam de protocolos rígidos e pesados como o SOAP (Simple Object Access Protocol). Era a época dos arquivos XML intermináveis e das integrações que levavam meses para serem homologadas junto às adquirentes tradicionais.

Com a chegada de players como Stripe no exterior e a evolução de gateways locais como Pagar.me e Vindi, o mercado migrou em massa para o REST (Representational Staté Transfer). O formato JSON tomou conta. As integrações ficaram mais limpas, semânticas e rápidas. O REST se tornou o padrão ouro absoluto. O Banco Central do Brasil, inclusive, construiu toda a arquitetura do Open Finance e as APIs do Pix baseadas em princípios RESTful.

Mas o e-commerce mudou. A tela de checkout deixou de ser um simples formulário de cartão de crédito. Hoje, um checkout moderno precisa consultar saldo de cashback, calcular frete dinâmico, oferecer split de pagamentos (Pix + Cartão), listar parcelamentos com juros variáveis e validar tokens de antifraude. Tudo isso na mesma tela.

Para o REST, isso significa múltiplas idas e vindas ao servidor. Para o cliente no celular, significa lentidão. É exatamente nessa dor que o GraphQL, criado pelo Facebook em 2012 e adotado por gigantes da tecnologia, encontrou seu espaço no mundo dos pagamentos.

A Hegemonia do REST nos Gateways Brasileiros

Se você abrir a documentação de qualquer grande adquirente ou gateway operando no Brasil hoje, vai encontrar uma API REST. O modelo funciona baseado em 'recursos' e 'verbos' HTTP. Você faz um GET para buscar as parcelas disponíveis e um POST para processar a transação.

Previsibilidade e Cache Nativo

A maior força do REST é a sua previsibilidade. Cada endpoint tem uma função clara. Se algo dá errado, o servidor responde com um código HTTP padrão: 400 para erro de validação, 401 para falha de autenticação, 429 para excesso de requisições, 500 para erro interno. Isso fácilita absurdamente a vida dos sistemas de monitoramento (como Datadog ou New Relic) e das equipes de SRE (Site Reliability Engineering).

Além disso, o REST aproveita o cache da própria infraestrutura da web. Requisições GET (como consultar a lista de bandeiras aceitas ou as regras de parcelamento) podem ser cacheadas em CDNs (como Cloudflare ou AWS CloudFront). Isso tira uma carga gigantesca dos seus servidores e responde ao cliente em milissegundos.

O Problema do Over-fetching e Under-fetching

O calcanhar de Aquiles do REST no checkout é a ineficiência no tráfego de dados. Chamamos isso de over-fetching (buscar dados demais) e under-fetching (buscar dados de menos).

Imagine que seu checkout precisa exibir apenas os últimos 4 dígitos do cartão salvo do cliente e a data de validade. Ao chamar o endpoint GET /customers/123/cards, a API REST do gateway provavelmente vai devolver um payload JSON enorme, contendo o nome do banco, o token completo, o endereço de cobrança, a data de criação do registro e dezenas de outros campos que você não vai usar na tela.

Isso é o over-fetching. Você está gastando banda de rede do seu cliente para baixar dados inúteis para aquela interface. E se, além dos cartões, você precisar do saldo da carteira digital? Terá que fazer uma segunda requisição (GET /customers/123/wallet). Esse é o under-fetching. Múltiplas viagens ao servidor significam mais tempo de carregamento.

GraphQL: A Promessa de um Checkout sob Medida

O GraphQL inverte a lógica do REST. Em vez de ter dezenas de endpoints, você tem apenas um (geralmente POST /graphql). O cliente (seu front-end) envia uma 'query' específicando exatamente quais campos ele quer, e o servidor devolve apenas aquilo. Nem um byte a mais, nem um byte a menos.

O Poder da Requisição Única

No cenário de checkout complexo, o GraphQL brilha. Em uma única chamada de rede, o seu front-end pode pedir:

  • Os dados básicos do usuário.
  • O valor total do carrinho.
  • As opções de parcelamento para aquele valor específico.
  • A chave Pix Copia e Cola pré-gerada.

Reduzir quatro ou cinco requisições REST para apenas uma chamada GraphQL tem um impacto brutal na percepção de velocidade. Em conexões móveis instáveis — uma realidade constante para a maior parte da população brasileira fora dos grandes centros —, evitar que a rede caia entre a segunda e a terceira requisição REST salva a venda.

Redução Drástica de Payload

Observamos que implementações de GraphQL em e-commerces de alto volume conseguem reduzir o tamanho do payload transferido em até 80%. Quando você processa 100 mil pedidos por hora, essa economia de banda não apenas acelera o lado do cliente, mas reduz significativamente a conta de transferência de dados nos seus servidores na nuvem (AWS egress costs, por exemplo).

Grandes plataformas de e-commerce headless (como VTEX IO e Shopify) adotaram o GraphQL fortemente justamente para permitir que lojistas e agências montem checkouts customizados sem depender de APIs rígidas.

O Embaté na Prática: Latência, Segurança e Complexidade

Até aqui, o GraphQL parece a solução mágica para todos os problemas de pagamento. A realidade dos bastidores de engenharia financeira, porém, é bem mais espinhosa. Vamos colocar as duas arquiteturas no ringue sob os critérios mais críticos para quem processa dinheiro.

Latência e Redes Móveis no Brasil

De acordo com dados da Anatel e pesquisas do setor varejista, mais de 70% das compras online no Brasil hoje são iniciadas ou concluídas via smartphones. A latência (o tempo que a informação leva para ir do celular ao servidor e voltar) é o grande inimigo.

O GraphQL vence a batalha da latência em redes ruins ao exigir menos idas e vindas (round trips). No entanto, processar uma query GraphQL complexa exige mais poder computacional do lado do servidor do que resolver uma rota REST simples. Se o seu backend não for otimizado, você troca o tempo de rede pelo tempo de processamento, zerando o benefício.

Segurança e Raté Limiting

Aqui o REST dá uma surra no GraphQL. O mercado financeiro é regulado por normas rigorosas como o PCI-DSS (Payment Card Industry Data Security Standard) e as circulares de segurança cibernética do Bacen (como a Resolução CMN 4.893).

Proteger uma API REST é um caminho conhecido. Você usa um WAF (Web Application Firewall) e configura regras claras: 'Se um IP tentar bater no endpoint POST /charge mais de 10 vezes em um minuto, bloqueie'.

No GraphQL, todas as requisições vão para o mesmo endpoint (/graphql) e usam o método POST. O WAF tradicional fica cego. Ele não sabe se aquele POST é uma tentativa de ataque de força bruta testando milhares de cartões de crédito clonados, ou se é apenas um usuário atualizando o CEP do frete freneticamente. Para proteger o GraphQL em pagamentos, você precisa implementar ferramentas avançadas de 'Query Complexity Analysis' (Análise de Complexidade de Query), o que eleva muito a barra técnica da sua equipe de segurança.

Cacheabilidade

Como mencionamos, o REST faz cache de forma nativa na camada HTTP. O GraphQL, por usar POST para tudo (mesmo para consultas de leitura), quebra o modelo de cache tradicional da internet. Solucionar isso exige a implementação de bibliotecas específicas (como Apollo Client/Server) ou o uso de Persisted Queries, adicionando uma camada extra de complexidade na arquitetura do seu checkout.

Quando o GraphQL Realmente Faz Sentido no Checkout?

Nossa experiência acompanhando a evolução das fintechs brasileiras mostra que não existe bala de prata. A decisão depende do modelo de negócio e da maturidade do time de engenharia.

Você deve considerar fortemente o GraphQL se:

  1. Você opera uma arquitetura Headless / Omnichannel: Se o seu sistema de pagamentos precisa servir dados para um site web, um app iOS, um app Android e um totem de autoatendimento físico, o GraphQL permite que cada cliente peça apenas o que precisa, usando o mesmo backend.
  2. Seu checkout é um 'Super App': Plataformas que agregam múltiplos serviços financeiros na mesma tela (compras, seguros, investimentos) se beneficiam muito da federação de dados do GraphQL.
  3. Você sofre com abandono de carrinho em conexões móveis: Se a análise de dados mostrar que usuários de 3G/4G estão desistindo devido ao tempo de carregamento da página de pagamento.

Por outro lado, você deve manter o REST se:

  1. A segurança e o compliance são gargalos: Se o seu time de SecOps é enxuto, proteger uma API REST contra fraudadores de cartão é infinitamente mais fácil e barato.
  2. A integração é B2B direta: Comúnicação servidor-a-servidor (como um webhook de notificação de Pix pago) não sofre com problemas de latência de rede móvel. O REST cumpre esse papel com perfeição.
  3. Você depende de gateways terceiros: Praticamente todos os gateways no Brasil expõem APIs REST. Tentar colocar um GraphQL por cima de tudo isso sem necessidade real apenas cria uma camada extra de falha.

O Veredito: O Padrão BFF como Caminho do Meio

O mercado brasileiro encontrou uma solução pragmática para não ter que escolher um lado e perder as vantagens do outro: o padrão BFF (Backend for Frontend).

Na prática, as grandes operações de e-commerce mantêm toda a sua infraestrutura core de pagamentos e comúnicação com os gateways em REST rigoroso e seguro. Ninguém processa a liquidação financeira de um cartão de crédito diretamente via GraphQL.

O que se faz é criar uma camada intermediária (o BFF) que expõe uma API GraphQL exclusivamente para o front-end do checkout. O celular do cliente faz uma única query rápida e leve para o BFF. O BFF, que está rodando em servidores de alta velocidade na mesma nuvem do backend financeiro, quebra essa query e faz as quatro ou cinco chamadas REST necessárias para os serviços internos de pagamento, risco e antifraude.

Essa abordagem entrega o melhor dos dois mundos: a velocidade e a economia de dados do GraphQL para o consumidor final, com a segurança, a estabilidade e o monitoramento granular do REST nos bastidores financeiros.

Não reescreva sua API de pagamentos apenas porque o GraphQL é a tecnologia do momento. O dinheiro não aceita hype, aceita resiliência. Avalie a dor real do seu usuário. Se o gargalo for a renderização do front-end, o GraphQL é a sua melhor ferramenta. Se o gargalo for o índice de chargeback ou a estabilidade da adquirente, invista em melhorar sua arquitetura REST.

Perguntas Frequentes

MF

Matheus Feijão

CEO & Fundador — ouro.capital

Especialista em fintech e criptoativos desde 2002. CEO da ouro.capital.