【发布时间】:2018-08-19 02:51:33
【问题描述】:
我最近遇到了Webhook 一词(在 Azure 警报、Github 部署等中)。为了理解 API 和 Webhook 之间的区别,我阅读了 stackexchange 和 sendgrid 中的解释。我的理解是,不同之处在于调用 API 的方式。但这听起来令人困惑。我认为任何 API 都会跟随,
- 可以接受一些输入
- 执行一些操作
- 回复来电者
如果上述情况属实,则无需根据调用方式对 API 进行分类。至少,从编码的角度来看这是正确的,因为只要调用并获取输入(如果需要),API 无论如何都会工作。
只是为了用一个例子来解释我对这些术语的理解,Azure 当前提供(在撰写本问题时处于预览模式)在设置警报时创建操作组。支持的两种警报类型是 Azure 函数和 Webhook。我可以创建一个Http Trigger Azure 函数并在两个警报中使用它,其中第一个是 Azure 函数类型,第二个是 Webhook 类型。令我惊讶的是,即使我使用的是 Http Trigger Azure 函数,Webhook 类型的 Alert 仍然有效(请注意,Azure 也提供了用于创建 Webhook Azure 函数的模板)。下面给出的是我为设置警报的 Webhook (actual link to code with instructions) 而编写的 Http Trigger 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 时,编码方式或思维过程有什么不同吗?
【问题讨论】:
-
我认为 webhook 和 http 触发器之间应该没有区别。 webhook 是一个http触发器
-
@4c74356b41 但是,azure 提供了两个不同的模板,称为“Http Trigger”和“Generic Webhook”来创建函数。所以,我假设 API 和 Webhook 有不同的编码模式。
标签: azure asp.net-web-api webhooks