Webhooks是一种在特定事件发生时触发的HTTP回调,它允许创建一个监听HTTP POST请求的简单服务。最近,首次接触到Webhooks的概念,并在实现Webhook URL的过程中遇到了不少挑战。经过一番努力,最终理解了Webhooks的实质,并决定写下这篇文章,以分享理解。请注意,以下内容是基于个人的理解,如果有任何错误,欢迎指正。
从技术角度来看,Webhooks是一种用户定义的HTTP回调,当源站点发生特定事件时触发。事件触发时,源站点会向指定的Webhook URL发送一个HTTP请求。Webhooks的应用场景包括:
简而言之,Webhooks是一种接受HTTP POST请求的Web服务,它允许监听来自源站点的数据流。
以FullContact网站为例,它存储了注册用户的社交资料。要获取特定用户的社交资料,需要使用用户邮箱和API密钥(由FullContact生成并提供)查询FullContact数据库。
假设需要为一系列邮箱地址获取JSON格式的社交资料,有两种方法可以实现:
在第二种方法中,需要一个REST服务作为Webhook,它接受JSON输入并将其保存。这个REST服务就是Webhook,它持续监听FullContact网站的查询请求。
要查询FullContact数据库,需要创建一个查询URL,格式如下:
https://api.fullcontact.com/v2/person.json?email=XXXXX@YYYY.ZZZZ&apiKey=XXXXXXXXXXXXXXXX
在浏览器中打开上述URL,可以看到指定邮箱地址对应的JSON数据。
要在查询URL中添加Webhook,只需在"email"参数后添加以下内容:
&webhookUrl=http://yourRestServiceAddress.svc
添加Webhook的查询URL示例:
https://api.fullcontact.com/v2/person.json?email=XXXX@YYYY.ZZZ&webhookUrl=http://myServer/MyServiceUrl&apiKey=XXXXXXXXXXXXXXXXXXXX
当访问这个URL时,FullContact网站会将指定邮箱地址的JSON数据发送到指定的"webhook URL",即REST服务。需要注意的是,为了使REST服务作为Webhook正常工作,它必须暴露在互联网上。
还可以为服务端指定一个Webhook ID。Webhook ID的指定方式与Webhook URL相同。FullContact会将ID原样发送给服务端,这个ID可以在服务端用于识别JSON数据的归属。只需在URL中添加"&webhookId=XYZ"即可。
如果想查看发送到Webhook的JSON数据,可以创建一个虚拟Webhook。例如,使用postcatcher.in网站创建一个虚拟Webhook。