基本区别

许多小白第一次接触webhook的时候常常会与api混淆,那么我们先来看看两者的本质差别在哪:

api

一般用于用户主动发起请求,目标系统返回用户需要的数据、结果。API 用途广泛,涉及查询、修改、执行等

webhook

一般用于用户提前设置好触发条件与通知方式,当符合条件,目标系统会主动给用户推送信息、执行动作,无须用户主动查询。webhook 用途单一,仅用于事件发生时的实时推送通知。

**ps:**webhook 是 API 的一种,所有 webhook 都是 API,但不是所有 API 都是 webhook。

深入了解webhook

webhook的特征

webhook基于HTTP/HTTPS协议,以POST为主,少数用GET

常用 JSON(简洁易解析),也有用 XML、表单(form-data)的场景

下面,我们来看看webhook服务的两边各有什么特点。

provider(提供者)

**谁来当?**通常是 “被触发动作的系统”(比如企业微信消息推送、GitHub、钉钉机器人等)。

做什么?

  • 提供一个 “专属的 webhook 地址”(就是https://qyapi.weixin.qq.com/...?key=xxx 这类 URL),作为接收请求的 “入口”;
  • 定义 “规则”:比如请求必须用什么格式(JSON / 表单)、需要带什么验证信息(比如你的 key)、支持触发哪些动作(比如企业微信只支持 “推送消息”,GitHub 支持 “代码提交通知”);
  • 收到合法请求后,执行预设动作(比如企业微信把消息推到群里,GitHub 把代码更新信息发给你)。

举例:企业微信就是典型的 “webhook 提供者”—— 它给了你带 key 的 URL,规定了必须发 JSON 格式的请求,并且收到后会执行 “推送消息” 的动作。

caller(调用者)

**谁来当?**通常是 “主动触发动作的一方”(比如本地电脑、服务器脚本、第三方工具等)。

做什么?

  • 知道提供者的 webhook 地址和规则(比如 “必须用 JSON 格式,要带 key”);
  • 在需要的时候,按照规则构造请求并发送(比如你用 curl 命令发消息内容);
  • 目的是 “让提供者执行某个动作”(而不是向提供者要数据)。

举例:你用 curl 命令发送请求时,你的本地电脑就是 “webhook 调用者”—— 你按照企业微信的规则发了 JSON 请求,目的是让企业微信执行 “推送消息” 的动作。

小结一下,

**推送方是这样的。**接收方只要挂个公网 IP、开对端口、保证网络能被找到就可以,反正数据来了接住就行。可推送方要考虑的事情就多了:得算签名防伪造请求、调重试机制防网络丢包、盯死 JSON 格式防解析报错,还得备着容错方案防接收方宕机 —— 毕竟消息发丢了锅全是自己的,可太费脑子咯。(doge) 图片由豆包生成

一句话总结

webhook 是 API 的一种特殊类型,其核心价值是 “实时自动化”,一般用于推送消息,我这里举几个webhook的热门自动化部署方案,学会的小伙伴们可以快乐地用webhook去搭建自己的自动化方案啦!

场景推送方接收方触发事件推送内容
企业微信消息推送你的系统企业微信服务器有新通知需要发送消息文本、图片等
支付结果通知支付平台(微信支付 / 支付宝)商户服务器用户支付成功 / 失败支付金额、订单号、支付状态
GitHub 代码通知GitHub 服务器你的 CI/CD 系统代码提交、PR 创建提交者、修改内容、分支信息
监控报警监控系统(Zabbix/Prometheus)企业微信群 / 邮件服务器 CPU 过高、服务宕机报警级别、故障详情、时间
电商订单同步电商平台仓库管理系统新订单创建、订单取消订单信息、操作类型