HTTP 任务
在执行规划的过程中,您可以创建一个任务以将 HTTP 请求发送到第三方应用程序端点。例如,当前面的任务成功执行时,您可以将包含该任务信息的 HTTP 消息发送到指定的端点。
在规划视图中,您可以创建 HTTP 任务,以便在其他任务执行之前或之后向端点发送请求。此外,您还可以使用 HTTP 任务通过 API 调用响应生成数据集,并在 Designer Cloud 工作流中使用。这些任务在右侧的上下文面板中指定。
HTTP 任务是 Alteryx One Platform 与另一个应用程序之间的请求。这些请求通过 HTTP 传送,并且可以由接收应用程序进行解释以执行操作。
注意
您的接收应用程序可能要求您将平台的主机和端口号或 IP 地址列入白名单。请参阅您的应用程序的文档。
HTTP 任务是可用于规划的任务类型之一。如需了解详情,请参阅规划视图页面。
限制
对于输入数据集(从数据集加载配置):
行:10,000
文件大小:1 GB
行大小:100 MB
基于 HTTP 的请求具有 30 秒的超时限制。
不能使用自定义安全证书。
先决条件
对接收应用程序的要求
要将 HTTP 请求发送到目标应用程序,必须对应用程序进行配置以接收请求:
必须启用来自应用程序域外部的请求。
注意
您的接收应用程序可能要求您将平台的主机和端口号或 IP 地址列入白名单。请参阅您的应用程序的文档。
您必须获取要向其发送 HTTP 请求的端点的 URL。
您必须获取任何必须随每个 HTTP 请求插入的 HTTP 标头。
如果必须对请求进行签名,则需要进行额外的配置。详情如下。
创建任务
将 HTTP 任务从左侧窗格拖放到规划画布。
在右侧面板中,选择 HTTP 任务。此时将显示 HTTP 任务面板。

图:HTTP 任务
字段 | 描述 |
|---|---|
方法 | 选择用于传递消息的 HTTP 方法。合适的方法取决于接收应用程序。大多数使用场景需要使用 |
URL | 其他应用程序接收 HTTP 请求的 URL。 |
标头信息 | 插入 HTTP 内容标头作为键值对。例如,如果您的正文格式为 JSON,则应包含以下标头: key: Content-Type value: application/json 注意 您可能需要提交身份验证令牌作为 |
正文 | (仅适用于 {"text":"My text message to the receiving application."}提示 作为请求正文或标头字段的一部分,您可以插入对规划定义、当前运行、运行中已执行任务以及列数据和数据源的元数据引用。有关可用元数据的更多信息,请参阅规划元数据参考。 |
密钥 | (可选)可以使用私密密钥来验证请求有效负载。此私密密钥值必须插入到此位置,并且必须包含在接收应用程序中用于处理请求的代码中。请在此处以不带引号的字符串形式输入私密密钥值。 |
验证 SSL 证书 | 当设置为 注意 如果您必须向具有过期或无效证书的端点发送请求,请务必禁用 SSL 验证。 |
重试 | 如果返回的状态代码不在 200–299 范围内,则该 HTTP 任务将被视为失败。启用此选项后,请求将自动重试。 如果请求失败,此值定义了请求应重试的次数。如果达到重试次数后仍未成功,则任务将失败。 |
根据响应创建数据集 | 当设置为 |
配置任务
设置所需的参数。如需详细了解参数,请参阅 HTTP 任务在规划中的视图。
您可以在请求的标头值和请求正文中指定规划元数据信息。如需了解详情,请参阅规划元数据的参考文献。
要测试连接,请单击测试。此时将显示一条成功消息。
提示
状态代码
200表示测试成功。提示
您可以使用 GET 方法进行测试。GET 请求不会更改目标平台上的任何数据,但可能允许您在请求正文中指定元素。
要添加任务,请单击保存。
重命名任务
要重命名任务,请在右侧面板中单击更多菜单 > 编辑。
提示
良好的命名可能包括目标平台端点和方法,以及规划中任务的目的。
删除任务
要删除任务,请单击更多菜单 > 删除。确认您要删除任务。
警告
此步骤无法撤消。
规划元数据参考
在其他任务的消息中,您可以参考有关规划、规划任务及规划执行的元数据。如需了解详情,请参阅规划元数据的参考文献。
示例
Slack 频道消息
提示
Slack 任务现已成为受支持的产品功能。
您可以创建 HTTP 任务,将短信传递到您选择的 Slack 频道。
设置 Slack 安装以接收 HTTP 消息:
如果需要,请创建 Slack 频道以接收您的消息。
创建应用程序。
为您的应用程序激活传入的 HTTP 消息。
指定用于接收传入消息的频道。
从 cURL 语句中复制传入 HTTP 请求的 URL。
参数 | 描述 |
|---|---|
名称 | 此名称仅显示在 Alteryx One 中。 |
方法 | 选择 |
URL | 粘贴您从 Slack 复制的 URL。 |
标头信息 | 从 Slack cURL 命令复制内容标头: key: Content-Type value: application/json |
正文 | {"text":"Your job has completed."} |
单击测试以验证此任务是否有效。
运行作业并检查 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 任务的信息:
{"text":"{{$http_qg.name}} returned {{$http_qg.statusCode}}."} 如需了解详情,请参阅规划元数据参考。
将元数据输入提供给云函数
此示例演示如何使用 HTTP 任务将规划元数据传递到 AWS Lambda 函数。类似的方法可用于 Google Cloud Functions 函数。
在这种情况下,流任务执行的 rowCount 值通过 HTTP 任务传递到 AWS Lambda 函数。
一般步骤:
定义您的规划。
流任务:运行流以生成 Lambda 函数所需的输出。
HTTP 任务:生成 HTTP 请求,其正文包含对 rowCount 元数据变量的参考文献。请求正文:
{ "rowCount": "{{$flow_7p['My Flow Name'].output['My output name'].rowCount}}" }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) }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'
为 Designer Cloud 工作流创建包含 API 响应的数据集
在 Plans 中使用 HTTP 任务读取和生成具有 API 调用响应的数据集,以便在 Designer Cloud 工作流中自然使用。
参数 | 描述 |
|---|---|
名称 | 此名称仅显示在 Alteryx One 中。 |
方法 | 必填字段。选择 |
URL | 必填字段。其他应用程序接收 HTTP 请求的 URL。示例: |
标头信息 | HTTP 内容标头为 JSON 格式的键值对。 {
"X-Custom-Header": "value",
"X-Parametrized-Header": "${wf1.id}"
} |
正文 | 提交给接收应用程序的请求正文。可以包含 {"text":"My text message to the receiving application."} |
一般步骤:
使用您的输入创建工作流。
创建并运行包含 HTTP 任务的规划以生成数据集。
确保取消选中删除包含 API 调用响应的数据集复选框,以便将任务设置为保留数据集。
在 Designer Cloud 中,使用上一步生成的数据集创建一个以 API 响应为起点的工作流。
通过选中从数据集加载配置复选框,您可以从上游工作流任务的输出数据集中加载配置(包含所有参数)。
小心
有关输入数据集的限制,请参阅限制部分。
在规划中,将工作流添加为现有 HTTP 任务的下游任务。修改规划,以使用 HTTP 任务输出(在步骤 1 中指定)作为 Designer Cloud 工作流输入。
您现在可以为该规划制定计划。该设置将发起 API 调用,将响应传递给 Designer Cloud 工作流并执行。最终输出将按常规方式提供。
验证签名
警告
实现签名验证可能需要开发人员技能,具体取决于目标应用程序。
或者,您可以配置平台来对 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
拆分 X-Webhook-Signature 标头:
使用 , 字符作为分隔符来拆分值。
使用 = 字符拆分每个部分。
提取时间戳和签名的值。从上述示例中:
时间戳:
1568818215724签名:
55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a
在接收应用程序中,您可以重新计算签名,以验证请求是否通过平台发送。
将时间戳、点号字符 . 以及请求正文(POST/PUT/PATCH 方法)或 URL(GET/DELETE 方法)进行连接。
假设上述示例是
POST请求的签名,而请求正文是test。串联的值如下所示:1568818215724.test
您现在可以在接收应用程序中计算 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');
应该将您的代码返回的值与作为签名包含在 X-Webhook-Signature 标头中的值进行比较:
如果这些值不匹配,则拒绝该请求。
如果这些值匹配,则计算当前时间戳与标头中的时间戳之间的差值。如果差值超出允许的限制,则拒绝该请求。
否则,在您的应用程序中正常处理该请求。
从数据集加载 HTTP 配置
如果您需要创建动态 API 请求或多个请求,可以使用 Designer Cloud 定义包含配置的输出,并将该输出传递给 Plans 中的 HTTP 任务。
要使用配置定义输出并将其用于 HTTP 任务,请按照以下步骤操作:
在 Designer Cloud 中创建工作流。如需了解详细信息,请前往 构建工作流。
在工作流中,将输出文件格式设置为 CSV,并包含以下列(列名不区分大小写):
方法(字符串、取值:GET | POST | DELETE | PUT)
URL(字符串、请求 URL)
标头(字符串、标头列表及数值,格式为 {“Name”:“Value”, “Name”:“Value”, ...})
正文(字符串)。
转至 Plans 并创建规划。
添加 Designer Cloud 任务并选择新创建的工作流。
在 Designer Cloud 任务后添加 HTTP 任务,并将其与连接器线路连接。
在 HTTP 配置中,选中从数据集加载配置复选框和从数据集加载配置复选框。
单击选择输入数据集按钮。
选择Designer Cloud任务及其包含 HTTP 配置的输出数据。
选择确认。
根据响应创建数据集复选框将自动选中。您可以自定义数据集名称并运行该规划。
注意
配置输出文件中的每一行都会触发一个独立的请求。每个请求的响应将作为一行添加到输出数据集中。
将 HTTP 响应用作下游任务的输入
在将 HTTP 任务设置为从响应创建数据集后,您可以将该数据集用作下游任务的输入。
若要将数据集用作下游任务的输入,请按照以下步骤操作:
在 HTTP 配置中,选中根据响应创建数据集复选框。
在 HTTP 任务后添加 Designer Cloud 任务,并将其与连接器线路连接。
在 Designer Cloud 任务中,选择所需的工作流。
在工作流输入列表中,对希望使用 HTTP 响应覆盖的输入选择覆盖。
选择 HTTP 任务及其输出。
选择确认并运行规划。