webhook和轮询

158 阅读1分钟

image.png 假设我们经营一个电子商务网站。客户通过 API 网关将订单发送到订单服务,然后发送到支付服务进行支付交易。然后,支付服务与外部支付服务提供商 (PSP) 对话以完成交易。 

有两种方法可以处理与外部 PSP 的通信。 

1. 简短轮询 

支付服务向PSP发送支​​付请求后,会不断向PSP询问支付状态,经过几轮询问后,PSP最终返回支付状态。 

短轮询有两个缺点: 

  • 不断轮询状态需要支付服务的资源。 
  • 外部服务直接与支付服务通信,产生安全漏洞。 

2. Webhook 

我们可以向外部服务注册一个 webhook。这意味着:当您对请求有更新时,在某个 URL 上回调我。当 PSP 完成处理后,它将调用 HTTP 请求来更新支付状态。

这样,编程范式就发生了改变,支付服务不再需要浪费资源去轮询支付状态。

如果 PSP 一直不回电怎么办?我们可以设置一个日常工作来每小时检查一次付款状态。

Webhook 通常被称为反向 API 或推送 API,因为服务器会向客户端发送 HTTP 请求。使用 Webhook 时我们需要注意 3 件事:

  1. 我们需要设计一个合适的API供外部服务调用。
  2. 出于安全原因,我们需要在 API 网关中设置适当的规则。
  3. 我们需要在外部服务上注册正确的URL。