Webhook 是我们现代云生态系统中的重要组成部分。 它们用于通过响应触发事件将实时数据从一个应用程序馈送到另一个应用程序,并用于各种通知和自动化系统。
网络钩子概述
webhook 解决了哪些问题? 为了 example,假设您在家等待包裹送达。 要知道包裹是否到达,您可以站起来看看您的前门或窗户。 如果包裹不在这里,您可以稍后再回来查看。
在服务器世界中,定期检查以获取新信息的过程称为 轮询,并且很长一段时间以来,这是两台机器之间进行更新通信的最常用方法。 轮询的缺点是在资源使用和不连续发生的关键事件的及时性之间找到平衡。 在我们的 example,您最终会花费大量精力检查包裹是否到达时没有任何东西可以显示。
Webhooks 擅长 推动,这是一种资源高效的通知方法,它让服务器发送通知以让您了解新发生的事件。 为了减轻我们的送货头痛,您可以要求送货公司按门铃(即发送通知),这样您只需起床一次:包裹到达时。
虽然 webhook 非常擅长实时监控数据,但它们有一个微妙但严重的缺点。 由于 webhook 仅在新信息可用时才运行,因此出现故障且未对任何更新做出反应的服务看起来与运行良好但没有任何消息要发送的服务相同。
为了缓解这种情况,将 webhook 与其他基于轮询的应用程序编程接口 (API) 工具相结合是可行的方法。 拥有冗余设置可提高可靠性并让您享受两者的优势。 由于 webhook 负责对时间最敏感的更新,因此可以减少轮询间隔以节省带宽,同时仍跟踪任何停机问题。
Webhook 力学
Webhook 是用户创建的 HTTP 回调。 用户将创建一个 URL 并将该 URL 添加到实现 webhook 的服务。 当此服务想要向您发送信息时,它会向您提供的 URL 发出 HTTP POST 请求。 此 POST 请求中的数据可以以最适合正在传输的信息的任何格式发送。 用于此目的的最常用格式是 JSON,因为它的灵活性和支持范围很广,即使在某些情况下,首选 XML 或 HTML 表单编码。
发送的实际数据可以短至几个字符,例如以下 JSON 片段。
'{"data":"New event detected"}'
重要的是数据以预期的格式发送并在需要时准确到达。
Webhook 只是 API 中的众多工具之一。 有时 webhook 被称为反向 API,假设 API 通常通过向服务器发送请求然后等待响应来运行(使用我们之前讨论的轮询过程)。 虽然术语“反向 API”可能意味着信息流向相反的方向,但信息仍会从服务流向您。 Webhook 只是另一个实时处理此信息流的工具。
Webhook 示例
让我们看一些 webhook 示例以及您可以使用它们构建的内容。
GitHub
GitHub 允许您将 webhook 设置为特定事件的集成。 每次有人将更改推送到您的存储库时,您都可以让其中一台服务器收到通知,并自动使用它来构建和测试更改。 这些建议的更改可以作为持续集成/持续交付系统或 CI/CD 的一部分进行部署。
投递箱
与 GitHub webhook 类似, 投递箱 让您在对文件或文件夹以及进行这些更改的用户进行更改时收到通知。 这使您能够自动执行发布过程中的许多任务,例如在更改文件后自动将文件转换为 PDF。
松弛
对于可能需要人眼的东西, 松弛 允许您配置在新信息到达时发布到特定频道的 webhook。 这对于警报和监控系统或其他需要立即关注的事件特别有用。
Webhook 集成提示
以下是一些技巧,可让您有效地集成 webhook。
快速响应
webhook 的主要优势在于它们如何实时传输信息,因此尽快确认您已收到 webhook 请求非常重要。 如果接收到的数据需要深入处理,可以考虑使用队列或者单独的线程。
正确处理错误
如果传输的数据存在问题,则发出错误代码对于确保再次发送任何错过的更新至关重要。 即使您单独处理接收到的数据,您也可以事先解析此信息以确保其有效(也称为完整性检查)。
监控负载
每当事件发生时,Webhook 通知就会到达,因此可能会收到比您的服务器在短时间内处理的更多的警报。 大多数服务允许您配置速度限制以防止出现此问题。 相比之下,其他一些将要求您仔细优化系统以继续照常接收通知。
保护您的连接
使用 SSL 证书在数据传输时对其进行加密已经是一种标准,但由于 webhook URL 将侦听任何传入请求,因此未经授权的参与者可以尝试将意外数据发送到此 webhook。 为避免这种情况,大多数服务在每个请求中都包含一个秘密身份验证令牌,其作用类似于密码,以确保请求是您真正想要接收的请求。
Webhook 测试技巧
大多数在其 API 中提供 webhook 接口的服务也有关于如何使用它的大量文档。 熟悉如何浏览文档以及如何使用文档提供的示例是开发 Web 服务和应用程序的关键技能。 您可以开始使用 液体网络 API,它可以让您自动执行大部分可以在帐户控制面板上手动执行的操作。 实践远比理论走得更远,因此直接查看 webhook 的行为方式对开发非常有用。
有时,查看流量有助于更好地了解数据的组织方式。 GitHub 等一些服务可以让您查看完整内容并响应任何过去的请求。 如果此功能在其他服务上不可用,您可以使用第三方工具,例如 恩格罗克 捕获和查看这些数据。
您可以使用 cURL 来模拟您的服务的行为并将数据粘贴到新的 webhook 请求中以进行主动测试。 这种方法对于解决可能不经常发生的边缘情况非常有用。
在下面的 example,我们看到一个非常基本的 webhook 请求,它使用 cURL 向 Slack 中创建的 webhook URL 发出,具有以下选项:
- -X 指定请求的类型(POST)。
- -H 包含一个标头,它指定内容的类型(在本例中为 JSON 数据)。
- –data 发送实际数据,即文本“Hello, World!”
我们可以看到服务器回复了 行,如果我们检查创建此应用程序的 Slack 通道,我们可以看到通知正确通过。
结论
Webhook 是一种工具,可让您通过常规 HTTP 请求接收有关事件或通知的更新,而无需花费资源进行持续的状态更新。 它们是许多自动执行重要任务的不同系统中的一个简单但功能强大的构建块。
您准备好开始构建自己的自动化解决方案来满足您的所有业务需求了吗? 使用我们的一款小型且价格合理的全托管 VPS 开始测试,或联系我们的一位解决方案专家以帮助构建您的基础架构。