# 什么是Webhook

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

### webhook和api有什么区别?

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

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

![](https://1205234865-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lg5jN2bbDNytG0ZEOWR%2F-Luz53x5p1DFxDpmkYLH%2F-Lv0WIotZftDyJRqKzDU%2Fimage.png?alt=media\&token=d6cd8bd7-67d2-4634-9be4-7823a613828c)

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

但是从API中提取数据会：

* 浪费时间——即使没有数据可以从服务中提取，应用程序也会向API发出请求。
* 导致延迟——您必须频繁地轮询API，以确保获得最新的数据。如果你正在开发一个需要实时更新的应用程序，即使是每分钟一次的拉拽也可能太慢。

![](https://1205234865-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lg5jN2bbDNytG0ZEOWR%2F-Luz53x5p1DFxDpmkYLH%2F-Lv0WcJqS39FKuLkqUJJ%2Fimage.png?alt=media\&token=a1c5fa97-69ea-4948-80e8-ea410e35d2a5)

通过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仪表盘。其他人可能已经开发了解决您的用例的工具。
