Skip to main content

创建 HTTP 任务

在执行规划的过程中,您可以创建一个任务以将 HTTP 请求发送到第三方应用程序端点。例如,当前面的任务成功执行时,您可以将包含该任务信息的 HTTP 消息发送到指定的端点。

  • HTTP 任务 Alteryx Analytics Cloud (AAC) 与另一个应用程序之间的请求。这些请求通过 HTTP 传送,并且可以由接收应用程序进行解释以执行操作。

    注意

    您的接收应用程序可能要求您将平台的主机和端口号或 IP 地址列入白名单。请参阅您的应用程序的文档。

  • HTTP 任务是可用于规划的任务类型之一。如需了解详情,请参阅 规划视图页面

限制

  • 不能使用自定义安全证书。

  • 基于 HTTP 的请求具有 30 秒的超时限制。

  • For the Input Dataset, the limit to the size is 1GB.

先决条件

对接收应用程序的要求

要将 HTTP 请求发送到目标应用程序,必须对应用程序进行配置以接收请求:

  • 必须启用来自应用程序域外部的请求。

    注意

    您的接收应用程序可能要求您将平台的主机和端口号或 IP 地址列入白名单。请参阅您的应用程序的文档。

  • 您必须获取要向其发送 HTTP 请求的端点的 URL。

  • 您必须获取任何必须随每个 HTTP 请求插入的 HTTP 标头。

  • 如果必须对请求进行签名,则需要进行额外的配置。详情如下。

创建任务

  1. 将 HTTP 任务从左侧窗格拖放到规划画布。

  2. 在右侧面板中,选择 HTTP 任务 。此时将显示 HTTP 任务面板。

Plans_HTTP_Task.png

图:HTTP 任务

配置任务

  1. 设置所需的参数。如需详细了解参数,请参阅 HTTP 任务在规划中的视图

  2. 您可以在请求的标头值和请求正文中指定规划元数据信息。如需了解详情,请参阅 有关规划元数据的参考文献

  3. 要测试连接,请单击 测试 。此时将显示一条成功消息。

    提示

    状态代码 200 表示测试成功。

    提示

    您可以使用 GET 方法进行测试。GET 请求不会更改目标平台上的任何数据,但可能允许您在请求正文中指定元素。

  4. 要添加任务,请单击 保存

重命名任务

要重命名任务,请在右侧面板中单击 更多菜单 > 编辑

提示

良好的命名可能包括目标平台端点和方法,以及规划中任务的目的。

删除任务

要删除任务,请单击 更多菜单 > 删除 。确认您要删除任务。

警告

此步骤无法撤消。

有关规划元数据的参考文献

在其他任务的消息中,您可以参考有关规划、规划任务及规划执行的元数据。如需了解详情,请参阅 有关规划元数据的参考wen'xian

示例

Slack 频道消息

提示

Slack 任务现已成为受支持的产品功能。如需了解详情,请参阅 创建 Slack 任务

您可以创建 HTTP 任务,将短信传递到您选择的 Slack 频道。

先决条件

设置 Slack 安装以接收 HTTP 消息:

  1. 如果需要,请创建 Slack 频道以接收您的消息。

  2. 创建应用程序。

  3. 为您的应用程序激活传入的 HTTP 消息。

  4. 指定用于接收传入消息的频道。

  5. 从 cURL 语句中复制传入 HTTP 请求的 URL。

定义 HTTP 任务

参数

描述

名称

此名称仅显示在 AAC 中。

方法

选择 POST 方法。

URL

粘贴您从 Slack 复制的 URL。

标头信息

从 Slack cURL 命令复制内容标头:

key: Content-Type
value: application/json

正文

{"text":"Your job has completed."}
验证
  1. 单击 测试 以验证此任务是否有效。

  2. 运行作业并检查 Slack 频道中是否有消息。

有关规划元数据的示例

您可以引用规划定义和当前规划运行作业的元数据信息作为 HTTP 任务请求的一部分。

注释:

  • 您只能为 HTTP 任务开始前已经在规划运行作业中发生的任务插入元数据引用。

  • 使用两个字母的代码引用当前运行作业中的每个任务。示例:

    {{$http_xx.name}}
    
语法

使用以下语法构建有关规划元数据的引用。在相应的文本框中,输入以下值之一:

提示

首先输入 $ ,这将提供对每种元数据引用类型的元数据引用菜单树的访问权限。最后的语法如上所述。

规划:

规划定义或当前规划运行作业的元数据信息:

{{$plan
规划信息

以下请求正文包含对规划名称、规划运行标识符和刚刚执行的流的引用:

{"text":"Plan: {{$plan.name}} 
RunId: {{$plan.runId}}
Flow: {{$flow_7p.name}}
Success."}
规划运行信息

以下请求正文包含使用时间戳的规划执行信息:

{"text":"Plan: {{$plan.name}} 
RunId: {{$plan.runId}}
- plan start: {{$plan.startTime}}
Running time: {{$plan.duration}}

Times:
- last task start: {{$flow_7p.startTime}}
- last task end: {{$flow_7p.endTime}}
"}
HTTP 任务信息

您可以引用已发生的 HTTP 任务的信息:

{"text":"{{$http_qg.name}} returned {{$http_qg.statusCode}}."} 

如需了解详情,请参阅 有关规划元数据的参考文献

将元数据输入提供给云函数

此示例演示如何使用 HTTP 任务将规划元数据传递到 AWS Lambda 函数。类似的方法可用于 Google Cloud Functions 函数。

在这种情况下,流任务执行的 rowCount 值通过 HTTP 任务传递到 AWS Lambda 函数。

一般步骤:

  1. 定义您的规划。

  2. 流任务:运行流以生成 Lambda 函数所需的输出。

  3. HTTP 任务:生成 HTTP 请求,其正文包含对 rowCount 元数据变量的参考文献。请求正文:

    {
     "rowCount": "{{$flow_7p['My Flow Name'].output['My output name'].rowCount}}"
    }
  4. AWS Lambda 函数: 以下是 Lambda 的伪代码:

    import json
    def lambda_handler(event, context):
      httpTaskBody = json.loads(event["body"])
      rowCount = httpTaskBody["rowCount"]
    
      return {
        'statusCode': 200,
        'body': json.dumps(rowCount)
      }
  5. Google Cloud Functions 函数: 以下是 Google Cloud Functions 函数的伪代码:

    def get_row_count(request):
      request_json = request.get_json()
      if request_json and 'rowCount' in request_json:
            rowCount = request_json['rowCount']
        return rowCount
      return 'No rowCount attribute provided'

Create a dataset with API response for Designer Cloud workflow

Use the HTTP task in Plans to read and produce datasets with API call response that can be used naturally in the Designer Cloud workflow.

Define the HTTP task

Parameter

Description

Name

This name only appears in AACAAC.

Method

Mandatory field. Select the POST or GET method.

URL

Mandatory field. URL where the HTTP request is received by the other application. Example: https://example.com/${id}

Headers

HTTP content headers as key-value pairs in a JSON format.

{
  "X-Custom-Header": "value",
  "X-Parametrized-Header": "${wf1.id}"
}

Body

The body of the request submitted to the receiving application. Can contain ${variables}.

{"text":"My text message to the receiving application."}

General steps:

  1. Create a workflow with your input.

  2. Create and run a Plan with an HTTP task to generate a dataset.

    Make sure to deselect the Delete dataset with API call response check box, setting the task to keep the dataset.

  3. In Designer Cloud, use the dataset generated in the previous step to create a workflow starting with the API response.

    By selecting the Load Configuration from Dataset checkbox, you are able to load a configuration (with all parameters) from the output dataset of the upstream workflow task.

  4. In Plan, add the workflow as a downstream task for an already existing HTTP task. Modify the Plan to use the HTTP task output (specified in Step 1) as Designer Cloud workflow input.

  5. You can schedule the Plan now. This setup makes an API call, the response is passed to the Designer Cloud workflow and executed. The final output is available as usual.

验证签名

警告

实现签名验证可能需要开发人员技能,具体取决于目标应用程序。

或者,您可以配置平台来对 HTTP 请求进行签名。签名的请求保证请求是从平台发送,而不是从第三方发送。

下面,您可以查看签名的创建方式,以便配置接收应用程序以正确处理签名及其相关请求。

签名标头

通过在 HTTP 请求中插入 X-Webhook-Signature 标头对 HTTP 请求进行签名。这些签名采用以下格式:

X-Webhook-Signature: t=<timestamp>,sha256=<signature>

其中:

  • <timestamp> - 发送签名时的时间戳。值以 UNIX 时间表示。

  • <signature> - SHA256 签名。该平台使用基于哈希的消息身份验证代码 (HMAC) 和 SHA-256 生成此签名。

下面提供了有关这些值的更多信息。

示例:

X-Webhook-Signature: t=1568818215724,sha256=55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a

检查应用程序工具

根据应用程序的不同,您可能需要完成以下一组任务来验证任务签名:

注意

您可能需要将应用程序中的平台列入白名单。如需了解详情,请参阅应用程序文档。

您可能需要为您的应用程序创建一些自定义编码。您可以查看以下内容,详细了解如何执行此操作,包括 JavaScript 示例。

处理签名的请求

时间戳

时间戳值 ( t=<timestamp> ) 出现在标头值的开头,以防止重放攻击(即攻击者可以截获有效负载及其签名并重新传输)。

  • 为了避免此类攻击,时间戳包含在签名标头中,并且还作为签名有效负载的一部分嵌入。

  • 由于时间戳是已签名有效负载的一部分,因此攻击者无法在不使签名失效的情况下更改时间戳值。

    • 如果签名有效但时间戳太旧,您可以选择拒绝该请求。

    • 例如,如果您收到一个时间戳与一小时前的日期相对应的请求,可能应该拒绝该请求。

  • 如需详细了解重放攻击,请参阅 https://en.wikipedia.org/wiki/Replay_attack

签名

任务签名将以下内容纳入其哈希值:

  • 密钥(在上面输入)

  • 时间戳值

  • 请求数据:

    • (POST/PUT/PATCH) - 请求的正文

    • (GET/DELETE) - 请求的 URL

步骤 1 - 提取时间戳和签名

拆分 X-Webhook-Signature 标头:

  1. 使用 , 字符作为分隔符来拆分值。

  2. 使用 = 字符拆分每个部分。

  3. 提取时间戳和签名的值。从上述示例中:

    1. 时间戳: 1568818215724

    2. 签名: 55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a

步骤 2 - 创建预期签名

在接收应用程序中,您可以重新计算签名,以验证请求是否通过平台发送。

  1. 将时间戳、点字符 . 以及请求正文(POST/PUT/PATCH 方法)或 URL(GET/DELETE 方法)串联起来。

  2. 假设上述示例是 POST 请求的签名,而请求正文是 test 。串联的值如下所示:

    1568818215724.test
  3. 您现在可以在接收应用程序中计算 HMAC 身份验证代码。在以下 JavaScript 示例中,密钥值为 mySecret

    const crypto = require('crypto');
    
    const message = '1568818215724.test'; // as defined above
    
    const hmac = crypto.createHmac('sha256', 'mySecret');
    hmac.update(message)
    const expectedSignature = hmac.digest('hex');
步骤 3 - 比较签名

应该将您的代码返回的值与作为签名包含在 X-Webhook-Signature 标头中的值进行比较:

  • 如果这些值不匹配,则拒绝该请求。

  • 如果这些值匹配,则计算当前时间戳与标头中的时间戳之间的差值。如果差值超出允许的限制,则拒绝该请求。

  • 否则,在您的应用程序中正常处理该请求。