HTTPタスク
プランの実行中に、HTTPリクエストをサードパーティのアプリケーションエンドポイントに送信するタスクを作成できます。たとえば、先行するタスクが正常に実行された場合、そのタスクからの情報を含むHTTPメッセージを指定されたエンドポイントに送信できます。
プランビューでは、HTTPタスクを作成して、他のタスクの実行前または実行後にエンドポイントにリクエストを送信できます。また、HTTPタスクを使用して、Designer Cloudワークフローで使用できる、API呼び出しの応答を含むデータセットを生成できます。このタスクは、右のコンテキストパネルで指定します。
HTTPタスクとは、Alteryx One Platformと別のアプリケーションの間のリクエストです。このリクエストはHTTPを使用して配信され、受信側のアプリケーションが解釈して処理を実行します。
注記
受信側のアプリケーションでは、プラットフォームのホストとポート番号またはIPアドレスをホワイトリストに登録することが必要な場合があります。アプリケーションのドキュメントを参照してください。
HTTPタスクは、プランで使用できるタスクタイプの1つです。詳細については、Planビューページを参照してください。
制限事項
入力データセット([データセットから設定を読み込む]):
行: 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タスクのPlanビューを参照してください。
リクエストのヘッダー値とリクエスト本文で、プランのメタデータ情報を指定できます。詳細については、Planメタデータの参照を参照してください。
接続をテストするには、[テスト]をクリックします。成功メッセージが表示されます。
ヒント
ステータスコード
200は、テストが成功したことを示します。ヒント
GETメソッドをテスト目的で使用できます。GETリクエストは、ターゲットプラットフォーム上のデータを変更しませんが、リクエスト本文内の要素を指定できる場合があります。
タスクを追加するには、[保存]をクリックします。
タスク名の変更
タスクの名前を変更するには、右側のパネルで[More]メニュー > [編集]をクリックします。
ヒント
適切な命名としては、ターゲットプラットフォームのエンドポイントとメソッド、およびプランでのタスクの目的を含めることができます。
タスクを削除する
タスクを削除するには、[More]メニュー > [削除]をクリックします。タスクの削除を確認します。
警告
この手順を元に戻すことはできません。
Planメタデータの参照
他のタスクのメッセージ内で、プラン、そのタスク、およびその実行に関するメタデータを参照できます。詳細については、Planメタデータの参照を参照してください。
例
Slackチャンネルメッセージ
ヒント
Slackタスクが製品機能としてサポートされました。
HTTPタスクを作成して、選択したSlackチャンネルにテキストメッセージを配信できます。
HTTPメッセージを受信するようにSlackのインストールを以下のように設定します。
必要に応じて、メッセージを受信する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タスクの開始前にプラン実行ですでに発生しているタスクについてのみ、メタデータ参照を挿入できます。
現在実行中の各タスクは、2文字のコードを使用して参照されます。例:
{{$http_xx.name}}
Planメタデータの参照は、次の構文を使用して構成されます。適切なテキストボックスに、次のいずれかの値を入力します。
ヒント
まず、「$」と入力します。これにより、各メタデータ参照タイプのメタデータ参照のメニューツリーにアクセスできます。最終的な構文は上で説明したとおりです。
プラン:
プラン定義または現在のプラン実行からのメタデータ情報は、次のようになります。
{{$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タスク: rowCountメタデータ変数への参照を本文に含むHTTPリクエストを生成します。リクエスト本文:
{ "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タスクを使用して、Designer Cloudワークフローでそのまま使用できるAPI呼び出し応答を含むデータセットを読み取り、生成します。
パラメーター | 説明 |
|---|---|
名前 | この名前はAlteryx Oneにのみ表示されます。 |
メソッド | 必須フィールドです。 |
URL | 必須フィールドです。他のアプリケーションがHTTPリクエストを受信するURL。例: |
ヘッダー | JSON形式のキー/値ペアのHTTPコンテンツヘッダー。 {
"X-Custom-Header": "value",
"X-Parametrized-Header": "${wf1.id}"
} |
本文 | 受信側のアプリケーションに送信されたリクエストの本文です。 {"text":"My text message to the receiving application."} |
一般的な手順:
入力に基づいてワークフローを作成します。
HTTPタスクを使用してプランを作成して実行し、データセットを生成します。
[API呼び出し応答を含むデータセットを削除する]チェックボックスをオフにして、データセットを保持するようにタスクを設定してください。
Designer Cloudで、前のステップで生成されたデータセットを使用して、API応答で始まるワークフローを作成します。
[データセットから設定を読み込む]チェックボックスをオンにすると、上流のワークフロータスクの出力データセットから、設定(すべてのパラメーターを含む)を読み込むことができます。
注意
入力データセットの制限については、「制限事項」セクションを参照してください。
プラン内で、ワークフローを既存のHTTPタスクの下流タスクとして追加します。ステップ1で指定したHTTPタスク出力をDesigner Cloudワークフロー入力として使用するように、プランを変更します。
これでプランをスケジュールできるようになりました。このセットアップでAPI呼び出しが行われ、その応答がDesigner Cloudワークフローに渡されて実行されます。最終出力は通常どおり利用できます。
署名の検証
警告
ターゲットアプリケーションによっては、署名検証の実装に開発者のスキルが必要になる場合があります。
必要に応じて、HTTPリクエストに署名するようにプラットフォームを設定できます。リクエストの署名により、リクエストが第三者ではなくプラットフォームから送信されていることが保証されます。
以下では、署名がどのように作成されるかを確認できます。これにより、受信側アプリケーションが署名と関連リクエストを適切に処理するように設定できます。
署名ヘッダー
HTTPリクエストは、X-Webhook-Signatureヘッダーをリクエストに挿入することによって署名されています。この署名の形式は次のとおりです。
X-Webhook-Signature: t=<timestamp>,sha256=<signature>
各名前について:
<timestamp>- 署名が送信されたときのタイムスタンプ。値はUNIX時間です。<signature>- SHA256署名。プラットフォームは、SHA-256を使用したハッシュベースのメッセージ認証コード(HMAC)を使用してこの署名を生成します。
これらの値の詳細については、以下を参照してください。
例:
X-Webhook-Signature: t=1568818215724,sha256=55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a
アプリケーションツールの確認
アプリケーションによっては、タスク署名を検証するために、次のタスクセットのいずれかを完了する必要があります。
注記
アプリケーションでプラットフォームをホワイトリストに登録することが必要な場合があります。詳細については、アプリケーションのドキュメントを参照してください。
アプリケーション用にカスタムコーディングの作成が必要な場合があります。以下では、JavaScriptの例を含め、その方法の詳細を確認できます。
署名付きリクエストの処理
タイムスタンプ値(t=<timestamp>)は、リプレイアタックを防ぐためにヘッダー値の先頭に置かれます。リプレイアタックとは、攻撃者が有効なペイロードとその署名を傍受して再送信するものです。
このような攻撃を回避するために、タイムスタンプが署名ヘッダーに含まれて、署名付きペイロードに埋め込まれます。
タイムスタンプは署名付きペイロードの一部であるため、攻撃者は署名を有効に保ったままでタイムスタンプの値を変更することはできません。
署名が有効でもタイムスタンプが古すぎる場合は、リクエストを拒否できます。
たとえば、1時間前の日付に対応するタイムスタンプを持つリクエストを受け取った場合は、リクエストを拒否するべきでしょう。
リプレイアタックの詳細については、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設定で、[データセットから設定を読み込む]チェックボックスと、[データセットから設定を読み込む]チェックボックスをオンにします。
[入力データセットを選択]ボタンを押します。
HTTP設定を使用して、Designer Cloudタスクとその出力データを選択します。
[確認]を選択します。
[応答からデータセットを作成]チェックボックスが自動的にオンになります。データセットの名前をカスタマイズしてプランを実行できます。
注記
設定出力ファイルの各行が、個別のリクエストになります。リクエストごとの応答が、出力データセットの行として追加されます。
HTTP応答を下流タスクの入力として使用
応答からデータセットを作成するようにHTTPタスクを設定したら、このデータセットを下流のタスクへの入力として使用できます。
データセットを下流のタスクへの入力として使用するには、次の手順を実行します。
HTTP設定で、[応答からデータセットを作成]チェックボックスをオンにします。
HTTPタスクの後にDesigner Cloudタスクを追加し、コネクタラインで接続します。
Designer Cloudタスクで、目的のワークフローを選択します。
ワークフロー入力のリストで、HTTP応答で上書きしたい入力に[上書き]を選択します。
HTTPタスクとその出力を選択します。
[確認]を選択し、プランを実行します。