Capítulo 14 de 35

Database Webhooks: O Banco de Dados Proativo (Sem Long-Polling)

Índice do Manual

Na arquitetura tradicional, o Banco de Dados é tratado como uma entidade passiva. Ele apenas guarda informações e aguarda silenciosamente que um servidor pergunte por elas.

Esse paradigma passivo gerou uma das piores e mais custosas práticas da engenharia de software amadora: o Long-Polling e os Cron Jobs excessivos.

Quando um evento externo ocorre — por exemplo, a aprovação de um pagamento via Pix ou a finalização de um processamento de vídeo —, equipes inexperientes (ou Inteligências Artificiais sem contexto) tentam resolver o problema programando o Next.js para fazer perguntas repetitivas: "O pagamento já caiu? ... E agora, já caiu? ... E agora?"

Essa repetição destrói a performance do banco de dados, gera custos absurdos de faturamento por requisições inúteis e cria latência na experiência do usuário.

A solução Sênior no ecossistema Supabase inverte esse jogo. Nós transformamos o banco de dados passivo em um Banco de Dados Proativo.


O Padrão: Database Webhooks (pg_net)

O Supabase fornece uma infraestrutura baseada no PostgreSQL que possui a capacidade nativa de fazer requisições HTTP para a internet.

A regra arquitetural é simples: O servidor Next.js nunca deve perguntar se algo mudou. É o Banco de Dados que deve avisar o servidor quando a mudança acontecer.

Utilizando a extensão pg_net (nativa do Supabase), nós criamos gatilhos (Triggers) atrelados diretamente a uma tabela.

Como funciona o fluxo de Eventos:

  1. O Gatilho (Trigger): Uma nova linha é inserida na tabela pagamentos com o status de Aprovado.
  2. A Ação Proativa: Em menos de um milissegundo, o Trigger do PostgreSQL é acionado.
  3. O Disparo Assíncrono: Usando o pg_net, o banco de dados dispara silenciosamente uma requisição HTTP POST para uma Supabase Edge Function contendo os dados daquela linha inserida.
  4. A Lógica Isolada: A Edge Function recebe os dados e executa a lógica de negócios pesada (como disparar um e-mail de boas-vindas usando a Resend ou liberar o acesso ao curso), totalmente separada da transação do banco.

Por que utilizar Webhooks e não Triggers comuns?

Triggers tradicionais executam funções (Functions) de banco de dados e bloqueiam a transação até terminarem.

Se você colocar a lógica de "chamar uma API externa para enviar e-mail" dentro de um Trigger comum, e a API de e-mail demorar 5 segundos para responder, a inserção do usuário no banco de dados ficará travada por 5 segundos. Se a API de e-mail falhar, a criação do usuário falha.

O Database Webhook com pg_net resolve isso de forma arquiteturalmente perfeita porque ele é assíncrono. O banco insere a linha, dispara a requisição HTTP "jogue e esqueça" (fire and forget) e finaliza a transação do banco instantaneamente. A Edge Function lida com a lentidão da API externa no próprio tempo dela, sem impactar a velocidade do banco central.


O Veredito Arquitetural

Em sistemas corporativos de alta demanda (SaaS e E-commerce):

  1. É proibido criar loops de verificação contínua no Next.js (Polling).
  2. É proibido usar Cron Jobs no servidor apenas para monitorar se o status de uma coluna mudou.
  3. Toda reação secundária a uma mudança de dados deve ser arquitetada através de Database Webhooks apontando para Edge Functions.

O isolamento dessa lógica em funções Serverless Edge, acionadas exclusivamente por eventos do banco, é o que garante a escalabilidade horizontal e o Zero-Downtime de arquiteturas modernas.