所有文章 > 日积月累 > 理解Webhook:它是什么以及与API的区别
理解Webhook:它是什么以及与API的区别

理解Webhook:它是什么以及与API的区别

简介

Webhooks是一个API概念,是微服务API的使用范式之一,也被成为反向API,即:前端不主动发送请求,完全由后端推送。这种机制使得数据的实时更新和事件驱动的通信成为可能,极大地提高了应用程序的效率和响应速度。

什么是Webhook?

Webhook,作为一种轻量的事件处理应用,正变得越来越流行。简单来说,它就是一种反向API机制,类似于触发器一样。在传统的web server设计中,我们项目A想要获取项目B的数据,通常项目B需要提供一个API,然后项目A去请求项目B的API,从而获得数据,这样的过程我们称之为“拉”数据。通过webhook机制,对客户端-服务端的模式进行了逆转。

传统数据获取方式与Webhook对比

在传统的数据获取方式中,项目A需要不断轮询项目B以获取最新数据,这种方式效率低下且消耗资源。而通过webhook机制,项目A提供一个webhook URL,每当项目B有新数据时,便会向项目A的hook地址发送请求,项目A接收到请求后对数据进行处理,这种方式称为“推”数据。

如何使用Webhook?

使用webhook就需要为对应的服务端设计一个hook URL,用于接收服务端的请求。例如:http://www.abcd.com/api/video/hook。通常webhook请求过来的数据格式为XML和JSON两种,在现代Web应用中,都能很好地解析和对这两种数据进行交互

设计Hook URL

设计一个有效的hook URL是使用webhook的关键。这个URL将作为接收服务端请求的入口,因此需要确保其安全性和可访问性。

主要应用场景

Webhook常应用于异步编程中,如高安全的支付、微信登录(OAuth)、资源同步、资源创建与更新、耗时较长的操作等。

场景A:视频处理服务器

你需要向视频处理服务器上传一个视频,并希望在视频处理完成后获得结果。由于视频处理服务器上视频很多,在排队进行处理,你不能立刻获取到视频的处理结果。此时,你可以设计一个hook URL,当视频处理完成后,视频处理服务器自动向你的hook URL发送请求,告诉你视频已经处理完毕。

安全问题

由于webhook会向公网上的hook URL发送数据,这意味着某些不怀好意的人可能会找到这个URL,从而进行发送错误的数据。但是我们可以通过以下一些技术手段来解决这个问题:

增加Token机制

增加token机制可以确保只有持有正确token的请求才能被接受,从而增加安全性。

增加Auth认证

增加Auth认证可以确保只有经过认证的用户才能发送请求,进一步保护数据安全。

数据签名

数据签名可以确保数据在传输过程中没有被篡改,增加数据的完整性。

需要注意的问题

使用webhook时,需要特别注意以下几个问题:

服务端数据发送后的处理

当服务提供者通过webhook将数据发送你的服务端后,就不会再去关注这些数据。假设你的服务端此时出现了崩溃,或者无法请求成功等原因,就需要主动去尝试请求数据。

处理大量请求

webhook可能会发出大量的请求,可能会造成你的应用阻塞,在此需要确保你的应用能够处理好这些请求。

现代技术中的Webhooks

在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过webhooks实现的。Webhooks是基于HTTP的回调函数,其中一个服务使用API立即通知另一个服务发生的事件。

Webhooks的基础知识

以下是webhooks的基础知识:

  • 事件驱动聊天:应用程序可以使用webhooks在特定事件发生时互相聊天,而不是不断检查,比如新客户订单或朋友的生日。

  • 推送通知,无需等待:不用刷新页面即可看到更新。Webhooks就像接收通知一样——应用程序在重要事件发生时立即通知另一个应用程序。这样更快捷,节省时间。

  • 带详细信息的Web消息:Webhooks使用Web调用发送消息。这些消息包括简短的报告,例如JSON格式的常见新闻更新,通知发生了什么。

  • 实时更新:由于webhooks立即提供信息,应用程序可以立即保持互相之间的最新状态。

Webhooks的工作原理

  1. 事件发生:事件触发webhook过程。这个事件可以是任何内容,从网站上新客户注册到商店存货水平的变化等。

  2. HTTP POST:事件触发后,将向指定的URL发送HTTP POST请求,即webhook URL。此URL指向一个专门设计用于接收和处理这些webhook通知的Web服务器。

  3. 触发Webhook:接收HTTP POST请求后,webhook会在Web服务器上触发。

  4. 通知:然后,webhook服务器解析包含在HTTP POST请求中的数据。这些数据通常包含触发webhook事件的详细信息。

  5. 接收和处理请求:然后,webhook服务器验证请求的真实性并相应处理数据。

  6. 采取行动:最后,根据从事件接收的数据,webhook服务器执行特定的操作。这种操作可以根据具体应用程序而有所不同,但可能涉及更新数据库,发送电子邮件通知或触发另一个工作流程。

简单来说,webhooks充当各应用程序之间的信使。它们通知应用程序特定事件的发生并提供相关数据,以便应用程序可以采取相应的行动。

在GitHub中实现Webhooks

现在我们已经了解了webhooks的基础知识并理解了其工作原理,让我们尝试在最流行的Dev应用程序之一GitHub中实现它。

第1步:转至您的存储库设置

  • 登录到您的GitHub账户。
  • 转至您想要设置webhook的存储库。
  • 单击设置,然后选择Webhooks

第2步:添加新的Webhook

  • 单击添加webhook按钮
  • 在Payload URL字段中,输入要接收webhook有效负载的服务器的URL

第3步:配置Payload URL和Content-Type

  • 选择内容类型。对于JSON有效载荷,请选择application/json。
  • 可选地,设置用于安全性的Secret,用于验证接收的有效负载

第4步:选择触发Webhook的事件

  • 决定哪些事件应触发Webhook。您可以选择各个事件或选择接收它们全部。

第5步:激活Webhook

  • 确保选中Active复选框以立即激活Webhook
  • 单击添加Webhook以保存配置

Node.js中的Webhook接收器的示例代码片段:

const express = require('express');
const crypto = require('crypto');
const bodyParser = require('body-parser');

const app = express();
const port = 3000;

const secret = 'mySecret'; // 用您的GitHub webhook密钥替换
app.use(bodyParser.json());

app.post('/webhook', (req, res) => {
const signature = `sha1=${crypto.createHmac('sha1', secret)
.update(JSON.stringify(req.body))
.digest('hex')}`;
if (req.headers['x-hub-signature'] === signature) {
console.log('接收到Webhook:', req.body);
// 处理webhook事件
res.status(200).send('已接收Webhook!');
} else {
res.status(401).send('无效签名');
}
});

app.listen(port, () => {
console.log(服务器正在监听 http://localhost:${port}); });

这段代码创建了一个简单的服务器,监听在/webhook处接收POST请求。它使用您在GitHub中配置的密钥验证请求签名。当发生webhook事件时,GitHub将以事件数据的形式发送POST请求至指定的有效载荷URL。然后您的服务器可以相应地处理这些数据。

请记住将’mySecret’替换为您在GitHub中设置的实际密钥。这样可以确保您接收的有效负载确实来自GitHub而不是冒名顶替者。

优点和最佳实践

使用Webhooks的优势:

  • 实时数据传输:Webhooks在系统之间提供即时通信,允许在事件发生时立即交换数据。

  • 效率:它消除了持续轮询的需求,降低了服务器负载并提高性能。

  • 用户体验:即时更新增强了用户界面,使其更具响应性和动态性。

  • 灵活性:Webhooks可以根据不同事件触发特定操作,为应用程序交互提供定制化。

有效使用Webhooks的最佳实践:

  • 安全连接:使用HTTPS确保通过webhook传输的数据是加密且安全的。

  • 验证Webhook:实施验证方法,例如验证数字签名,以确认传入数据来自可信来源。

  • 错误处理:设计系统以优雅地处理失败,包括对失败的webhook传递重试和警报。

  • 日志记录:保持webhook活动的详细日志,以便于调试并为数据流提供审计跟踪。

通过利用webhooks的优势并遵循这些最佳实践,开发人员可以为其应用程序创建高效且可靠的集成。

结论

Webhooks具有实时、事件驱动的功能,在当今数字经济中是一种变革性工具。Webhooks通过允许应用程序之间流畅自动地交流,加快了工作流程,提高了响应性,并促进了多个领域的效率。无论是用于持续集成,自动通知还是动态数据同步,Webhooks减少了手动参与的需求,减少了错误并加快了过程。

FAQ

  1. 问:Webhooks与传统API有什么区别?
    答:Webhooks是一种反向API机制,它允许服务在特定事件发生时推送数据给客户端,而传统API通常需要客户端主动拉取数据。

  2. 问:Webhooks如何提高效率?
    答:Webhooks通过消除持续轮询的需求,降低了服务器负载并提高性能,从而提高效率。

  3. 问:使用Webhooks时需要注意哪些安全问题?
    答:使用Webhooks时需要注意增加token机制、增加auth认证、数据签名等安全问题,以确保数据传输的安全性。

  4. 问:如何在GitHub中设置Webhooks?
    答:在GitHub中设置Webhooks需要转至您的存储库设置,单击添加webhook按钮,在Payload URL字段中输入要接收webhook有效负载的服务器的URL,配置Payload URL和Content-Type,选择触发Webhook的事件,最后激活Webhook。

  5. 问:Webhooks有哪些实际应用场景?
    答:Webhooks的实际应用场景包括高安全的支付、微信登录(OAuth)、资源同步、资源创建与更新、耗时较长的操作等。

#你可能也喜欢这些API文章!