在 Azure 逻辑应用中接收和响应入站 HTTPS 请求

借助 Azure 逻辑应用和内置的请求触发器和响应操作,可以创建可通过 HTTPS 接收入站请求的自动化任务和工作流。 若要改为发送出站请求,请使用内置 HTTP 触发器或 HTTP 操作

例如,使用逻辑应用,你可以完成以下操作:

  • 接收并响应对本地数据库中数据的 HTTPS 请求。

  • 发生外部 Webhook 事件时触发工作流。

  • 接收来自其他逻辑应用的 HTTPS 调用并对其作出响应。

本文介绍如何使用请求触发器和响应操作,以便逻辑应用可以接收和响应入站调用。

有关逻辑应用入站调用(例如传输层安全性 (TLS) [以前称为安全套接字层 (SSL)] 和 Azure Active Directory 开放式身份验证 (Azure AD OAuth))的安全性、授权和加密的详细信息,以及使用 Azure API 管理来公开逻辑应用,或限制发起入站调用的 IP 地址的详细信息,请参阅保护访问和数据 - 对基于请求的触发器的入站调用的访问

注意

在以请求触发器(但不是 Webhook 触发器)开始的标准逻辑应用工作流中,可使用 Azure Functions 预配,通过托管标识对发送到由该触发器创建的终结点的入站调用进行身份验证。 此预配也称为“简易身份验证”。 有关详细信息,请查看使用简易身份验证在标准逻辑应用中触发工作流

先决条件

添加请求触发器

此内置触发器创建可手动调用的终结点,该终结点只能处理 HTTPS 上的入站请求。 当调用方将请求发送到此终结点时,请求触发器会激发并运行逻辑应用。 有关如何调用此触发器的详细信息,请参阅在 Azure 逻辑应用中使用 HTTPS 终结点调用、触发或嵌套工作流

逻辑应用仅在有限的时间内使入站请求保持打开状态。 假设逻辑应用包含响应操作,如果逻辑应用在此时间之后未向调用方发回响应,则逻辑应用会将 504 GATEWAY TIMEOUT 状态返回给调用方。 如果逻辑应用不包含“响应”操作,则逻辑应用会立即向调用方返回 202 ACCEPTED 状态。

  1. 登录到 Azure 门户。 创建空白逻辑应用。

  2. 逻辑应用设计器打开后,在搜索框中,输入 http request 作为筛选器。 从触发器列表中选择“当收到 HTTP 请求时”触发器。

    Select Request trigger

    请求触发器显示以下属性:

    Request trigger

    属性名称 JSON 属性名称 必须 说明
    HTTP POST URL {无} 保存逻辑应用后生成的终结点 URL,用于调用逻辑应用
    请求正文 JSON 架构 schema 描述传入请求正文中的属性和值的 JSON 架构
  3. 在“请求正文 JSON 架构”框中,有选择性地输入一个用于描述传入请求中的正文的 JSON 架构,例如:

    Example JSON schema

    设计器将使用此架构为请求中的属性生成标记。 这样,逻辑应用就可以通过触发器分析、使用请求中的数据并将其传递到工作流。

    下面是示例架构:

    {
      "type": "object",
      "properties": {
         "account": {
            "type": "object",
            "properties": {
               "name": {
                  "type": "string"
               },
               "ID": {
                  "type": "string"
               },
               "address": {
                  "type": "object",
                  "properties": {
                     "number": {
                        "type": "string"
                     },
                     "street": {
                        "type": "string"
                     },
                     "city": {
                        "type": "string"
                     },
                     "state": {
                        "type": "string"
                     },
                     "country": {
                        "type": "string"
                     },
                     "postalCode": {
                        "type": "string"
                     }
                  }
               }
            }
         }
      }
    }
    

    输入 JSON 架构时,设计器将提醒你在请求中包含 Content-Type 标头,并将该标头值设置为 application/json。 有关详细信息,请参阅处理内容类型

    Reminder to include

    下面是此标头的 JSON 格式外观:

    {
      "Content-Type": "application/json"
    }
    

    若要生成基于预期有效负载(数据)的 JSON 架构,可以使用 JSONSchema.net 之类的工具,也可以执行以下步骤:

    1. 在请求触发器中,选择“使用示例有效负载生成架构”。

      Screenshot with

    2. 输入示例有效负载,然后选择“完成”。

      Enter sample payload to generate schema

      下面是示例有效负载:

      {
       "account": {
          "name": "Contoso",
          "ID": "12345",
          "address": { 
             "number": "1234",
             "street": "Anywhere Street",
             "city": "AnyTown",
             "state": "AnyState",
             "country": "USA",
             "postalCode": "11111"
          }
       }
      }
      
  4. 若要检查入站调用是否具有与指定架构匹配的请求正文,请执行以下步骤:

    1. 要强制入站消息具有与架构描述的完全相同的字段,请在架构中添加 required 属性并指定必填字段。 添加 addtionalProperties 并将值设置为 false

      例如,以下架构指定入站消息必须具有 msg 字段(而不是任何其他字段):

      {
       "properties": {
         "msg": {
            "type": "string"
         }
       },
       "type": "object",
       "required": ["msg"],
       "additionalProperties": false
      }
      
    2. 在请求触发器的标题栏中,选择省略号按钮 ( ... )。

    3. 在触发器的设置中,开启“架构验证”,然后选择“完成”。

      如果入站调用的请求正文与架构不匹配,则触发器会返回“HTTP 400 Bad Request”错误。

  5. 若要添加其他属性,请打开“添加新参数”列表,并选择要添加的参数。

    属性名称 JSON 属性名称 必须 说明
    方法 method 传入的请求在调用逻辑应用时必须使用的方法
    相对路径 relativePath 逻辑应用终结点 URL 可接受的参数的相对路径

    本示例添加了 Method 属性:

    Add Method parameter

    Method 属性显示在触发器中,使你可以从列表中选择方法。

    Select method

  6. 现在,添加另一个操作作为工作流中的下一步骤。 在触发器下,选择“下一步骤”,以便可以找到要添加的操作。

    例如,可以通过添加响应操作来响应请求,该响应操作可用于返回自定义响应,本主题后面部分将介绍此相关内容。

    逻辑应用仅在有限的时间内使传入请求保持打开状态。 假设逻辑应用工作流包含响应操作,如果该逻辑应用在此时间之后没有返回响应,则逻辑应用会将 504 GATEWAY TIMEOUT 返回给调用方。 否则,如果逻辑应用不包含响应操作,则逻辑应用会立即将 202 ACCEPTED 响应返回给调用方。

  7. 完成后,保存逻辑应用。 在设计器工具栏上选择“保存”。

    此步骤生成一个 URL,用于发送触发逻辑应用的请求。 若要复制此 URL,请选择 URL 旁边的复制图标。

    URL to use triggering your logic app

    注意

    若要在调用请求触发器时在 URI 中包含哈希符号或井号(#),请改用此编码版本:%25%23

  8. 若要测试逻辑应用,请将 HTTP 请求发送到生成的 URL。

    例如,可以使用 Postman 之类的工具来发送 HTTP 请求。 有关触发器的基础 JSON 定义以及如何调用此触发器的详细信息,请参阅以下主题:请求触发器类型通过 Azure 逻辑应用中的 HTTP 终结点调用、触发或嵌套工作流

有关逻辑应用入站调用(例如传输层安全性 (TLS) [以前称为安全套接字层 (SSL)] 和 Azure Active Directory 开放式身份验证 (Azure AD OAuth))的安全性、授权和加密的详细信息,以及使用 Azure API 管理来公开逻辑应用,或限制发起入站调用的 IP 地址的详细信息,请参阅保护访问和数据 - 对基于请求的触发器的入站调用的访问

触发器输出

下面是有关“请求”触发器的输出的详细信息:

JSON 属性名称 数据类型 说明
headers 对象 描述请求中的标头的 JSON 对象
body 对象 描述请求中的正文内容的 JSON 对象

添加响应操作

使用请求触发器处理入站请求时,可以使用内置响应操作对响应进行建模并将有效负载结果发送回调用方。 只能将响应操作与请求触发器配合使用。 这种与请求触发器和响应操作的结合会创建请求-响应模式。 除了 Foreach 循环和循环内以及并行分支以外,可以在工作流中的任意位置添加响应操作。

重要

如果响应操作包含这些标头,则逻辑应用会从生成的响应消息中删除这些标头,且不显示任何警告或错误:

  • Allow
  • Content-* 标头(使用 POST 和 PUT 操作时的 Content-DispositionContent-EncodingContent-Type 除外),但 GET 操作不包括这些标头
  • Cookie
  • Expires
  • Last-Modified
  • Set-Cookie
  • Transfer-Encoding

尽管逻辑应用不会阻止保存具有这些标头的响应操作的逻辑应用,但逻辑应用会忽略这些标头。

  1. 在逻辑应用设计器中,在要添加响应操作的步骤下,选择“新步骤”。

    例如,使用前面所述的“请求”触发器:

    Add new step

    若要在步骤之间添加操作,请将鼠标指针移到这些步骤之间的箭头上。 选择出现的加号 (+),然后选择“添加操作”。

  2. 在“选择操作”下的搜索框中,输入 response 作为筛选器,然后选择“响应”操作。

    Select the Response action

    为简明起见,本示例中“请求”触发器已折叠。

  3. 添加响应消息所需的任何值。

    单击某些字段中的框会打开动态内容列表。 然后,可以从工作流中的前面步骤选择表示可用输出的标记。 在上述示例中指定的架构内的属性现在会显示在动态内容列表中。

    例如,对于“标头”框,请包含 Content-Type 作为键名称,并将键值设置为 application/json,如本主题前面所述。 对于“正文”框,可以从动态内容列表中选择触发器正文输出。

    Response action details

    若要查看 JSON 格式的标头,请选择“切换到文本视图”。

    Headers - Switch to text view

    下面是有关可在“响应”操作中设置的属性的详细信息。

    属性名称 JSON 属性名称 必须 说明
    状态代码 statusCode 要在响应中返回的状态代码
    标头 headers 一个 JSON 对象,描述要包含在响应中的一个或多个标头
    正文 body 响应正文
  4. 若要添加其他属性,例如响应正文的 JSON 架构,请打开“添加新参数”列表,并选择要添加的参数。

  5. 完成后,保存逻辑应用。 在设计器工具栏上选择“保存”。

    重要

    如果在包含分支的复杂工作流中有一个或多个响应操作,请确保工作流运行在运行时处理至少一个响应操作。 否则,如果跳过所有响应操作,调用方将收到“502 错误的网关”错误,即使工作流成功完成也是如此。

后续步骤