DEV Community

Lucas Pereira de Souza
Lucas Pereira de Souza

Posted on

O Que São Webhooks e Como Utilizá-los Eficientemente

Image description

Webhooks são uma ferramenta poderosa para integrar diferentes sistemas e enviar notificações em tempo real. Eles permitem que uma aplicação notifique outra automaticamente quando um evento ocorre, sem a necessidade de requisições constantes para verificar se há algo novo, como acontece em uma API tradicional. Neste post, vamos entender como funcionam, como configurá-los e exploraremos um exemplo prático utilizando a ferramenta Webhook.site, que facilita o desenvolvimento e teste de webhooks.


O Que São Webhooks?

Em termos simples, um webhook é um mecanismo que permite que um serviço envie uma requisição HTTP para uma URL específica sempre que um evento ocorre. Ao invés de precisar consultar um servidor repetidamente para verificar se houve mudanças (como acontece ao usar uma API), o webhook notifica sua aplicação assim que o evento ocorre. Isso economiza tempo e recursos, tornando as interações entre sistemas mais eficientes.

Um exemplo clássico de uso de webhooks é em serviços de pagamento: quando uma transação é concluída, o sistema envia um webhook para sua aplicação informando o status do pagamento. A partir daí, sua aplicação pode processar essa informação, como atualizar o status de um pedido, enviar um recibo por e-mail, entre outras ações.


Como Funcionam os Webhooks?

  1. Configuração do Webhook: Você registra uma URL para receber as notificações. Essa URL será chamada toda vez que um evento relevante acontecer no serviço que envia o webhook.

  2. Evento Ocorrendo: Quando o evento configurado (como uma transação, atualização de dados ou criação de um registro) ocorre, o serviço dispara uma requisição HTTP para a URL registrada.

  3. Processamento do Webhook: Sua aplicação recebe essa requisição e processa as informações. Por exemplo, você pode atualizar dados no banco de dados, enviar uma resposta para o usuário ou realizar qualquer outra tarefa necessária.

  4. Resposta à Requisição: Após processar o webhook, sua aplicação deve responder com um código de status HTTP (como 200 OK) para informar que a requisição foi recebida e processada corretamente.


Exemplo Prático com Webhook.site

Antes de configurar webhooks em uma aplicação real, é uma boa prática testá-los localmente ou em um ambiente de desenvolvimento. Uma excelente ferramenta para isso é o Webhook.site. Ele fornece uma URL temporária onde você pode enviar webhooks para visualizá-los e depurá-los, permitindo que você veja exatamente como os dados são recebidos.

Vamos usar o Webhook.site para testar a recepção de um webhook.

  1. Acessando o Webhook.site:

    • Vá até Webhook.site.
    • O site automaticamente gera uma URL exclusiva para você (algo como https://webhook.site/unique-url). Essa será a URL que usaremos para receber as notificações.
  2. Configurando o Envio do Webhook:

    • Imagine que você tem um sistema que dispara webhooks. Configure esse sistema para enviar requisições para a URL fornecida pelo Webhook.site.
    • Caso você queira testar localmente, pode simular o envio de webhooks usando ferramentas como cURL ou Postman, enviando requisições para a URL gerada.

Agora, vamos implementar um código Node.js que simula o envio de um webhook para essa URL.


Exemplo de Implementação de Webhook em Node.js

Aqui está um exemplo de como configurar um endpoint para receber webhooks e de como enviar um webhook usando o axios (ou qualquer outra biblioteca de HTTP):

const express = require('express');
const axios = require('axios');
const app = express();

// Middleware para processar o body das requisições como JSON
app.use(express.json());

// Endpoint que recebe os webhooks
app.post('/webhook-receiver', (req, res) => {
  const event = req.body;

  // Processar o evento (aqui você adiciona a lógica que desejar)
  console.log('Webhook recebido:', event);

  // Retornar um status de sucesso para o serviço que enviou o webhook
  res.status(200).send('Evento processado com sucesso');
});

// Simulando o envio de um webhook para o Webhook.site
const webhookURL = 'https://webhook.site/unique-url';  // Substitua pela sua URL do Webhook.site

const sendWebhook = async () => {
  try {
    const payload = {
      event: 'payment_completed',
      data: {
        orderId: '12345',
        amount: 100.0,
        currency: 'USD'
      }
    };

    const response = await axios.post(webhookURL, payload);
    console.log('Webhook enviado com sucesso:', response.status);
  } catch (error) {
    console.error('Erro ao enviar webhook:', error);
  }
};

app.listen(3000, () => {
  console.log('Servidor rodando na porta 3000');

  // Enviar o webhook após o servidor iniciar
  sendWebhook();
});
Enter fullscreen mode Exit fullscreen mode

Neste exemplo:

  • Criamos um endpoint /webhook-receiver que simula a recepção de um webhook.
  • Usamos o axios para simular o envio de um webhook para o Webhook.site, passando um payload com dados de um pagamento fictício.
  • O Webhook.site recebe a notificação e exibe o conteúdo da requisição no painel.

Boas Práticas de Segurança em Webhooks

Como os webhooks envolvem o envio de dados diretamente para uma URL, é essencial tomar algumas precauções de segurança:

  1. Validação da Origem: Verifique se a requisição está realmente vindo do serviço esperado. Muitos serviços oferecem uma assinatura criptográfica (por exemplo, usando HMAC) que você pode usar para validar a autenticidade da requisição.

  2. Utilize HTTPS: Sempre configure seus endpoints de webhook para utilizar HTTPS, garantindo que as comunicações entre o serviço e sua aplicação estejam criptografadas.

  3. Autenticação: Além de HTTPS, algumas aplicações exigem que as requisições de webhook incluam um token ou chave de autenticação como uma camada extra de segurança.

  4. Rate Limiting: Implemente limites para o número de requisições que seu servidor pode processar em um determinado período, prevenindo que sua aplicação seja sobrecarregada com muitas requisições em um curto espaço de tempo.


Webhooks vs. APIs

Muitas vezes, as pessoas confundem webhooks com APIs. Aqui está a principal diferença:

  • APIs: São ativas. Sua aplicação faz uma requisição para um servidor e recebe dados em resposta. Você precisa "buscar" a informação.
  • Webhooks: São passivos. O servidor envia a informação automaticamente para sua aplicação quando um evento ocorre. Você "recebe" a informação sem precisar perguntar.

Webhooks são especialmente úteis em cenários onde você precisa de notificações em tempo real, como em sistemas de pagamentos, notificações de eventos e integrações entre diferentes serviços.


Conclusão

Webhooks são uma maneira simples e eficiente de permitir que diferentes sistemas se comuniquem automaticamente em tempo real. Usando ferramentas como o Webhook.site, você pode testar e depurar seus webhooks antes de integrá-los em produção. Além disso, seguir boas práticas de segurança garante que seus endpoints estejam protegidos contra acessos indesejados.

Se você está desenvolvendo uma aplicação moderna e precisa integrar diferentes serviços, os webhooks são uma solução excelente para automatizar a comunicação entre eles.


Se tiver alguma dúvida ou experiência interessante com webhooks, compartilhe nos comentários!

Top comments (0)