Log in to leave a comment
No posts yet
O PostgreSQL agora ultrapassou o status de um simples armazenamento de dados. Não é coincidência que ele tenha conquistado o primeiro lugar na pesquisa do Stack Overflow de 2025, superando o MySQL por uma margem de 15 pontos percentuais. Ao colocar o PostgREST sobre este banco de dados poderoso, você não precisa escrever APIs CRUD tediosas em Node.js ou Python. No entanto, muitos hesitam diante de integrações de pagamento ou configurações de permissões complexas. Surge a dúvida: "Isso realmente funcionará sem um servidor?". A conclusão curta é: sim, é possível. E de forma muito elegante.
A maior preocupação ao usar PostgREST são as chamadas HTTP externas, como aprovações de pagamento ou envio de e-mails. Esperar por um servidor externo de dentro do DB é uma ideia terrível. Mas com o módulo de extensão pg_net, a história muda. Esta ferramenta, baseada em libcurl, envia solicitações de forma assíncrona sem esperar pela resposta da API externa.
Ao integrar APIs de pagamento como a Toss Payments, este método brilha. A transação principal apenas salva os dados e termina imediatamente. A chamada real da API é processada em uma fila de segundo plano. Dessa forma, você pode manter o tempo de resposta da API abaixo de 200ms, independentemente do status do servidor externo. Ao ver o rendimento total do sistema saltar mais de 3 vezes, você se perguntará por que sofreu tanto com servidores de API até agora.
A lógica complexa de verificar estoque e processar pedidos é geralmente resolvida com instruções if-else no código do backend. No entanto, isso é o começo da corrupção de dados. Em vez disso, tente usar o pg_jsonschema. Esta extensão escrita em Rust termina a correspondência de padrões JSON de 100.000 itens em apenas 48ms.
O método é claro: aplique restrições CHECK nas tabelas ou crie gatilhos BEFORE INSERT. Se as condições não forem atendidas, basta lançar um erro com RAISE EXCEPTION. Nesse momento, se você definir o SQLSTATE como PT402, o PostgREST enviará automaticamente o código 402 Payment Required para o cliente. Economize as 5 horas que você gastaria escrevendo código de validação no backend e use-as para uma modelagem de dados mais importante.
No PostgREST, os parâmetros de URL do cliente tornam-se diretamente a consulta. É conveniente, mas perigoso. Filtrar por colunas sem índice abre as portas para o inferno de desempenho. Nestes casos, o pg_stat_statements é essencial. Ele mostra em tempo real quais consultas estão consumindo recursos.
Na prática, apenas analisar o plano de execução com o comando EXPLAIN (ANALYZE, BUFFERS) e mudar de um scan sequencial para um scan de índice melhora o desempenho em mais de 3 vezes. A redução de 30% nos custos de nuvem é um bônus. Se cálculos complexos forem necessários, criar um índice em colunas geradas virtuais no PostgreSQL 18 também é uma ótima opção.
Pare de entupir o seu backend com middlewares para segurança. O PostgREST aproveita 100% da Segurança em Nível de Linha (RLS) do PostgreSQL. Ele lê as informações do usuário contidas no JWT através da função current_setting e controla as permissões no nível do SQL.
Uma política como "Permitir que apenas assinantes pagos vejam este post" termina com apenas uma instrução CREATE POLICY. Isso impede fundamentalmente incidentes de vazamento de dados causados por desenvolvedores que esquecem de chamar funções de verificação de permissão no código. Operações sensíveis, como alteração de senha, podem ser encapsuladas em funções com a opção SECURITY DEFINER. Como a lógica de segurança se concentra no DB, o gerenciamento torna-se muito mais fácil.
Na arquitetura PostgREST, uma mudança de esquema significa uma atualização de API. Fazer isso manualmente certamente causará acidentes. Você deve gerenciar todas as alterações como arquivos .sql usando ferramentas como o dbmate.
Ao configurar um pipeline no GitHub Actions, as alterações são refletidas automaticamente no servidor de staging toda vez que você faz um push do código. Após a migração, envie um sinal SIGUSR1 para o PostgREST ou execute NOTIFY pgrst, 'reload schema'. A API será atualizada para o estado mais recente sem tempo de inatividade. É a maneira mais segura para até mesmo um desenvolvedor solo ter estabilidade operacional de nível empresarial.