Webhooks e WebSockets são duas tecnologias de desenvolvimento web que as pessoas costumam confundir. Muitos aplicativos da Web modernos usam Webhooks e WebSockets. Embora bastante diferentes, Webhooks e WebSockets tratam da comunicação em aplicativos da web.

Então, o que são Webhooks e WebSockets? Quais são as coisas que os tornam diferentes?

O que são Webhooks e como eles funcionam?

Você pode pensar em um Webhook como uma “solicitação HTTP acionada por evento”. O que isto significa? Um Webhook é uma ação de retorno de chamada HTTP geralmente acionada por um evento em um servidor. Isso não é tudo, geralmente envia dados por meio de uma URL pré-configurada para outro servidor. Isso dá origem à ideia dos Webhooks serem um meio de comunicação “servidor para servidor”.

Para entender melhor o mecanismo de funcionamento dos Webhooks, considere um aplicativo da web que usa a API do Stripe para receber pagamentos. Sempre que um cliente faz um pagamento, o Stripe recebe o dinheiro, mas seu aplicativo não faz ideia. É aqui que entram os Webhooks. Considere a imagem abaixo:

instagram viewer

O Stripe exige que você forneça um URL de ponto de extremidade do Webhook para enviar os dados de pagamento do cliente ao seu servidor quando um novo evento de pagamento for acionado. Seu servidor então recebe os dados, executa operações neles e salva os dados persistentes no banco de dados.

O que são WebSockets e como eles funcionam?

WebSocket é um protocolo que você normalmente usa com JavaScript. Ele estabelece um canal de comunicação bidirecional, persistente e bidirecional. Faz isso em um único conexão feita entre duas portas TCP de um cliente (navegador) para um servidor. O aplicativo mais popular do WebSockets está em aplicativos de bate-papo como o WhatsApp.

Enquanto os Webhooks são baseados em HTTP (ou seja, fazem uso do protocolo HTTP), o WebSocket é um protocolo inteiro por conta própria baseado em TCP, assim como HTTP. Os WebSockets podem ser muito benéficos ao trabalhar em aplicativos de streaming de dados de servidor-cliente de baixa latência.

Você pode obter baixa latência com uma conexão WebSocket porque ela permanece aberta entre as transações, ao contrário do HTTP padrão. Isso permite que os dados fluam perfeitamente entre ambas as partes.

Antes do WebSockets, os desenvolvedores usavam vários métodos para obter dados em tempo real por HTTP. Apesar de já existirem há algum tempo, eles sofrem de limitações.

Por exemplo, a sondagem longa exige que o cliente sempre envie uma nova solicitação ao servidor em um intervalo de tempo especificado. Isso significa que quando há novos dados no servidor, ele os retorna. Mas se não houver, o pedido é efetivamente desperdiçado.

Ao contrário dos Webhooks, qualquer extremidade de uma conexão WebSocket pode enviar dados para a outra. Essa é uma das razões pelas quais os WebSockets oferecem uma enorme vantagem de velocidade, especialmente quando os dados estão sendo enviados do servidor para o cliente. Os aplicativos que usam WebSockets devem se beneficiar da baixa latência ao buscar dados do servidor.

Você também pode usar WebSockets sobre TLS, assim como HTTP. Isso protege os dados que você transmite, ajudando a mitigar ataques man-in-the-middle. Mesmo uma conexão persistente permanecerá segura com essa abordagem. Você não terá que se preocupar com invasores roubando dados ou comunicação corrompendo-os.

Quando você deve usar Webhooks?

Webhooks e WebSockets visam implementar melhores meios de comunicação em tempo real pela web. No entanto, eles fazem isso de maneiras totalmente diferentes. Muitas vezes, pode ser um desafio decidir qual dessas duas tecnologias você deve usar em seu aplicativo. Você deve prestar muita atenção aos seus pontos fortes e fracos para ver qual atende melhor às suas necessidades.

Então, quando você deve escolher Webhooks em vez de WebSockets?

  • Ao consumir uma API que você não possui. Considere o exemplo do Stripe da ilustração anterior do Webhook. O Stripe é um provedor de serviços de pagamento e seu aplicativo só pode ser construído com base em sua API. Você não tem controle sobre o Stripe, portanto, não pode criar um servidor WebSocket no final. Em casos como este, você deve usar Webhooks.
  • Se seu aplicativo for um servidor que precisa se comunicar com outro servidor, é melhor usar Webhooks. Este é o sistema ideal de comunicação “servidor a servidor”.
  • Os webhooks não são bidirecionais ou persistentes. Você só deve usar Webhooks quando seu aplicativo não estiver esperando dados de resposta no mesmo canal.
  • Também é digno de nota que os Webhooks são o caminho ideal para operações de servidor executadas como funções sem servidor. Os exemplos incluem funções de nuvem AWS Lambda e Google.

Você pode experimentar Webhooks em webhook.site. Este site permite que você veja como serão os dados que um Webhook envia para seu aplicativo. É muito útil entender a natureza da comunicação de um Webhook antes de tentar implementar um endpoint em seu aplicativo.

Quando você deve usar WebSockets?

Aplicativos em tempo real, sistemas de notificação e sistemas de compartilhamento de dados ao vivo são alguns aplicativos comuns de WebSockets. Lembrando que com WebSockets o canal de conexão tem que estar sempre aberto, este protocolo só deve ser utilizado quando o custo valer a pena.

  • Você deve usar WebSockets quando seu aplicativo troca dados continuamente entre o cliente e o servidor. Por exemplo, em um aplicativo de compartilhamento de localização ao vivo, a localização de um usuário é atualizada continuamente no servidor e no cliente à medida que eles se movem. WebSockets tornam isso possível.
  • Em aplicativos de comunicação multimídia como o WhatsApp, o WebSocket é o protocolo de comunicação ideal. Ele permite uma troca de dados bidirecional muito rápida, o que é fundamental para esses tipos de aplicativos.
  • Você também deve usar WebSockets em aplicativos que implementam feeds em tempo real, como Livescore. Este site compartilha atualizações de jogos de futebol ao vivo à medida que acontecem em tempo real. Mas faz isso sem precisar fazer novas solicitações ou exigir que você atualize seu navegador.
  • Outros casos em que você deve usar WebSockets incluem aplicativos de streaming de vídeo/áudio ao vivo, sistemas de notificação ao vivo e jogos multijogador em tempo real. Eles também são úteis em aplicativos de edição colaborativa como Google Docs, Notion, etc.

Webhooks e WebSockets são diferentes

É claro que, embora Webhooks e WebSockets resolvam problemas semelhantes, eles não são os mesmos e cada um tem seus próprios casos de uso particulares. Webhooks são retornos de chamada unidirecionais acionados por eventos com base no protocolo HTTP. A tecnologia WebSocket é um protocolo autônomo, que permite a troca bidirecional de dados sem requisições.

É importante sempre identificar sua necessidade ao construir um aplicativo para evitar o desperdício de recursos. Em alguns casos, você deve preferir Webhooks porque WebSockets às vezes pode ter um custo proibitivo. Certifique-se de usá-los apenas quando necessário.