Web

Webhook

理解

Posted by Jingming on December 7, 2020

Webhook的作用是反向API。所谓反向,就是服务器调用客户端的API,而不是正向的客户端调服务器API。

这个概念一个让人迷惑的点在于:看起来,当服务器调用客户端的时候,服务器就是”客户端”,也就不存在反向了。因此,首先分清业务中的客户端和服务器特别重要。

PS. 一般程序都喜欢”自诩”为服务器,例如平台程序,好123,那些真正提供服务的网站链接,在好123看来,就是自己的客户,自己才是服务器。 仔细思考,也许能够提供主动提供某种服务的程序,就叫服务器。

简而言之:一个服务器程序里面,如果存在调用客户端的API(例如域名是客户端公司的)从而把服务器的数据传给(通知)客户端,那么这种机制称为Webhook。 其中的内涵是:一个服务如果要在有消息时通知关注自己的对象,那么使用webhook机制。

适用情况是:客户端想要实时的从服务器获取一些信息,但这些信息不是时刻都有的(例如高考了多少分,问题是卷子都没批),这样,如果调用服务器提供的API来获取数据,由于并不是时刻有信息的

因此客户端查询结果非常可能落空,且需要隔断时间再次查询。解决方法是,客户端不通过调用服务器API来获取数据(因为也大概率获取不到),而是改成服务器来通知客户端,也就是调用客户端实现的Webhook API。

服务器端提供通知功能,客户端会提前在服务器上订阅(告诉服务器客户端的Webhook API URL),等待服务器有事件发生的时候,服务器会调用客户端的API url来做事(行为)。

举个例子:微信加了某人为好友,并设置可以查看对方的状态。这意味着什么?

这意味着自己(客户端),想要获取好友(服务器)的非实时信息。 设置可以查看对方意味着把自己微信账户信息添加到好友的通知列表,该好友发状态的时候,会依次自动通知列表中的微信账号。

也就是说,客户端获取具体服务器信息的时候,并不是自己主动去调服务器,而是放个钩子(webhook)在服务端(订阅、也就是把自己的api、url等联系方式给别人), 等服务器有消息时候主动告诉自己(发送什么内容,取决于服务器自己,客户端无法决定)

Webhook再举例: Git Webhooks。 在git webhooks配置好Jenkins的Webhook地址(对的,Jenkins竟是Git的客户端!),这样, git push之后,Git调用jenkins Webhook去相应的构建以及部署。也就是说,用户想使用Jekins,但是实际上,用户首先使用的服务是Git,Git把流量导入Jekins。

再举两个例子:A公司比较大,且有一套全面的API服务;B公司属于初创公司,有一些自己特色(例如自己作为平台,可以把流量导入多个大公司),且有相关的大量的用户。

现在B公司和A公司合作,A公司需要B公司的用户,B公司需要A公司的基本服务。那么B公司可以使用webhook技术,B公司作为服务器,A公司作为客户端,A对B进行订阅,那么B公司收到流量的时候会把其中访问A公司服务的流量导入A公司相关的API中(通知A公司)。

上面例子的变种:A公司的功能被集成到B公司的平台。这样用户在使用服务的时候,虽然是从B公司的平台进入,但是实际上之后还是

使用A公司的账户登陆,也就是说,该用户本质上是属于A公司的。此时A公司有用户,假设此时A公司没有相应的服务,但是B有,那么A可以把自己的

用户导到B公司,也就是B公司订阅A公司的webhook。这样B公司就能享有A公司的客户。