我最近遇到过Webhook
一词(在Azure警报,Github部署等中)。为了理解API和Webhook之间的区别,我阅读了stackexchange和sendgrid中的说明。我的理解是,区别在于API的调用方式。但这听起来令人困惑。我认为任何API都会效仿,
如果上述内容是正确的,则无需根据API的调用方式对它们进行分类。至少,从编码角度来看,这是正确的,因为只要调用API并获取输入(如果需要),API就会一直起作用。
仅通过示例来说明我对这些术语的理解,Azure当前提供(在编写此问题时以预览模式)在设置警报时创建操作组。支持的两种警报类型是Azure Function和Webhook。我可以创建一个Http Trigger
Azure函数并将其用于两个Alerts中,其中第一个是Azure Function类型,第二个是Webhook类型。令我惊讶的是,即使我使用的是Http Trigger
Azure函数(请注意,Azure也提供了用于创建Webhook
Azure函数的模板),Webhook类型的Alert仍然有效。下面给出的是我编写的用于设置警报Webhook(actual link to code with instructions)的Http触发器Azure函数。
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public async static Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, ICollector<string> outputQueueItem)
{
log.Info("C# HTTP trigger function processed a request.");
string jsonContent = await req.Content.ReadAsStringAsync();
JToken activityLog = JObject.Parse(jsonContent.ToString())
.SelectToken("data.context.activityLog");
//captures the details of the resource group being modified
log.Info(string.Format("Resource group '{0}' was {1} on {2}.",
(string)activityLog["resourceGroupName"],
((string)activityLog["subStatus"]).ToLower(),
(DateTime)activityLog["eventTimestamp"]));
return req.CreateResponse(HttpStatusCode.OK);
}
至少在Azure示例中,Webhook Azure函数看起来没有什么特别之处,否则Webhook类型Alert不能与Http Trigger Azure函数一起使用。因此,当您使用WebAPI
编写REST API和Webhook时,编码或思考过程的方式是否有所不同?
答案 0 :(得分:1)
从功能上讲,没有真正的区别,但它们是不同的。
作者使用API定义给定端点的规范(受众,协议,动词,自变量等),而使用Web Hook时,则由第三方指定。
保持差异非常重要,因为这将帮助您或其他开发人员了解功能的使用方式,对于Web Hook,如果解决方案的目标使用者将影响解决方案的哪些部分更改其规格。
答案 1 :(得分:0)
在对Azure HTTP触发器和“通用Web挂钩”功能进行了比较之后,我发现没有区别,只是在两种构造中都提供了Web挂钩模式并且可以互换使用,其中Web挂钩模式需要API键,而在HTTP触发器结构上是可选键。
“通用JSON”选项可让您决定Web挂钩的外观,与第三方提供商(如Git或Slack)不同。