什么是Webhook?

下面的图表展示了轮询和Webhook之间的比较。

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

处理与外部PSP的通信有两种方式:

1.短轮询在向PSP发送支付请求后,支付服务会不断询问PSP支付状态。经过几轮后,PSP最终返回状态。短轮询有两个缺点:1.不断轮询状态会占用支付服务的资源。2.外部服务直接与支付服务通信,存在安全漏洞。2.Webhook我们可以向外部服务注册一个Webhook。这意味着:当请求有更新时,请调用指定的URL来通知我。当PSP完成处理后,它将调用HTTP请求来更新支付状态。这种方式改变了编程范式,支付服务不再需要浪费资源轮询支付状态。

如果PSP没有回调怎么办?我们可以设置一个每小时检查支付状态的定时任务。

Webhook通常被称为反向API或推送API,因为服务器向客户端发送HTTP请求。在使用Webhook时,我们需要注意以下三个方面:

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

当然!以下是一个示例代码,演示了如何使用Python和Flask创建一个处理支付状态更新的Webhook服务器:

import jsonfrom flask import Flask, request, abort
app = Flask(__name__)
@app.route(\\\'/webhook/payment\\\', methods=[\\\'POST\\\'])def payment_webhook(): data = request.get_json() if not data: abort(400, \\\'Invalid request payload.\\\')
# 验证请求来源 if not verify_request_origin(request): abort(401, \\\'Unauthorized request.\\\')
# 处理支付状态更新 payment_id = data[\\\'payment_id\\\'] status = data[\\\'status\\\'] update_payment_status(payment_id, status)
return json.dumps({\\\'message\\\': \\\'Payment webhook received\\\'}), 200, {\\\'Content-Type\\\': \\\'application/json\\\'}
def verify_request_origin(request): # 进行请求来源验证的逻辑 # 如果请求不是来自预期的外部服务,返回False
# 示例中简单地验证请求的来源IP是否在允许的IP列表中 allowed_ips = [\\\'123.456.789.0\\\', \\\'987.654.321.0\\\'] request_ip = request.remote_addr if request_ip not in allowed_ips: return False
return True
def update_payment_status(payment_id, status): # 执行更新支付状态的逻辑 # 根据payment_id和status更新数据库或调用其他服务等 # ...
if __name__ == \\\'__main__\\\': app.run(host=\\\'0.0.0.0\\\', port=8000)

在上述示例中,我们首先定义了一个/webhook/payment端点,用于接收支付状态更新的Webhook请求。

原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/33852.html

(0)
小技术君的头像小技术君
上一篇 2024年4月14日
下一篇 2024年4月14日

相关推荐

  • Go并发可视化解释 – Select语句

    昨天,我发布了一篇文章,用可视化的方式解释了Golang中通道(Channel)的工作原理。如果你对通道的理解仍然存在困难,最好呢请在之前先查看那篇文章。作为一个快速的复习:Par…

    2024年4月5日
    0
  • cdn业务的前景,cdn前景如何

    标题:CDN业务的前景:未来的发展方向与挑战 在当今数字化时代,内容交付网络(CDN)作为一种关键的网络基础设施,正在不断发展和演变,以满足用户对快速、可靠内容传输的需求。CDN业…

    2024年5月11日
    0
  • 云CDN,阿里云cdn

    在当今数字时代,云CDN已然成为网络优化的焦点话题。在这篇文章中,我们将深入探讨云CDN的重要性以及它在解决网站速度和性能问题方面的作用。随着互联网用户数量的不断增长,网站的速度和…

    2024年5月11日
    0
  • 网络协议驱动互联网

    在分布式系统中,数据通过各种网络协议在网络中传输。作为应用程序开发者,这往往在问题出现之前似乎是一个黑盒子。 在本文中,我们将解释常见网络协议的工作原理,它们在分布式系统中的应用以…

    CDN资讯 2024年4月14日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注