2007 年,网站已有 API,但集成仍意味着轮询:一个应用反复敲另一个应用的门,询问是否有新情况发生。Jeff Lindsay 的博文《Web hooks to revolutionize the web》主张把 Unix 管道思想——简单程序通过输入和输出串联——应用到 Web 上,让网站注册回调,在事件发生时由其他网站调用。

这一设计因其小巧而激进:webhook 是用户定义的 HTTP 回调。你给源应用一个 URL;事件触发时,它把数据 POST 给你。无需消息代理,无需新的线格式,无需新端口或证书——只是一个在人人已在运行的 Web 上发出的请求。每个集成都是一对一的,因此网络无需任何中央协调者即可复利式扩张。

这一模式逐个平台传播开来。GitHub、Stripe、Shopify 和 Slack 都推出了 webhook 支持,到 2010 年代,像 Zapier 这样的集成平台可以将其描述为应用之间“对话”的默认方式——这是应用界的推送邮件时刻,软件不再检查,而是开始接收。

别打电话给我们——我们会通过普通 HTTP 打给你

webhook 就是一个 URL,因此任何应用都能提供,无需新基础设施

推送胜过轮询:没有浪费的请求,默认近乎实时送达

它依托普通 HTTP,因此防火墙、代理和 TLS 已经可用

一对一连接无需中央代理即可复利成网络

最便宜的标准是无需新机械的标准。如果你能用人人已在运行的东西——一个 URL、一个 HTTP POST——表达新模式,采用会自行解决。

webhook 从局外人的想法变成了入场门槛,而简单性也制造了自己的问题,行业随后围绕这些问题进行了标准化:载荷现在会被签名(Stripe 普及了 HMAC 签名),消费者需要重试和幂等性,而获取攻击者提供 URL 的接收方成了经典的服务器端请求伪造向量,OWASP 对此有详尽记录。最初只是一篇博文,如今已是支付确认、代码部署和聊天应用 ping 的方式。

从这里,追溯依据

参考来源

  1. Web hooks to revolutionize the web Jeff Lindsay, progrium.com (Internet Archive) · web.archive.org ·
  2. Webhook — Wikipedia Wikipedia · en.wikipedia.org
  3. What are webhooks? Zapier Blog · zapier.com