DEV Community

Cover image for WebHook x WebSocket : O que são?
Matheus Patricio
Matheus Patricio

Posted on

WebHook x WebSocket : O que são?

A importância das integrações

Como desenvolvedor, nos deparamos com diversos tipo de integrações e maneiras de desenvolver uma solução. Um grande exemplo disso, seria uma grande dúvida: Se eu tenho um App que utiliza PSP's (Payment Service Provider), como posso saber que meu pagamento foi Aprovado, Recusado ou deu algum tipo de erro?

Podemos pensar primeiramente em 3 tipos de soluções: Short pooling, Long Pooling e Webhooks.

Short Pooling
Nesse tipo de integração, o servidor fica enviando requests e recebendo responses em um tempo intervalado pequeno. Basicamento, o servidor fica falando: "Meu pagamento foi processado?", "Meu pagamento foi processado?", "Meu pagamento foi processado?"

E então o PSP responde: "Ainda não", "Ainda não", "Ainda não", "Opa, aqui estão os seus dados de pagamento!". Assim então, o PSP envia o objeto dos dados do pagamento.

Long Pooling
Aqui, a lógica ainda é parecida. A conexão com o servidor e PSP é mantida, até o servidor receber sua response ou receber um timeout. Caso timeout, o servidor inicia outra conexão e fica repetindo esse ciclo até receber os dados corretamente.

WebHook: Aqui a mágica acontece

Um WebHook nada mais que consiste em um endpoint onde o PSP deverá enviar os dados do serviço que você esta utilizando. Um nome mais lógico, segundo Augusto Galego, seria API inversa e você vai entender o porquê disso. Em vez de precisarmos de um API polling, fazendo requests sem parar para o servidor do PSP, podemos simplesmente falar para o PSP o seguinte: "Olha, tenho esse endpoint aqui. Me avise por meio dele quando as minhas requests estiverem prontas". Dessa forma, é salvo poder de processamento tanto do servidor, quanto do PSP ao deixar de usar API polling.

Exemplo prático: Imagine que você tem um Saas que tem pagamento integrado com por exemplo AbacatePay. Toda vez que você fizer um pagamento, seu servidor irá gerar uma request para AbacatePay, pedindo, por exemplo, um código de pagamento via PIX. Ao receber esse código e efetuar o pagamento, como podemos saber que esse pagamento foi processado corretamente, sem precisar enviar inúmeras requests perguntando para AbacatePay? A resposta é simples: com o Webhook.

Lembra que falamos: "Abacate, quando meu pagamento for processado, me avise por meio dessa url de webhook."? É exatamente aqui que a Abacate vai falar: "Opa, ok. Aqui estão seus dados do pagamento". E então os dados são enviados para aquele endpoint no seu servidor.

Mas por quê API Inversa?
Por quê em vez de precisarmos enviar diversos requests para o PSP, o próprio PSP irá fazer um POST no nosso endpoint com os dados do pagamento. Por isso esse nome lógico.

Websocket: Conexão em tempo real

O WebSocket consiste em um protocolo de comunicação em tempo real que permite a troca de mensagens entre cliente e servidor de forma bi-direcional, através de uma conexão persistente.

Diferente do modelo tradicional HTTP (request/response), no WebSocket a conexão é estabelecida uma única vez e permanece aberta, permitindo que ambas as partes enviem dados a qualquer momento, sem a necessidade de novas requisições. Após um handshake inicial via HTTP, a comunicação passa a ocorrer por meio de frames WebSocket, o que reduz significativamente o overhead e resulta em baixa latência.

Esse modelo é amplamente utilizado em cenários que exigem atualizações em tempo real, como chats, dashboards em tempo real, jogos online, notificações e monitoramento de sistemas.

Exemplo prático

Imagine que você possui um SaaS com um painel administrativo em tempo real, onde o usuário acompanha o status de pagamentos realizados na plataforma.

Quando um pagamento é iniciado, seu backend se comunica com o PSP (via API ou Webhook). Assim que o pagamento é aprovado, recusado ou apresenta erro, o backend recebe essa informação.
Agora, como informar isso instantaneamente para o usuário que está com o dashboard aberto no navegador?

É aqui que o WebSocket entra.

Ao acessar o painel, o frontend do usuário estabelece uma conexão WebSocket com o seu servidor. Essa conexão permanece ativa enquanto o usuário estiver logado. Quando o backend recebe a confirmação do pagamento (por exemplo, via Webhook do PSP), ele envia imediatamente uma mensagem pelo WebSocket para o cliente conectado, informando:

"Pagamento aprovado",
"Pagamento recusado",
ou "Erro no processamento do pagamento".

Dessa forma, o usuário vê a atualização em tempo real, sem precisar atualizar a página ou fazer novas requisições HTTP.

Top comments (0)