Aprendizados da semana (13 a 19)
O que é um webhook?
O termo é uma combinação de ‘web’ (referente à comunicação baseada em HTTP) e ‘hook’ (uma função usada para interceptar eventos relevantes).
Foi em 2007 que o programador Jeff Lindsay (mais conhecido como progrium) criou e ajudou a disseminar o conceito por meio do post “Web hooks to revolutionize the web”.
O problema que o webhook resolve
Imagine um e-commerce que utiliza um serviço de pagamento de terceiros, como a AbacatePay. Ele precisa saber quando o processamento do pagamento foi finalizado para que de um feedback ao usuário, dispare um e-mail de ‘compra bem sucedida’ ou algo nesse sentido.
Como você faria isso? Como projetaria a sua API para obter os dados após o processamento da operação em um sistema de terceiros?
Uma possível solução é fazer requisições de tempo em tempo para ver se foi finalizada a operação, processo esse que se chama polling. Porém acaba gerando custos como um alto tráfego de rede e processamento desnecessário.
E para resolver isso, o webhook entra em cena. Ele atua com uma arquitetura baseada em eventos, então voltando ao exemplo do e-commerce: quando a operação é finalizada (evento) o webhook dispara uma espécie de função de callback que vai enviar um request HTTP POST para o endpoint que foi definido na integração.
Dessa forma, há economia de várias requisições que teriam o status ‘processando’ para uma única requisição com o status final (aprovado ou rejeitado).
Confira essas prints retiradas do artigo da Alura que exemplificam melhor o que o webhook faz e como ele funciona.


Vantagens e desvantagens
🟢 eliminação de consultas frequentes entre APIs (consequentemente, redução tráfego de rede e processamento)
🟢 facilidade de integração em algumas plataformas (Mercado Pago, Github, Discord…)
🔴 necessidade de medidas de segurança robustas entre os sistema para garantir a confiabilidade da conexão e dos dados
🔴 complexidade para lidar com erros e bugs gerados durante a callback do webhook, sendo necessário dispor de recursos para monitorar a detecção de falhas.
Exemplos no seu dia a dia
Ao executar um git push, você envia o seu código para o GitHub. Esse evento pode disparar um webhook para avisar o Discord de que há novidades ou, internamente, acionar o GitHub Actions para executar o seu pipeline de Continuous Integration e/ou Continuous Deployment (CI/CD).
Se sua aplicação em produção sofrer um erro grave, o Sentry aciona um webhook do Jira, que recebe o detalhes do erro (stack trace) e cria um card com esses detalhes.
Se você quiser configurar um canal do discord para que toda vez que ao dar um git push e o pipeline quebrar, você seja notificado, é possível também fazer essa configuração (inclusive, na referência do artigo da Alura, eles ensinam como fazer algo nesse sentido, de uma conferida depois.)