IT评测·应用市场-qidao123.com

标题: 什么是Webhook?工作原理?如何实现?缺点? [打印本页]

作者: 大连全瓷种植牙齿制作中心    时间: 2025-3-11 22:44
标题: 什么是Webhook?工作原理?如何实现?缺点?
什么是Webhook?工作原理?如何实现?

背景

   在利用钉钉机器人配置Stream推送 - 钉钉开放平台,qq机器人(微信没有机器人),企业微信机器人、飞书机器人、GitHub WebHook、腾讯问卷这些应用时,
  这些应用都提供了Webhook,它答应体系之间在变乱发生时自动转达信息,而无需持续轮询。
  有的人一开始可能很狐疑,什么是Webhook?如何利用?
  什么是 Webhook?

   通俗一点就是,你(自己的服务器提供一个webhook)在手机(别的支持webhook的平台注册)上定了一个明天早上6点的闹钟(将自己的webhook注册在别的平台上),其时间来到第二天早上6点时间,手机(别的支持webhook的平台)闹钟响起(触发你注册的webhook),你(自己的服务器提供一个webhook)就会听到铃声响起来(自己的服务器上的webhook触发)。
  Webhook 是一种简朴的 HTTP 回调机制,它答应一个应用程序在变乱发生时自动通过 HTTP 哀求通知另一个应用程序。这意味着 Webhook 在某个特定变乱发生时,自动向指定的 URL 发送数据,通常是 JSON 或 XML 格式。与传统的 API 不同,Webhook 是一种“推送”机制,而不是“拉取”机制。
Webhook 的工作原理

Webhooks 的工作流程可以总结为以下几个步调:
Webhook 与 API 的区别

尽管 Webhook 和传统的 API 都用于体系间的数据互换,它们的工作方式有所不同:

因此,Webhooks 更得当处理惩罚及时变乱和通知,特殊是在需要快速响应的场景中,如支付确认、CI/CD 构建等。
Webhook 的常见用途

Webhooks 在很多范畴都得到了广泛应用,以下是一些范例的应用场景:
如何实现 Webhook?

   **现实开发中,要实现webhook每每更加复杂,需要做算法安全校验。
  各大平台都会提供对应的工具包简化操作,按照对应文档即可快捷操作。
  所以这里只是做一个简朴demo展示接入流程,并不展示真实接入流程**
  实现 Webhook 通常分为两个步调:设置 Webhook URL 和配置变乱触发器。
1. 设置 Webhook URL

接收方服务需要界说一个 Webhook 接口(URL),这个 URL 用于接收来自发送方体系的 HTTP 哀求。通常,这个接口会分析 HTTP 哀求中的数据,并根据业务需求举行处理惩罚。
2. 配置发送方

在发送方应用中(如 GitHub、Stripe 等),需要配置 Webhook。当变乱发生时,体系会将干系数据通过 HTTP 哀求发送到你设置的 Webhook URL。
以下是几个简朴的 Webhook 示例,
下面代码展示了如何在 Python 环境中实现接收 Webhook 哀求:
  1. from flask import Flask, request
  2. app = Flask(__name__)
  3. @app.route('/webhook', methods=['POST'])
  4. def webhook():
  5.    data = request.json
  6.    print("Received webhook data:", data)
  7.    # 处理数据,例如触发构建
  8.    return 'OK', 200
  9. if __name__ == '__main__':
  10.    app.run(debug=True)
复制代码
  在这个示例中,Flask 用来构建一个简朴的 HTTP 服务,接收来自其他应用的 POST 哀求,并处理惩罚转达的 JSON 数据。
  下面展示在node环境中利用 Express 来监听 Webhook 哀求。
  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const app = express();
  4. const port = 3000;
  5. // 使用 bodyParser 中间件来解析 JSON 请求体
  6. app.use(bodyParser.json());
  7. // 定义 Webhook 路由
  8. app.post('/webhook', (req, res) => {
  9.   // 打印接收到的数据
  10.   console.log('Received Webhook:', req.body);
  11.   // 你可以根据接收到的数据执行相关操作
  12.   // 例如:如果是支付成功的通知,更新订单状态
  13.   if (req.body.event === 'payment_success') {
  14.    console.log('Payment was successful!');
  15.    // 在这里处理支付成功后的业务逻辑
  16.   }
  17.   // 响应 Webhook 请求,告诉发送方我们已成功接收
  18.   res.status(200).send('OK');
  19. });
  20. // 启动服务
  21. app.listen(port, () => {
  22.   console.log(`Webhook server listening at http://localhost:${port}`);
  23. });
复制代码
  这个应用会启动一个监听在 localhost:3000 的服务器,并在 /webhook 路径上接收 HTTP POST 哀求。每当一个 Webhook 哀求到达时,它会打印哀求的内容,并根据数据执行某些逻辑。
  4. 测试Webhool

假设你正在与一个外部服务(比方 钉钉机器人、GitHub 或其他)集成,这些服务会在特定变乱发生时向你的 Webhook URL 发送 POST 哀求。
Webhook 的安全性

为了防止恶意哀求,通常需要对 Webhook 哀求举行一些安全检查,比如验证签名或验证哀求的来源 IP。
由于 Webhook 机制自己没有内建的身份验证和安全性保障,接收方需要接纳额外的安全措施来保护 Webhook 哀求不被滥用:
webhook缺点

大部分都是采用 Webhook (注册公网 HTTPS 服务)的方式,包括卡片回调,利用 Webhook 方式开发过程中会遇到较多的问题,包括

   针对以上问题,有的应用(比方钉钉)提供了stream模式,利用websocket(这种方式也有缺点)实现同样的操作配置Stream推送 - 钉钉开放平台
    WebSocket 和 Webhook 各有优缺点,不能完全替换对方
  总结


以上只是几个非常简朴的利用场景,开发者可以根据不同的变乱,举行不同的处理惩罚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4