Back-end

Como Criar uma API Serverless Simples com Netlify Functions: Guia Prático para Devs

Aprenda a criar e implantar APIs serverless rápidas usando Netlify Functions. Um guia prático com exemplos de código, testes locais e análise honesta de custos e limitações.

Marcos Costa
Marcos Costa
16 de julho de 2026 8 min de leitura
Notebook aberto em uma mesa de trabalho exibindo um código de função serverless no editor, com iluminação ambiente suave em tons de azul e verde-água.

Configurar e gerenciar servidores inteiros — lidando com provisionamento, atualizações de sistema operacional, Docker, Nginx e PM2 — apenas para rodar uma API simples, um formulário de contato ou um microsserviço de MVP é um desperdício de tempo e recursos. Para desenvolvedores focados em entregar valor rápido, a arquitetura serverless resolve esse problema ao abstrair completamente a infraestrutura.

As Netlify Functions surgem como uma das soluções mais práticas do mercado para esse cenário. Elas permitem que você escreva código backend diretamente no repositório do seu frontend, com deploy automatizado e escalabilidade transparente.

Neste guia prático, você aprenderá como as Netlify Functions funcionam, suas vantagens e limitações, como testar localmente e como estruturar uma API moderna utilizando a sintaxe do Functions 2.0.


O que são Netlify Functions e como elas funcionam?

As Netlify Functions são funções serverless executadas sob demanda. Por baixo dos panos, o Netlify utiliza a infraestrutura do AWS Lambda, mas remove toda a complexidade de configuração de API Gateways, permissões do IAM e provisionamento de recursos. Você simplesmente salva um arquivo de código em uma pasta específica e o Netlify o transforma em um endpoint HTTP seguro.

As funções possuem suporte nativo a TypeScript e JavaScript. Como elas rodam em um ambiente Node.js gerenciado, você pode utilizar qualquer pacote do ecossistema npm. Se você está começando, vale a pena ler nosso artigo para que você Conheça o Node.js e entenda o poder desse ecossistema, além de compreender O que é JavaScript e por que você deve aprender essa linguagem em 2025.

A API Moderna do Functions 2.0

Lançada para melhorar drasticamente a experiência de desenvolvimento, a versão Functions 2.0 do Netlify introduziu uma API baseada nos padrões web modernos de Request e Response (semelhante ao que encontramos na Fetch API do navegador e em ambientes como Cloudflare Workers).

Anteriormente, era necessário lidar com callbacks e sintaxes complexas de evento/contexto da AWS. Agora, o desenvolvimento é muito mais limpo e intuitivo.

Tipos de Funções Disponíveis

O Netlify oferece três categorias de funções para atender a diferentes necessidades arquiteturais:

  1. Regulares (Resposta Rápida): Ideais para endpoints de APIs tradicionais. Elas devem responder rapidamente (limite padrão de execução de 10 segundos no plano gratuito).
  2. Background Functions: Executadas de forma assíncrona em segundo plano. São indicadas para tarefas pesadas, como processamento de imagens ou sincronização de dados, permitindo um tempo de execução de até 15 minutos.
  3. Scheduled Functions (Cron Jobs): Funções configuradas para rodar em intervalos de tempo específicos (por exemplo, todo dia às 8h), ideais para rotinas de limpeza de banco de dados ou geração de relatórios.

Vantagens e Limitações: Quando usar (e quando evitar)

Como qualquer decisão de arquitetura, o uso de Netlify Functions envolve trade-offs técnicos claros.

Vantagens

  • Deploy Baseado em Git: O fluxo de CI/CD do Netlify compila e distribui suas funções automaticamente a cada git push.
  • Zero Configuração de Infraestrutura: Sem preocupações com escalabilidade, balanceamento de carga ou patches de segurança no servidor.
  • Fim dos Problemas de CORS: Como as funções podem ser servidas sob o mesmo domínio do frontend (ex: meusite.com/.netlify/functions/minha-funcao), você elimina dores de cabeça com Cross-Origin Resource Sharing.

Limitações e Desvantagens

  • Cold Starts: Se uma função não for invocada por algum tempo, a próxima requisição sofrerá um pequeno atraso (geralmente milissegundos) enquanto o container serverless é inicializado.
  • Conexões Persistentes Inviáveis: Por serem stateless (sem estado) e efêmeras, você não pode usar WebSockets nativos para comunicação bidirecional em tempo real.
  • Limites de Tempo de Execução: Se o seu processo demorar mais de 10 segundos (em funções regulares), a requisição será interrompida com timeout.

Se o seu objetivo é construir o core de um sistema complexo com alto tráfego, processamento pesado ou queries relacionais intensas que exigem pools de conexão persistentes, vale a pena estudar alternativas robustas de desenvolvimento backend ou planejar a arquitetura de um SaaS simples utilizando servidores dedicados ou instâncias de nuvem tradicionais.


Análise de Custos: O plano gratuito é realmente suficiente?

O Netlify é famoso por seu plano gratuito generoso, mas é fundamental que fundadores técnicos e equipes de desenvolvimento conheçam os limites exatos para evitar surpresas na fatura.

De acordo com a tabela de preços oficial do Netlify, o plano gratuito (Starter) inclui:

  • 125.000 invocações de funções por mês.
  • 100 GB de largura de banda de rede.
  • 300 minutos de build mensais (compartilhados entre frontend e backend).

Se o seu projeto ultrapassar esses limites, o Netlify aplica cobranças adicionais automaticamente (geralmente pacotes extras de invocações ou tráfego) ou exige a migração para o plano Pro (atualmente a partir de $19 por membro/mês). Para protótipos, MVPs e sites institucionais com integrações simples, o plano gratuito é mais do que suficiente. No entanto, para APIs públicas de alto tráfego, os custos de largura de banda e invocações podem escalar mais rápido do que em provedores de nuvem pura (como AWS ou Google Cloud).


Passo a Passo: Criando e testando sua API localmente

Vamos colocar a mão na massa. Para este tutorial, certifique-se de ter o Node.js instalado em sua máquina.

Passo 1: Instalar o Netlify CLI

O Netlify CLI permite simular todo o ambiente de produção localmente, incluindo variáveis de ambiente e roteamento. Instale-o globalmente via npm:

npm install -g netlify-cli

Passo 2: Estruturar o Projeto

Crie uma nova pasta para o seu projeto e inicialize-a:

mkdir minha-api-serverless
cd minha-api-serverless
npm init -y

Crie um arquivo de configuração chamado netlify.toml na raiz do projeto. Esse arquivo indica ao Netlify onde suas funções estarão localizadas:

[build]
  functions = "netlify/functions"

Passo 3: Criar a Função “Hello World” (Functions 2.0)

Agora, crie a estrutura de pastas apontada no arquivo de configuração e adicione o arquivo da sua função:

mkdir -p netlify/functions
touch netlify/functions/hello.js

Abra o arquivo hello.js e adicione o seguinte código utilizando a sintaxe moderna de Request/Response:

export default async (request, context) => {
  // Obtém parâmetros da URL se necessário
  const url = new URL(request.url);
  const name = url.searchParams.get("name") || "Dev";

  return new Response(JSON.stringify({ message: `Olá, ${name}! Bem-vindo ao Netlify Functions.` }), {
    status: 200,
    headers: {
      "Content-Type": "application/json"
    }
  });
};

Passo 4: Executar o Ambiente de Testes Local

Inicie o servidor de desenvolvimento local do Netlify:

netlify dev

O CLI iniciará um servidor local (geralmente na porta 8888). Abra o seu navegador ou utilize o Insomnia/Postman para acessar:

http://localhost:8888/.netlify/functions/hello?name=Loopino

Você deverá ver a resposta JSON correspondente.


Exemplo Prático: Consumindo dados e integrando APIs externas

Funções serverless são excelentes intermediárias para consumir APIs de terceiros. Elas protegem suas credenciais e chaves de API, impedindo que fiquem expostas no código frontend do cliente.

Vamos criar uma função chamada weather.js que busca dados de uma API externa simulada:

// netlify/functions/weather.js
export default async (request, context) => {
  // Recupera uma chave de API salva de forma segura nas variáveis de ambiente
  const apiKey = process.env.WEATHER_API_KEY;
  
  if (!apiKey) {
    return new Response(JSON.stringify({ error: "Chave de API não configurada no servidor." }), {
      status: 500,
      headers: { "Content-Type": "application/json" }
    });
  }

  try {
    // Exemplo de requisição externa usando a fetch API nativa do Node.js
    const response = await fetch(`https://api.weatherapi.com/v1/current.json?key=${apiKey}&q=Sao_Paulo`);
    
    if (!response.ok) {
      throw new Error("Falha ao buscar dados meteorológicos");
    }
    
    const data = await response.json();

    return new Response(JSON.stringify({
      city: data.location.name,
      temp: data.current.temp_c,
      condition: data.current.condition.text
    }), {
      status: 200,
      headers: { "Content-Type": "application/json" }
    });

  } catch (error) {
    return new Response(JSON.stringify({ error: error.message }), {
      status: 500,
      headers: { "Content-Type": "application/json" }
    });
  }
};

Ao construir esses endpoints, lembre-se de aplicar boas práticas de segurança de APIs REST para validar os inputs recebidos e evitar injeções maliciosas ou abusos de consumo.


Integração com o Frontend e Deploy Contínuo

Integrar essas funções ao seu frontend é extremamente simples. No seu código JavaScript do lado do cliente (seja em React, Vue, Angular ou JS puro), você pode realizar chamadas utilizando caminhos relativos:

async function fetchWeather() {
  try {
    const response = await fetch('/.netlify/functions/weather');
    const data = await response.json();
    console.log(`A temperatura em ${data.city} é de ${data.temp}°C`);
  } catch (error) {
    console.error("Erro ao buscar dados do backend:", error);
  }
}

Deploy Automatizado via Git

Para colocar sua API em produção:

  1. Suba o seu código para um repositório no GitHub, GitLab ou Bitbucket.
  2. Acesse o painel do Netlify e crie um “New site from Git”.
  3. Selecione o seu repositório.
  4. O Netlify detectará automaticamente o arquivo netlify.toml e fará o deploy do seu frontend e das suas funções serverless de forma síncrona.

Esse fluxo simplificado está diretamente alinhado com as boas práticas para versionamento de APIs e deploy contínuo. Se você deseja comparar essa abordagem com pipelines mais complexos e customizados, leia também sobre como implementar CI/CD com GitHub Actions e Docker.


Perguntas Frequentes (FAQ)

As Netlify Functions usam AWS Lambda por baixo dos panos?

Sim. O Netlify abstrai toda a complexidade de configuração, provisionamento, roteamento e segurança do AWS Lambda, permitindo que você publique funções serverless apenas salvando arquivos em pastas específicas do seu repositório.

Posso conectar uma Netlify Function a um banco de dados?

Sim, é possível conectar a bancos de dados relacionais (PostgreSQL, MySQL) ou NoSQL (MongoDB, FaunaDB). No entanto, por ser uma arquitetura serverless onde as funções abrem e fecham conexões rapidamente, é altamente recomendável utilizar pools de conexão HTTP, proxies de banco de dados ou serviços como Prisma Accelerate para evitar o esgotamento de conexões abertas no banco.

Como gerenciar variáveis de ambiente de forma segura?

As variáveis de ambiente (como chaves de API e credenciais de banco) devem ser configuradas diretamente no painel do Netlify (Site settings > Environment variables) e nunca expostas no código do frontend ou versionadas no Git. Localmente, você pode testá-las criando um arquivo .env na raiz do projeto e executando o comando netlify dev.


Referências e Fontes

Marcos Costa

Sobre Marcos Costa

Desenvolvedor backend com foco em arquitetura de software, automação e produtos digitais.

Ver mais artigos