在使用腾讯企业微信的时候,有生成过Webhook,这个基本的作用就是向这个URL发送一个请求,然后就会在对应的群里收到相应的信息,这个在企业微信中被称为机器人。那么,这个Webhook有什么难理解的地方么?
API是什么?
API的基本用法就是,当你需要某个信息的时候,向服务端主动请求数据,服务端收到你的请求后,再进行处理,并给你回复相关的信息,完成一个闭环。站在客户端的角度,就是从服务端拉(Pull)数据。
如果你想在某个事物有一个状态改变时,获得消息,在使用API的场景下,你需要不停地向服务端去请求,去问服务端有没有改变,服务端告诉你没有改变,然后你仍然要不停地请求,这中间有很多请求是很浪费资源的,因为只是因为想了解某个东西有没有改变,从而不停地向服务器提出请求,如果有很多个客户端不停地去向服务端请求,会造成资源的堵塞及浪费。
基本上述的场景,我们就要引出今天的主角:Webhook.
Webhook是什么?
在上述场景中,当有事件发生时,通过注册过的Webhook,此时服务器会向你注册过的Webhook发送一个请求,告诉你你关心的事情发生了。站在客户端的角度来看,就是服务端推(Push)给客户端。
一个生活化的例子:
像快递员送快递一样,Webhook 会在事件发生后主动“送货上门”,而不是像 API 那样让你去“自取”。
在阅读上述内容时,仍然可能有模糊不清的地方,主要在于客户端与服务端在Webhook中并不是统一的。
- 事件触发的机器:当事件触发时,这个事件是发生在某一台服务器上的,服务器知道这个事件。
- 客户端的定义:这里的客户端,并不是服务端对应的客户端。比如你使用企业微信的Webhook,那么客户端就是企业微信APP,当有事件处罚时,你的服务器可以向企业微信的Webhook发送一条请求,而企业微信收到请求后,会将消息通过推送机器推给你的客户端(企业微信APP),完成一个闭环。
Webhook的工作机制
注册回调地址
客户端向服务端配置一个地址(如 https://weixin.com/webhook
),告诉服务端在事件发生时通知我。
事件触发
服务端监测到某个事件发生(如新消息到来、支付完成)。
数据推送
服务端通过 HTTP (HTTPS)请求(通常是 POST 方法)向回调地址发送事件信息。
客户端处理
客户端接收到请求后,解析数据并采取相应动作。
Webhook 和 API 的场景化说明
API 和 Webhook 通常是互补的
- Webhook 用于实时推送事件数据。
- API 用于客户端主动查询补充数据或操作服务。
举例说明:某聊天软件的应用
- API:用户通过API主动发送消息给某个联系人A。
- Webhook:当收到消息时,服务端推送事件通知到A所在的客户端,让A收到消息。
小结
通过上面的说明,可以知道Webhook具有灵活的接收方(回调地址(客户端)可以是与发起 API 请求的客户端不同的服务,甚至可能是完全不相关的服务),并在事件发生后,向特定的客户端发送通知与请求。
简单点说,就是事件触发,直接给接收方发送消息。因为本质是向Webhook的服务器发送消息,服务器再将消息转给客户端,可以理解成最终是发给了客户端。