As APIs são a solução standard na integração de aplicações. Por isso, talvez menos se fale do webhook. Mas esse é um mecanismo poderoso para a construção de integrações baseadas em eventos.
Sendo bem menos popular quando se trata de integrações, neste artigo, vamos dar uma olhada no conceito desse recurso, suas diferenças em relação às APIs, quando preferi-los e quais as vantagens dele.
Webhook: o que é?
Criado em 2007, por Jeff Lindsay, o webhook é uma das formas pelas quais aplicações podem se comunicar automaticamente.
Webhook é definido pelo seu criador como um padrão arquitetural para desenvolvedores proverem chamadas HTTP definidas pelo usuário nas aplicações.
Isso permite a criação de um ecossistema baseado em eventos. Se um evento acontece na aplicação B, por meio do webhook, ela avisa para a aplicação A que ela deve chamá-la.
Essa é a forma que o Shopify usa para atualizar o estoque depois que uma transação foi confirmada, que o PayPal usa para avisar um setor de vendas que o pagamento de um cliente foi aprovado, que o Zendesk usa para enviar alertas no Teams de seus clientes no caso de chamados urgentes etc.
Isso nos leva às funções do webhook:
- Pushes: envolve todo o universo de notificações em tempo real em aplicações web.
- Pipes: envolve a integração de aplicações web. Nesse caso, quando um evento acontece em uma aplicação, os dados são separados, transformados e enviados para a outra aplicação por meio de uma web API.
- Plugins: envolve a criação de extensões ou a modificação de aplicações web pelos usuários. Isso significa que os usuários de uma aplicação não estão limitados pelo que os desenvolvedores tornam extensível.
Diferença entre webhook e API
Quando as APIs começaram a ficar populares, os desenvolvedores ganharam um trunfo e tanto. Eles podiam optar por não desenvolver sempre do zero todos os recursos das aplicações, para usar aplicações existentes conectadas por APIs.
No entanto, claro que isso trouxe limitações, porque as aplicações existentes não acionavam as aplicações criadas.
Os webhooks vêm para resolver esse problema. Eles permitem que aplicações que só respondem a um poll no universo das APIs também chamem de volta sem precisar serem solicitadas. Essa é a grande diferença entre webhook e API.
Enquanto nas APIs a comunicação é request-driven, no webkook ela é event-driven. Pingou um dado, o webhook dispara a integração.
No mundo das aranhas, no universo do polling elas ficariam rodando a teia de tempos em tempos a fim de checar a captura de um novo inseto. No universo dos webhooks elas ficam paradas esperando a notificação da captura de um inseto, por meio da vibração da teia.
No mundo dos softwares, se você tem uma aplicação para coletar e processar todas as compras ligadas às contas de usuários de seu sistema de e-commerce, em vez de continuamente chamar o e-commerce para saber se alguma compra aconteceu, o webhook permite que você automaticamente receba essas compras, assim que foram feitas, na aplicação em que vai processá-las.
Isso leva a mais uma diferença: webhooks são acionados em quase tempo real, e não em um polling.
Outra diferença, webhooks são mais simples. Uma API requer que a aplicação faça um request de dados para uma aplicação fonte, enquanto um webhook é uma espécie de notificação que a aplicação fonte envia sobre a ocorrência de um evento.
Por isso, webhooks são fundamentais em uma estratégia de APIs.
Quando usar webhooks
Já dá para ter ideias de casos em que usar webhooks pode ser uma boa opção. Vejamos com mais detalhes abaixo:
1. Quando você não tem um padrão de mudança nos dados
Por meio de uma API, a obtenção de dados é feita por meio de chamadas HTTP GET regulares, ou seja, por meio de polling. Quando você sabe que os dados mudam constantemente, não importa quando uma requisição é feita, sempre tem algo novo armazenado ali. Então a API trabalha bem.
No universo do polling, você tem controle total do fluxo, fazendo ele rodar na cadência que preferir. Isso é fundamental quando há um volume grande de dados. Se você não fizer uma paginação da transferência, isso pode afetar a performance.
Se você tem dados que mudam rapidamente, como os de um sensor em um cenário de integração de IoT, você sabe que sempre haverá novos dados esperando por sua requisição. Então, precisa rodar a integração de tempos em tempos.
Só que nem sempre é assim. Há cenários em que nem sempre que você chamar uma API haverá dados prontos do outro lado. Ou então cenários que o número de chamadas a uma API é limitado no tempo, e você não pode perdê-las com chamadas vazias. Nesses casos, é melhor usar webhook.
2. Atualizações em tempo (quase) real
Cenários de integração que exigem atualizações em tempo real ou tempo quase real são a aplicação mais imediata dos webhooks e onde eles são capazes de gerar muito valor.
É o caso de operações simultâneas em série: um estoque que precisa ser atualizado, um e-mail que precisa ser disparado, uma nota que precisa ser emitida, tudo isso assim que uma compra for realizada em um e-commerce. É também o caso de dados duplicados em vários sistemas, que por meio de webhook podem ser atualizados simultaneamente em todos eles.
Até é possível ter dados em tempo quase real com APIs, mas isso vai envolver a configuração de passos extras, além do consumo de mais recursos. O webhook é pensado para simplificar esses casos.
3. Quando a aplicação não oferece API
Nesse caso, o webhook pode ser uma alternativa quando a API é ruim ou não há API disponível.
Integrações com webhook: como funciona
Implementar webhooks em integrações é simples: requer a configuração de uma requisição HTTP POST do lado da aplicação fonte dos dados. Esse POST vai entregar os dados a uma URL que aponta para um endpoint de API específico no sistema que vai receber os dados.
Desafios com webhooks
Dois desafios costumam surgir para quem usa webhook: um quanto à segurança, outro quanto à confiabilidade.
Com relação à segurança, o ponto é que uma vez que um endpoint foi configurado para receber dados oriundos de webhook, ele vai receber. Portanto, é crítico verificar se esses dados são mesmo de uma fonte esperada.
Há vários métodos para garantir isso, dentre os quais token, chaves de API e outros, mas o tópico segurança de webhooks merece bastante atenção de quem os usa.
Quanto à confiabilidade, os webhooks não são 100% confiáveis. Por exemplo: se um endpoint está temporariamente offline, o que acontece com os dados que não foram recebidos? Não há mecanismo para reenvio de dados. Também não há no caso de o sistema origem dos dados estar offline e não mandar updates para outros sistemas.
Há bem menos controle sobre o fluxo de dados, sem a presença de mecanismos para isso, como paginação de dados. Por isso, webhooks não podem ser o único método de entrega de dados de aplicações. Normalmente eles são acompanhados de uma estratégia de reconcialiação, ou seja, por um processo tradicional de requisição de dados. E então pode ser por meio de APIs, filas de mensagens e outros.
Webhooks com APIs: jogando junto
Webhooks são event-driven. Isso os torna um recurso poderoso para quem precisa lidar com sincronizações de aplicações em tempo real, para quem não tem uma cadência de atualizações em dados constante e até em casos em que não há API.
Porém, dados os desafios, melhor que não seja o único recurso de integração. Ao lado de APIs, ele será o complemento perfeito.