Webhook 简介以及如何使用 Python 接收它们
本教程将介绍 webhook 的概念。我们还将构建一个可以接收 GitHub webhook 的简单 Flask 服务器。我们还将看到如何公开我们的本地主机。
什么是 webhook?
在谈论 webhook 之前,让我们先谈谈 API。以下是 API 的数据流。

您向 API 发出 GET/POST 请求并得到响应。如果您想了解有关使用 API 的更多信息,请查看我关于使用 Python 使用API 的文章或我关于使用 JavaScript 使用API 的文章。
考虑一下 Github API,如果我们想构建一个每次在 repo 中出现新问题时都会发送电子邮件的 API。一种方法是构建一个 API,它每 1-2 分钟发出一次请求,以检查是否有新问题发生并通知我们。这个过程称为轮询。基本上,我们必须定期提出请求以检查新问题。但是,这似乎效率低下。如果 GitHub 在创建新问题时向我们的 API 发出请求怎么办。这称为 webhook。我们不需要定期发出请求,而是将我们的 API 端点提供给 GitHub,每当创建新问题时,都会向我们提供给 Github 的端点发出请求。 Webhook 也称为反向 API。下面是轮询和 webhook 之间的比较。这张图片的灵感来自这篇文章

您可能已经注意到,发出了很多请求,并且根据我们发出请求的频率,在创建新问题和我们的 API 收到通知之间可能会有一点延迟。
让我们创建一个 API 来在 Github 存储库中创建新问题时接收请求。
创建一个简单的Flask Server
首先,让我们创建一个 hello world 端点。
https://gist.github.com/rahulbanerjee26/617d073669e78b538fabccfe3219515c
现在我们需要创建一个端点来接收来自 GitHub API 的请求。这将是一个接受 POST 请求的标准端点。
https://gist.github.com/rahulbanerjee26/4de2f9e12331616f63f078bcf9d064bd
我阅读了文档并知道 JSON 对象的键。您可以使用不同的键来访问更多数据,例如问题标签等。
现在你可以运行你的烧瓶服务器了
python3 __init__.py
公开我们的 localhost URL
Webhook 需要公共 API 端点,因为它们无法向诸如“http://127.0.0.1:5000/”之类的端点发出请求。一种方法是部署 API 并使用已部署 API 的 URL。另一种方法是将您的本地主机公开为公开可用的 URL。这将是临时的,并且仅在您的 Flask 服务器正在运行时才有效。对公共 URL 发出的任何请求也将发送到您的 localhost URL。
我们将使用ngrok来公开我们的 localhost URL。您必须创建一个帐户。
为您的操作系统下载 ngrok 并解压缩。现在打开一个终端并 cd 到解压缩的 ngrok 文件所在的目录。在终端中输入以下命令
ngrok http <PORT NUMBER>
例如:如果您的烧瓶服务器在端口 5000 上运行,您必须输入以下内容
ngrok http 5000
您应该在终端中看到类似的输出。公共 URL 是“转发”旁边的 URL。就我而言,它是35cc-69-58-102-156.ngrok.io。如果您访问您的公共 URL,您应该会看到与访问 localhost URL 时相同的内容。
创建问题 Webhook
选择你喜欢的任何 Github Repo。转到设置> Webhook > 添加 Webhook 

输入你的端点,在我的例子中是35cc-69-58-102-156.ngrok.io/githubIssue
由于我们只希望在 repo 中创建问题时发出请求,因此选择“让我选择单个事件”。并向下滚动以选择“问题”。向下滚动后,向下滚动并创建 webhook。
测试 Webhook
在你的仓库中创建一个问题

现在检查运行烧瓶服务器的终端。我还添加了一个标签并关闭了这个问题。

结论
现在 Flask 服务器并没有做太多事情。但是,您可以在它之上构建。您可以使用数据并发送推送通知或电子邮件,而不仅仅是打印收到的数据。我希望你觉得这篇文章有帮助。在上联系 领英,推特
更多推荐

所有评论(0)