DEV Community

Roberson Miguel
Roberson Miguel

Posted on

O que é um webhook?

Um webhook é uma forma de comunicação em que um servidor envia solicitações HTTP para um cliente em resposta a eventos ou atualizações ocorridas no servidor. É uma maneira eficiente de receber informações em tempo real, eliminando a necessidade de consultas repetidas (polling).

Suponha que voce tenha um site de comércio eletrônico. Os clientes enviam pedidos por meio da API gateway, que encaminha as transações de pagamento para o serviço de pagamento. O serviço de pagamento, por sua vez, se comunica com um provedor de serviços de pagamento externo (PSP) para concluir as transações.

Existem duas maneiras de lidar com a essa comunicação:

🔹 1. Polling

Após enviar a solicitação de pagamento, o serviço de continua perguntando sobre o status da transação. Após várias tentativas, o serviço finalmente retorna o status.

O polling possui duas desvantagens:

  • O polling constante do status requer recursos do serviço.
  • A comunicação direta com o serviço de pagamento, cria vulnerabilidades de segurança.

🔹 2. Webhook

Podemos registrar um webhook no serviço. Isso significa: me avise quando uma determinada URL houver atualizações na solicitação. Quando o serviço concluir o processamento, ele invocará a solicitação HTTP para atualizar o status da transação.

Dessa forma, o paradigma de programação é alterado e o serviço não precisa mais desperdiçar recursos para consultar o status do pagamento.

*E se o serviço nunca retornar a chamada? *

Podemos configurar um job de limpeza para verificar o status do pagamento a cada hora.

Os webhooks são frequentemente chamados de APIs reversas ou APIs de push, pois o servidor envia solicitações HTTP para o cliente. Precisamos prestar atenção a três coisas ao usar um webhook:

1 - Projetar uma API adequada para o serviço chamar.

2 - Configurar regras adequadas na API gateway por motivos de segurança.

3 - Registrar a URL correta no serviço.

Fonte: O que são Webhooks

Boas Praticas de uso de Webhook

Top comments (0)