从程序员的角度来看,API和Webhook之间的区别

时间:2018-07-28 08:45:37

标签: azure asp.net-web-api webhooks

我最近遇到过Webhook一词(在Azure警报,Github部署等中)。为了理解API和Webhook之间的区别,我阅读了stackexchangesendgrid中的说明。我的理解是,区别在于API的调用方式。但这听起来令人困惑。我认为任何API都会效仿,

  1. 可以接受一些输入
  2. 执行一些操作
  3. 回复来电者

如果上述内容是正确的,则无需根据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时,编码或思考过程的方式是否有所不同?

2 个答案:

答案 0 :(得分:1)

从功能上讲,没有真正的区别,但它们是不同的

作者使用API​​定义给定端点的规范(受众,协议,动词,自变量等),而使用Web Hook时,则由第三方指定。

保持差异非常重要,因为这将帮助您或其他开发人员了解功能的使用方式,对于Web Hook,如果解决方案的目标使用者将影响解决方案的哪些部分更改其规格。

答案 1 :(得分:0)

在对Azure HTTP触发器和“通用Web挂钩”功能进行了比较之后,我发现没有区别,只是在两种构造中都提供了Web挂钩模式并且可以互换使用,其中Web挂钩模式需要API键,而在HTTP触发器结构上是可选键。

“通用JSON”选项可让您决定Web挂钩的外观,与第三方提供商(如Git或Slack)不同。