什么是Webhook

webhook允许第三方服务向您的应用程序发送实时更新。更新由webhook提供者的一些事件或动作触发,并通过HTTP请求推送到您的应用程序。当您收到请求时,您使用一些自定义逻辑来处理它,比如发送电子邮件或将数据存储在数据库中。

webhook和api有什么区别?

许多服务同时提供api和webhook来将它们的数据移动到您的应用程序中。例如,Stripe允许您从它们的API和webhook集成中检索与计费相关的事件(收费、订阅等)。有什么区别呢?

使用api,您可以从提供者获取数据。但是webhook允许提供商将数据推送给你。

从API中提取数据对于大多数用例来说都可以很好地工作。事实上,许多应用程序只提供api,而不提供webhook,所以它可能是您唯一的选择。

但是从API中提取数据会:

  • 浪费时间——即使没有数据可以从服务中提取,应用程序也会向API发出请求。

  • 导致延迟——您必须频繁地轮询API,以确保获得最新的数据。如果你正在开发一个需要实时更新的应用程序,即使是每分钟一次的拉拽也可能太慢。

通过webhooks,提供商可以为您完成工作。它们会在发生时推送实时更新。您不是在轮询服务以请求新数据。

为什么信息滞后会成为一个问题

我们正在把我们的应用程序与越来越多的第三方服务整合起来。我们使用来自这些服务的数据进行决策,因此依赖于最新的数据。

何时使用webhook、api或两者兼而有之

我们已经看到,通过API轮询更新会消耗不必要的资源,并导致应用程序之间的数据延迟。那么,为什么api是有用的呢?

  • 有时,API是您所拥有的全部。并不是所有的服务都提供webhook,因此您可能必须与API集成才能获得所需的数据。例如,Quandl(金融数据服务)只提供API,而不是webhook。

  • 有时你更关心高层次的数据,而不是个体事件。webhook通常为每个事件向应用程序发送HTTP请求。因此,当单个用户订阅您的服务时,Stripe将发送一个针对该事件的webhook请求。但是您可能只关心活动订阅的总数,您可以通过对Stripe的API的单个请求轻松检索这些活动订阅。

  • 要进行更改,您需要一个API。webhook对于从webhook提供商向您的应用程序发送单向通知非常有用。但是您通常希望通过在第三方服务中采取一些操作来响应该通知。为此,您需要一个API。例如,当用户在Github中提交新问题时,可以使用API用新评论进行回复。

  • webhook包含数据,但不总是元数据。webhook通常发送小消息,例如告诉您用户123采取了一些操作x。这些消息通常不包含关于该用户或事件的其他有用元数据。但是您通常可以查询API来获取元数据。例如,当客户的免费试用即将结束时,Stripe将向您发送webhook通知,您可以向Stripe的客户API端点发出请求,以确认客户的文件上有有效的支付方法,并检索其他元数据。

如果您正在构建一个中等复杂的应用程序,那么您可能会同时使用这两种方法。

花点时间阅读开发人员文档,找到获取所需数据的正确方法。如果这些文档缺少示例或代码示例,那么博客文章可能会提供很好的演练。StackOverflow可以帮助您解决提供者未能记录的常见问题。在你写一行代码之前,先在Github上寻找其他人使用这些api或webhook集成来构建的应用程序:例如,这个webhook仪表盘。其他人可能已经开发了解决您的用例的工具。

Last updated