DEV Community

Cover image for Webhook vs API: Qual a Verdadeira Diferença?
Lucas
Lucas

Posted on • Originally published at apidog.com

Webhook vs API: Qual a Verdadeira Diferença?

“Webhook vs API” é uma pergunta sobre direção de comunicação. Em uma API REST comum, seu sistema chama o provedor quando precisa de dados ou quer executar uma ação. Em um webhook, o provedor chama o seu endpoint quando um evento acontece. Ou seja: webhook não é o oposto de API; é uma API usada no sentido inverso.

Experimente o Apidog hoje

Este guia mostra como diferenciar os dois modelos, quando usar cada um e como implementar um receptor de webhook com segurança. Se você constrói ou testa integrações, o Apidog permite projetar, simular e testar endpoints REST e receptores de webhook no mesmo fluxo.

A resposta curta

  • API regular: você envia uma requisição HTTP e recebe uma resposta. Você controla quando a chamada acontece.
  • Webhook: o provedor envia uma requisição HTTP para o seu servidor quando um evento ocorre. O provedor controla quando a chamada acontece.
  • Ambos usam HTTP e normalmente trafegam JSON.
  • A comparação correta não é “webhook vs API”, mas pull vs push.

Exemplo:

API REST:
Seu app ---> GET /orders/123 ---> Provedor
Seu app <--- JSON de resposta <--- Provedor

Webhook:
Seu app <--- POST /webhooks/payment <--- Provedor
Enter fullscreen mode Exit fullscreen mode

O que as pessoas querem dizer com “API”

Quando alguém diz “chamar a API”, geralmente está falando de uma API REST no modelo requisição-resposta.

Exemplo:

GET /orders/123 HTTP/1.1
Host: api.exemplo.com
Authorization: Bearer token
Enter fullscreen mode Exit fullscreen mode

Resposta:

{
  "id": "123",
  "status": "paid",
  "total": 4990
}
Enter fullscreen mode Exit fullscreen mode

Esse é o modelo pull: seu sistema busca os dados quando precisa deles.

Use esse modelo quando você quer:

  • carregar dados sob demanda;
  • executar uma ação iniciada pelo seu sistema;
  • consultar o estado atual de um recurso;
  • controlar exatamente quando a requisição acontece.

A desvantagem aparece quando você precisa detectar mudanças. Para saber se algo mudou, seu sistema precisa chamar a API repetidamente. Se quiser revisar como uma requisição HTTP é estruturada, veja compreendendo a estrutura de requisição de API.

O que é um webhook

Um webhook é um callback HTTP configurado por você.

Você registra uma URL no provedor, por exemplo:

https://sua-api.com/webhooks/stripe
Enter fullscreen mode Exit fullscreen mode

Quando um evento acontece, o provedor envia um POST para essa URL.

Exemplo de payload:

{
  "event": "payment.succeeded",
  "id": "evt_123",
  "data": {
    "payment_id": "pay_456",
    "amount": 4990,
    "currency": "BRL"
  }
}
Enter fullscreen mode Exit fullscreen mode

Nesse modelo, seu servidor não pergunta. Ele apenas recebe a notificação. Esse é o modelo push.

Webhooks são usados, por exemplo, quando:

  • o Stripe informa que um pagamento foi aprovado;
  • o GitHub informa que houve um push no repositório;
  • o Slack informa que alguém executou um comando no seu app.

Para entender melhor o lado receptor, veja o que é uma API de webhooks.

Webhook vs API: diferença principal

API Regular REST Webhook
Quem inicia a troca Você, como cliente O provedor
Modelo Requisição-resposta Evento
Fluxo Pull Push
Momento da chamada Quando seu código decide chamar Quando o evento acontece
Direção Seu sistema chama o provedor O provedor chama seu sistema
Melhor uso Dados sob demanda e ações iniciadas por você Reação automática a eventos externos
Custo operacional Polling pode gerar chamadas desnecessárias Você precisa expor e proteger um endpoint público

A diferença mais importante é quem inicia a chamada. Todo o resto deriva disso.

“Um webhook não é apenas uma API?”

Sim, mas com uma direção específica.

Um webhook usa os mesmos elementos básicos de uma API:

  • HTTP;
  • URL;
  • headers;
  • método POST;
  • corpo JSON;
  • códigos de status HTTP.

A diferença é que, no webhook, o provedor atua como cliente e seu endpoint atua como servidor.

Por isso, um webhook pode ser descrito como uma “API reversa” ou uma “API de push”.

O OpenAPI 3.1 inclui um campo webhooks para documentar esse tipo de contrato. O Apidog também pode trabalhar com esse modelo; veja callbacks e webhooks do OpenAPI.

Formulação prática:

Webhook é um padrão de comunicação de API orientado a eventos, não uma tecnologia separada.

Quando usar uma API regular

Use uma chamada de API REST quando você precisa iniciar a operação.

Casos comuns:

  • buscar dados para renderizar uma tela;
  • criar um pagamento;
  • atualizar um usuário;
  • enviar uma mensagem;
  • gerar um relatório;
  • consultar o estado atual de um pedido.

Exemplo em JavaScript:

const response = await fetch("https://api.exemplo.com/orders/123", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.API_TOKEN}`,
    "Content-Type": "application/json"
  }
});

const order = await response.json();

console.log(order.status);
Enter fullscreen mode Exit fullscreen mode

Esse modelo é ideal quando o seu sistema decide quando a informação é necessária.

Quando usar um webhook

Use webhook quando você precisa reagir a algo que acontece fora do seu controle.

Casos comuns:

  • pagamento aprovado;
  • pagamento recusado;
  • build finalizado;
  • upload processado;
  • pull request aberto;
  • mensagem recebida;
  • assinatura cancelada.

Exemplo de endpoint com Node.js e Express:

import express from "express";

const app = express();

app.use(express.json());

app.post("/webhooks/payment", async (req, res) => {
  const event = req.body;

  if (event.event === "payment.succeeded") {
    const payment = event.data;

    // Atualize seu banco, libere acesso, envie e-mail etc.
    console.log("Pagamento aprovado:", payment.payment_id);
  }

  res.status(200).send("ok");
});

app.listen(3000, () => {
  console.log("Webhook receiver rodando na porta 3000");
});
Enter fullscreen mode Exit fullscreen mode

Ponto importante: responda rápido. O webhook deve confirmar recebimento e delegar processamento pesado para uma fila ou worker quando necessário.

Webhook vs polling

Se a alternativa ao webhook for verificar a API a cada poucos segundos, você está comparando webhook com polling.

Polling:

setInterval(async () => {
  const response = await fetch("https://api.exemplo.com/orders/123");
  const order = await response.json();

  if (order.status === "paid") {
    console.log("Pedido pago");
  }
}, 5000);
Enter fullscreen mode Exit fullscreen mode

Esse padrão funciona, mas pode desperdiçar recursos:

  • muitas chamadas retornam o mesmo estado;
  • você pode demorar até o próximo intervalo para detectar mudanças;
  • o provedor pode aplicar rate limits;
  • seu sistema processa requisições desnecessárias.

Webhook evita isso porque o provedor envia o evento quando ele acontece.

Para uma comparação específica, veja webhooks vs polling.

APIs e webhooks normalmente trabalham juntos

Em integrações reais, você raramente escolhe apenas um.

Exemplo com pagamento:

  1. Seu app chama a API do provedor para criar uma cobrança.
  2. O provedor processa o pagamento de forma assíncrona.
  3. O provedor chama seu webhook quando o pagamento é aprovado ou falha.
  4. Seu sistema atualiza o pedido internamente.

Fluxo:

1. Seu app ---> POST /payments ---> Provedor
2. Provedor processa o pagamento
3. Seu app <--- POST /webhooks/payment <--- Provedor
4. Seu app atualiza o pedido
Enter fullscreen mode Exit fullscreen mode

A API inicia a ação. O webhook informa o resultado.

Esse padrão é comum em sistemas orientados a eventos. Para o design mais amplo, veja como construir APIs orientadas a eventos.

Webhooks vs WebSockets vs polling

Esses termos costumam aparecer juntos, mas resolvem problemas diferentes.

  • Webhook vs polling: polling pergunta repetidamente; webhook recebe uma notificação quando o evento acontece.
  • Webhook vs WebSocket: webhook é um POST HTTP por evento; WebSocket é uma conexão persistente e bidirecional para comunicação contínua.
  • Webhook vs API: a diferença principal é a direção da chamada.

Leia também webhook vs WebSocket.

Como implementar um receptor de webhook

Um receptor de webhook precisa fazer mais do que aceitar um POST.

Checklist mínimo:

  1. Criar um endpoint público.
  2. Validar o método HTTP.
  3. Verificar assinatura ou segredo do provedor.
  4. Validar o payload.
  5. Garantir idempotência.
  6. Responder rapidamente com 2xx.
  7. Registrar logs para depuração.
  8. Reprocessar eventos quando necessário.

Exemplo simplificado:

app.post("/webhooks/provider", async (req, res) => {
  const event = req.body;

  if (!event.id || !event.type) {
    return res.status(400).json({ error: "Payload inválido" });
  }

  const alreadyProcessed = await wasEventProcessed(event.id);

  if (alreadyProcessed) {
    return res.status(200).json({ received: true });
  }

  await enqueueWebhookJob(event);

  await markEventAsReceived(event.id);

  return res.status(200).json({ received: true });
});
Enter fullscreen mode Exit fullscreen mode

A regra prática é: receba, valide, persista ou enfileire, responda.

Como proteger webhooks

Um webhook expõe um endpoint público. Portanto, você não deve confiar em qualquer requisição recebida.

Medidas comuns:

  • validar assinatura enviada pelo provedor;
  • usar timestamp para evitar replay attacks;
  • rejeitar payloads inválidos;
  • limitar tamanho do corpo da requisição;
  • registrar o event_id para evitar processamento duplicado;
  • usar HTTPS;
  • aplicar rate limiting quando fizer sentido.

Exemplo conceitual de verificação com HMAC:

import crypto from "crypto";

function verifySignature(rawBody, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}
Enter fullscreen mode Exit fullscreen mode

Cada provedor tem seu próprio formato de assinatura. Siga a documentação oficial do serviço que envia o webhook.

Veja também verificação de assinatura de webhook.

Como projetar e testar ambos com Apidog

Webhooks podem ser mais difíceis de testar do que APIs REST porque dependem de eventos externos. Você precisa receber um POST real antes de confiar no handler.

Com o Apidog, você pode trabalhar nos dois lados:

  • projetar endpoints REST;
  • testar chamadas requisição-resposta;
  • criar payloads de teste para webhooks;
  • enviar POST para seu receptor;
  • validar respostas e contratos;
  • documentar webhooks junto com endpoints REST usando OpenAPI.

Um fluxo prático:

  1. Defina o contrato do webhook: URL, headers e payload.
  2. Crie um exemplo de evento realista.
  3. Envie um POST para seu endpoint local ou ambiente de teste.
  4. Verifique se o handler valida, persiste e responde corretamente.
  5. Documente o contrato para consumidores e mantenedores.

Como design, simulação, teste e documentação ficam no mesmo workspace, você pode tratar o receptor de webhook como qualquer outro contrato de API.

Baixe o Apidog para construir e testar APIs e webhooks em um só lugar.

FAQ

Um webhook é uma API?

Sim, no sentido de que usa HTTP, URL, headers e payload como qualquer chamada de API. A diferença é a direção: o provedor chama o seu endpoint.

Posso usar webhook sem API?

Em alguns casos, sim, mas é raro em integrações completas. Normalmente você chama a API do provedor para iniciar algo e recebe o resultado via webhook. Veja o que é uma API de webhooks.

Webhooks são mais rápidos que APIs?

Para reagir a eventos, geralmente sim, porque você recebe a notificação quando o evento acontece. Para buscar dados sob demanda, uma chamada direta à API continua sendo o modelo correto.

Webhooks substituem APIs REST?

Não. Eles resolvem problemas diferentes. APIs REST são boas para requisições sob demanda e ações iniciadas pelo cliente. Webhooks são bons para notificações de eventos.

Um webhook é seguro?

Pode ser, desde que você valide a origem da requisição. O padrão mais comum é verificar uma assinatura enviada pelo provedor. Veja verificação de assinatura de webhook.

Conclusão

“Webhook vs API” não é uma escolha entre tecnologias opostas. É uma escolha entre modelos de comunicação.

Use API REST quando seu sistema controla o momento da chamada. Use webhook quando o provedor controla o momento do evento.

Na prática, integrações robustas usam os dois: APIs para iniciar ações e webhooks para receber resultados assíncronos.

Quando estiver pronto para projetar e testar ambos, use o Apidog para documentar, simular e validar seus endpoints e receptores de webhook no mesmo lugar.

Top comments (0)