【Web】WebHook详解

news2024/9/28 21:27:49

文章目录

    • webhook简介
    • 什么是 webhook?
    • webhook 有什么用?
    • webhook请求过程
    • 使用 webhook
    • Webhook POST 或 GET
    • Webhook 与轮询
    • 何时使用 webhook
    • Asp .Net
      • 接受与处理
        • 接口
        • 处理
      • 发送
    • WebHook和消息队列区别与联系
    • 来源

webhook简介

在当今高度连接的网络世界中,没有什么可以孤立地发挥最佳作用。完成一项任务(几乎)总是需要多个实体的参与。电子商务应用程序需要与支付系统通信,支付系统需要与银行系统通信,银行系统需要与客户账户通信…你看到模式了吗?

独立在线系统相互通信和共享数据的能力是当今在线服务有价值的核心。在这篇文章中,将介绍 webhook。 Webhook 是促进在线服务之间通信的众多方法之一,在本文结束时,您将完全了解 Webhook 是什么、它们如何工作以及何时使用它们。

什么是 webhook?

Webhook 是一个 HTTP 请求,由源系统中的事件触发并发送到目标系统,通常带有数据负载。 Webhook 是自动化的,换句话说,当它们的事件在源系统中被触发时,它们会自动发送出去。

这为一个系统(源)在事件发生时与另一个系统(目标)“对话”(HTTP 请求)提供了一种方式,并共享有关已发生事件的信息(请求有效负载)。
在这里插入图片描述

webhook 有什么用?

根据上面的定义,我相信您已经了解了 webhook 的用途。简而言之,webhook 用于将一个系统中事件的发生传达给另一个系统,并且它们经常共享有关该事件的数据。然而,一个例子总是更容易说明,所以让我们看一个 webhook 的例子。

假设您订阅了流媒体服务。每个月初,您的信用卡都会被扣款,您的银行需要通过短信或电子邮件与您沟通。银行系统(源)可以使用 webhook 调用邮件或 SMS 服务(目标),以便在每次从您的卡中扣款时立即向您发送借记通知。

银行系统还发送有关费用的信息,邮件或 SMS 服务使用这些信息为您的客户构建合适的消息。

webhook请求过程

对于发送 webhook 的系统,系统必须能够支持该过程。您可以通过触发针对不同类型的事件的HTTP请求来构建系统来发送Webhooks和松弛。

这些平台根据其中发生的活动支持不同类型的事件。

要接收 webhook 请求,您必须注册平台为其提供 webhook 的一个或多个事件(也称为主题)。 Webhook 请求将被发送到应用程序的目标端点,因此您需要为其构建一个并将 URL 注册为该事件的 Webhook URL。

一旦事件的 webhook 注册完成并添加了端点,您将在每次事件发生时提供的目标 URL 处收到 webhook 请求。

使用 webhook

现在您已经注册了 webhook 请求,您必须准备好接收它们。 Webhook 是常规的 HTTP 请求,应该这样处理。 webhook 提供程序始终具有有关 webhook URL 端点的实现详细信息的文档,以接收请求并访问有效负载(如果有)。

Webhook 有效负载采用序列化的表单编码 JSON 或 XML 格式。

Webhook 是一种单向通信系统,但最佳实践是返回 200 或 302 状态代码,让源应用程序知道您已收到它。

还建议使您端的 webhook 请求操作具有幂等性,因为某些源应用程序可以多次发送相同的 webhook 请求。在这种情况下,您希望确保您对 webhook 请求的响应不会重复,因为这可能会导致系统受损。有关实现 webhook 幂等性的更多详细信息,请查看这篇文章。

Webhook POST 或 GET

您可能会以 GET 或 POST 请求的形式获取 webhook 请求,具体取决于 webhook 提供程序。 GET webhook 请求很简单,它们的有效负载作为查询字符串附加到 webhook URL。 POST webhook 请求的负载在请求正文中,还可能包含身份验证令牌等属性。

Webhook 与轮询

轮询是指您的应用程序定期调用 API 以检查是否发生事件或是否存在新数据。另一方面,当事件实时发生时,Webhook 会手动将数据推送到您的应用程序。

为了用一个相关的例子来捕捉这两种方法之间的区别,投票就像去邮局检查你是否有新邮件。使用 webhook 基本上是每次您收到新邮件时,只需向邮递员提供您的家庭地址,即可将邮件递送到您家。

与 webhook 相比,轮询更耗费资源,因为它可以在发现新信息之前接受多个网络请求,而 webhook 仅在有新信息时才发出网络请求。

在这里插入图片描述

何时使用 webhook

这里的关键字是实时。当您想要:

  • 实时了解连接系统中的事件
  • 实时发送信息到目的地
  • 寻找比投票更便宜的替代方案

这些类型的场景示例包括:

  • 电子商务商店通知您的发票应用程序有关销售
  • 电子商务商店在特定商品缺货时通知商家
  • 支付网关通知商家付款
  • 版本控制系统通知团队成员提交到存储库
  • 监控系统提醒管理员系统中的错误或异常活动
  • 跨系统同步信息——例如,当用户在您的 HR 或 CRM 系统中更改其电子邮件时,他们在工资单或发票系统中的电子邮件也会更改

Asp .Net

接受与处理

接口

接收 WebHook 取决于发送方是谁。 有时,注册 WebHook 的其他步骤会验证订阅者是否真的正在侦听。 某些 WebHook 提供推送到拉取模型,其中 HTTP POST 请求仅包含对事件信息的引用,然后独立检索该信息。 通常,安全模型会有所不同。

Microsoft ASP.NET WebHook 的目的是使 API 连接起来更简单、更一致,而无需花费大量时间来了解如何处理 WebHook 的任何特定变体。

WebHook 接收方负责接受和验证来自特定发送方的 WebHook。 WebHook 接收器可以支持任意数量的 WebHook,每个 WebHook 都有其自己的配置。 例如,GitHub WebHook 接收器可以接受任意数量的 GitHub 存储库中的 WebHook。

WebHook 接收器 URI

通过安装 Microsoft ASP.NET WebHook,可以获得一个常规 WebHook 控制器,该控制器接受来自开放式服务数量的 WebHook 请求。 请求到达时,它会选取已安装用于处理特定 WebHook 发送方的适当接收方。

此控制器的 URI 是向服务注册的 WebHook URI,格式如下:

https:///api/webhooks/incoming//{id}

出于安全原因,许多 WebHook 接收器要求 URI 是 https URI,在某些情况下,它还必须包含其他查询参数,该参数用于强制只有预期方才能将 WebHook 发送到上述 URI。

组件 是接收方的名称,例如 github 或 slack。

{id} 是一个可选标识符,可用于标识特定的 WebHook 接收器配置。 这可用于向特定接收器注册 N WebHook。 例如,以下三个 URI 可用于注册三个独立的 WebHook:

https:///api/webhooks/incoming/github
https:///api/webhooks/incoming/github/12345
https:///api/webhooks/incoming/github/54321

安装 WebHook 接收器

若要使用 Microsoft ASP.NET WebHook 接收 WebHook,首先为要从中接收 WebHook 的 WebHook 提供程序或提供程序安装 Nuget 包。 Nuget 包名为 Microsoft.AspNet.WebHooks.Receivers.* , 其中最后一部分指示服务受支持。 例如

Microsoft.AspNet.WebHooks.Receivers.GitHub 支持从 GitHub 接收 WebHook 和 Microsoft.AspNet.WebHooks.Receivers.Custom 支持接收由 ASP.NET WebHook 生成的 WebHook。

现可找到对 Dropbox、GitHub、MailChimp、PayPal、Pusher、Salesforce、Slack、Stripe、Trello 和 WordPress 的支持,但可以支持任意数量的其他提供程序。

配置 WebHook 接收器

WebHook 接收器是通过 IWebHookReceiverConfig 接口配置的,可以使用任何依赖项注入模型注册该接口的特定实现。 默认实现使用可在Web.config文件中设置的应用程序设置,或者,如果使用 Azure веб-приложения,可以通过 Azure 门户进行设置。
在这里插入图片描述
应用程序设置密钥的格式如下所示:

 MS_WebHookReceiverSecret_<receiver>

该值是一个以逗号分隔的值列表,这些值与 WebHook 已注册的 {id} 值匹配,例如:

MS_WebHookReceiverSecret_GitHub = <secret1>, 12345=<secret2>, 54321=<secret3>

初始化 WebHook 接收器

WebHook 接收器通过注册它们进行初始化,通常位于 WebApiConfig 静态类中,例如:

namespace WebHookReceivers
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Load receivers
            config.InitializeReceiveGitHubWebHooks();
        }
    }
}

处理

WebHook 接收方验证 WebHook 请求后,即可由用户代码处理。 这是 处理程序 的传入位置。 处理程序派生自 IWebHookHandler 接口,但通常使用 WebHookHandler 类而不是直接从接口派生。

WebHook 请求可由一个或多个处理程序处理。 根据各自的 Order 属性按顺序调用处理程序,其中 Order 是一个简单的整数 (建议介于 1 到 100 之间) :

在这里插入图片描述
处理程序可以选择在 WebHookHandlerContext 上设置 Response 属性,这将导致处理停止,并将响应作为 HTTP 响应发回 WebHook。 在上述情况下,处理程序 C 不会调用,因为它的顺序高于 B 和 B 设置响应。

设置响应通常仅与 WebHook 相关,其中响应可以将信息传回原始 API。 例如,Slack WebHook 将响应发布回 WebHook 来自的通道的情况。 如果处理程序只想从该特定接收器接收 WebHook,则处理程序可以设置 Receiver 属性。 如果未设置接收方,则会为其调用所有接收方。

另一种常见的响应用途是使用 410 已返回 的响应来指示 WebHook 不再处于活动状态,并且不应提交进一步的请求。

默认情况下,所有 WebHook 接收器都将调用处理程序。 但是,如果 Receiver 属性设置为处理程序的名称,则该处理程序将仅接收该接收方的 WebHook 请求。

处理 WebHook

调用处理程序时,它将获取一个 WebHookHandlerContext ,其中包含有关 WebHook 请求的信息。 数据(通常是 HTTP 请求正文)可从 Data 属性获取。

数据类型通常是 JSON 或 HTML 表单数据,但如果需要,可以强制转换为更具体的类型。 例如,ASP.NET WebHook 生成的自定义 WebHook 可以转换为 CustomNotifications 类型,如下所示:

public class MyWebHookHandler : WebHookHandler
{
    public MyWebHookHandler()
    {
        this.Receiver = "custom";
    }

    public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
    {
        CustomNotifications notifications = context.GetDataOrDefault<CustomNotifications>();
        foreach (var notification in notifications.Notifications)
        {
            ...
        }
        return Task.FromResult(true);
    }
}

排队处理

如果响应在几秒钟内未生成响应,则大多数 WebHook 发送方将重新发送 WebHook。 这意味着处理程序必须在该时间段内完成处理,以免再次调用它。

如果处理需要更长的时间或更好地单独处理,则可以使用 WebHookQueueHandler 将 WebHook 请求提交到队列,例如 Azure 存储队列。

此处提供了 WebHookQueueHandler 实现的概述:

public class QueueHandler : WebHookQueueHandler
{
    public override Task EnqueueAsync(WebHookQueueContext context)
    {

        // Enqueue WebHookQueueContext to your queuing system of choice

        return Task.FromResult(true);
    }
}

发送

翻译搬移

WebHook和消息队列区别与联系

来源

Webhook 解释:什么是 Webhook 以及它们如何工作?
ASP.NET WebHook 接收器
ASP.NET WebHook 处理程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3二维码(QRCode)

可自定义设置以下属性&#xff1a; 扫描后的文本或地址&#xff08;value&#xff09;&#xff0c;类型&#xff1a;string&#xff0c;默认 二维码大小&#xff08;size&#xff09;&#xff0c;类型&#xff1a;number&#xff0c;单位px&#xff0c;默认 160 二维码颜色&…

nginx 部署vue项目,路由模式为history时,页面刷新404问题

目录 情况说明本案例解决方法配置解释为什么会出现404的情况root 和 alias 的区别try_files 配置的作用 友情提示 情况说明 nginx部署vue项目&#xff0c;文件放在html下的dist文件夹中 nginx.conf 文件中&#xff0c;server 里配置文件的位置、请求跨域等信息 本案例解决方…

Ubuntu Linux操作

引言 晚上上课发现桌子上遗留了这本书&#xff0c;水课就看了看学习下&#xff0c;以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…

制作真人手办有哪些不便?怎么解决?

相信很多朋友都喜欢拍摄写真&#xff0c;比如孩子生日的时候&#xff0c;结婚纪念的时候&#xff0c;写真照片能留存住很多美好的记忆。 不过随着科技的发展&#xff0c;大家已经不能满足只靠照片来记录生活了&#xff0c;越来越多的人开始盯上了手办这件物品。将真人的照片和…

4.5 创建透视表与交叉表

4.5 创建透视表与交叉表 4.5.1利用pivot_table函数可以实现透视表pivot_table函数的常用参数及其说明 4.5.2 使用crosstab函数创建交叉表crosstab函数的常用参数及其说明 4.5.3 任务实现数据完整代码 数据透视表&#xff08;Pivot Table&#xff09;是数据分析中一种常用的工具…

018 - C++ 类和结构体中的静态(static)

上一期我们讨论了 C 中的 static 关键字以及它在类或结构体之外的意义。本期我们讨论 static 在一个类或一个结构体中的具体情况。 先了解这些 在几乎所有面向对象的语言中&#xff0c;静态在一个类中意味着特定的东西。这意味着在类的所有实例中&#xff0c;这个变量只有一个…

【c#串口通信从小白到大神(5)】如何打开串口

1、新建一个winform程序 这里以visual studio 2019 社区版为例,关于visual studio 2019 社区版的下载链接请点击这里:如何下载安装visual studio 2019 社区版 第1步、打开visual studio 2019 ,出现下图: 第2步、点击“创建新项目”,如下图: 第3步、选择 “Windows 窗…

深眸科技围绕机器视觉技术,加速实现制造行业生产线智能化升级

工业4.0时代&#xff0c;是以智能制造为代表的第四次工业革命时代。随着人工智能的高速发展&#xff0c;机器视觉作为当前制造业质量控制领域的重要技术之一&#xff0c;在各行各业的应用逐渐广泛&#xff0c;其行业市场需求进一步飙升。据GGII预测&#xff0c;预计2025年&…

openEuler实验-使用Shell脚本实现局域网MAC地址收集和FTP服务监控

linux的简单运用 目录 前言 1. 实验目的 2. 实验内容 3. 实验知识点 4. 实验时长 5. 实验环境 实验分析 部署FTP服务器 1&#xff09;安装FTP服务 2&#xff09;查看FTP服务 3&#xff09;启动FTP服务 4&#xff09;关闭FTP服务 收集MAC地址 1&#xff09;修改主…

C++17字符流以及C++11文件流以及IO流

getline() 有时候我们希望在最终的字符串中保留输入时的空白符&#xff0c;这时候应该用getline函数来替代原来的>>运算符。&#xff08; cin 不能输入包含嵌入空格的字符串&#xff09;。 getline()函数的参数是一个输入流和一个string对象&#xff0c;原型是&#xf…

threejs的使用

threejs介绍&#xff1a; Three.js是一款基于WebGL的JavaScript 3D库&#xff0c;用于创建和渲染3D图形场景。它提供了一个简单易用的接口&#xff0c;让开发者可以通过JavaScript代码创建出高度交互性和可视化的3D场景。Three.js提供了很多可用的3D对象和材质&#xff0c;例如…

C++ -2- 类和对象(上)| 什么是类

​ 文章目录 1.面向过程与面向对象2.类的引入3.类的定义两种定义方式 4.类的访问限定符5.类的作用域6.类的示例化7.类的对象大小计算8.类成员函数的this指针C语言和C的对比(this指针)空指针的问题 C语言和C实现Stack对比 1.面向过程与面向对象 C&#xff1a;面向过程&#xf…

java获取请求ip的方法

在上篇文章中我们介绍了 java获取请求 ip的方法&#xff0c;那么这篇文章我们就来详细讲解下获取请求 ip的方法。获取请求 ip的方法是基于 HTTP协议的&#xff0c;其原理如下&#xff1a; 1、用 web应用程序&#xff0c;将 web服务器端与客户端通过 HTTP协议通信。 2、客户端发…

LNMP架构和论坛搭建以及一键部署

数据流向 一、Nginx服务安装 1、关闭防火墙 [rootking ~]# systemctl stop firewalld [rootking ~]# systemctl disable firewalld [rootking ~]# setenforce 0 2、将所需软件包拖入/opt目录下 3、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 4、创建运…

Feign快速入门

文章目录 一、Feign1.1 Feign介绍1.2 Feign的使用步骤1.3 Feign的自定义配置1.3.1 配置方法 1.4 Feign的优化 一、Feign 1.1 Feign介绍 Feign是一个Java HTTP客户端&#xff0c;它使开发人员可以轻松地与RESTful API进行交互。Feign使用注释来描述REST API&#xff0c;它还支持…

Springboot整合Junit5

1 SpringBoot整合Junit &#xff08;一&#xff09;junit5 介绍 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架&#xff0c;JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。 JUnit 5 JUnit Platfo…

音视频开发十九:SDL线程和事件

SDL事件相关API DL_Event 是SDL库中使用的一个数据结构&#xff0c;用于表示系统中发生的事件。一个事件可以是键盘按键、鼠标移动、游戏手柄移动、窗口事件等。SDL_Event 结构包含有关事件类型、事件发生时间和事件参数的详细信息。 SDL_Event 结构具有以下成员&#xff1a;…

[5 种有效方法] 适用于 Android 的通用解锁图案/密码

在当今世界&#xff0c;保护您的密码对于您的文件和数据的安全至关重要&#xff0c;尤其是在第三方应用程序盛行的情况下。为这些应用程序注册帐户不是问题&#xff0c;就像记住它们一样。但是&#xff0c;如果您不知何故忘记了手机密码&#xff0c;您仍然可以在不丢失宝贵数据…

突破规模化运维瓶颈 SREWorks云原生数智运维平台揭秘

作者&#xff1a; 钟炯恩——阿里云大数据基础工程技术团队运维专家 引言 突破规模化运维瓶颈是诸多IT规模增长的企业及组织当前遇到的比较棘手的问题。面对这些问题&#xff0c;多数人的第一反应是上云。但是上云之后我们会发现&#xff0c;即使云上的架构规模增大&#xf…

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统&#xff08;DNS&#xff09;是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统&#xff0c;它将各种信息与分配给每个参与实体的域名相关联&#xff0c;它基…