DataService Studio のサービスオーケストレーション機能を使用すると、ノードを有向非巡回グラフ (DAG) にドラッグしてワークフローを設定できます。ビジネスロジックに基づいて、API と関数をシリアル、パラレル、またはブランチ構造で配置できます。
前提条件
DataWorks Enterprise Edition 以降がアクティブ化されていること。詳細については、「DataWorks エディションの課金」をご参照ください。
DataWorks ワークスペースが中国 (上海) リージョンに作成されていること。サービスオーケストレーション機能はアップグレード中です。機能がアップグレードされるまでお待ちください。
背景情報
ワークフローを実行して API を呼び出すと、DataWorks はワークフロー内のノードを順番に実行し、ノード間でパラメーターを渡し、各ノードのステータスを変更します。サービスオーケストレーション機能は、複数の API または関数を呼び出すプロセスを簡素化し、開発および O&M コストを削減します。このようにして、ビジネス開発に集中できます。
サービスオーケストレーション機能には、次の利点があります。
API 開発コストの削減
ノードを DAG にドラッグした後、コードを記述することなく、API と関数をシリアル、パラレル、またはブランチ構造で配置できます。これにより、API 開発のコストが削減されます。
API と関数の呼び出しパフォーマンスの向上
ワークフローを使用すると、コンテナー内の複数の API と関数を呼び出すことができます。API と関数を呼び出すためのコードを記述するのと比較して、サービスオーケストレーション機能は API と関数の呼び出しレイテンシを削減し、呼び出しパフォーマンスを大幅に向上させます。
サーバーレスアーキテクチャ
サービスオーケストレーション機能は、サーバーレスアーキテクチャに基づいて構築されています。サーバーレスアーキテクチャは、ビジネス要件に基づいた自動リソーススケーリングをサポートします。基盤となるランタイム環境に焦点を当てる必要はありません。ビジネスロジックのみに集中できます。
リクエストおよびレスポンスパラメーターの値
DataService Studio は、JSONPath を使用してパラメーター値を取得します。 JSONPath は、JSON ファイルからデータを抽出できるクエリ言語です。詳細については、「JSONPath」をご参照ください。
たとえば、3 つのノードが A、B、C の順に実行されるとします。ノード C は、ノード A とノード B のレスポンスパラメーターを使用する必要があります。
ノード A のレスポンスパラメーター: {"namea":"valuea"}
ノード A のレスポンスパラメーターの値を取得するための式: ${A.namea}
ノード B のレスポンスパラメーター: {"nameb":"valueb"}
ノード B のレスポンスパラメーターの値を取得するための式: $.nameb または ${B.nameb}
組み込みの [開始ノード] は、ワークフロー全体のリクエストパラメーターを提供します。たとえば、ワークフローのリクエストパラメーターは {"namewf":"valuewf"} です。ワークフローのすべてのノードは、${START.namewf} 式を使用してリクエストパラメーターの値を取得できます。
[開始ノード] と [終了ノード] は、ワークフローの組み込みノードです。ノードの名前を変更することはできますが、削除することはできません。ワークフローの [開始ノード] は、ワークフローのノード 0 と同等です。
パラメーター
ワークフローのリクエストパラメーター
ワークフローの設定タブで、右側のナビゲーションペインの [リクエストパラメーター] タブをクリックします。次に、[手動追加] モードまたは [自動解析] モードでリクエストパラメーターを設定できます。
[手動追加]: [パラメーターの追加] をクリックし、ワークフローのリクエストパラメーターを手動で追加します。
[自動解析]: ワークフローの最初のノードが API ノードである場合、[リクエストパラメーターを自動的に解析] をクリックして、この API ノードのリクエストパラメーターをワークフローのリクエストパラメーターに自動的にマッピングします。
API ノードのリクエストパラメーター
API ノードをクリックします。表示されるパネルで、[入力リクエストパラメーター] をクリックし、リクエストパラメーターの値を指定します。
リクエストパラメーターの値を指定しない場合、DataService Studio は親ノードによって返される JSON 文字列の最初のレイヤーにある同じパラメーターの値を取得し、その値をリクエストパラメーターに割り当てます。
説明現在のノードがワークフローの最初のノードである場合、このノードのリクエストパラメーターの値は、ワークフローの同じパラメーターに割り当てられます。
リクエストパラメーターの値を指定した場合、DataService Studio は指定した値を使用します。
説明指定された祖先ノードによって返される特定のパラメーターの値を参照するには、JSONPath 式を使用する必要があります。
API ノードのレスポンスパラメーター
API ノードをクリックします。表示されるパネルで、[出力結果の設定] を選択し、JSON 式を使用してノードの出力をカスタマイズします。次のサンプルコードは例を示しています。
{ "return1":"$.data.rows.user_id", // return1 を data.rows.user_id に設定 "return2":"$.data.rows.user_name" // return2 を data.rows.user_name に設定 }Python ノードのリクエストパラメーター
Python ノードをクリックします。表示されるパネルで、[リクエストパラメーター] フィールドにリクエストパラメーターを指定します。
Python ノードのレスポンスパラメーター
Python ノードをクリックします。表示されるパネルで、[出力結果の設定] を選択し、JSON 式を使用してノードの出力をカスタマイズします。次のサンプルコードは例を示しています。
{ "return1":"$.data.rows.user_id", // return1 を data.rows.user_id に設定 "return2":"$.data.rows.user_name" // return2 を data.rows.user_name に設定 }
次の表は、パラメーター値を取得するために使用される一般的な JSONPath 式を示しています。
JSONPath 式 | リクエストパラメーターでの役割 | レスポンスパラメーターでの役割 |
$. | 親ノードの出力のルートオブジェクトを取得します。 | 現在のノードの出力のルートオブジェクトを取得します。 |
$.param | 親ノードの出力の param パラメーターの値を取得します。 | 現在のノードの出力の param パラメーターの値を取得します。 |
${START} | [開始ノード] の出力を取得します。 | |
${NodeID} | 指定された ID を持つノードの出力を取得します。 | |
${NodeID.param} | 指定された ID を持つノードの出力の param パラメーターの値を取得します。 | |
例
DataService Studio ページに移動します。
DataWorks コンソール にログオンします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションペインで、 を選択します。表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[dataservice Studio に移動] をクリックします。
API を登録します。
この例では、登録方法を使用して API を作成します。
左側のナビゲーションペインで、
アイコンをクリックして [サービス開発] ページに移動します。
アイコンにポインターを移動し、 を選択します。[API の登録] ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定します。詳細については、「API の登録」をご参照ください。
[OK] をクリックします。
関数を登録します。
[サービス開発] タブで、
アイコンにポインターを移動し、 を選択します。目的のビジネスプロセスを展開し、[関数] を右クリックして、 を選択することもできます。
[python 関数の作成] ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定します。詳細については、「関数の管理」をご参照ください。
[OK] をクリックします。
関数の設定タブで、[コードの編集] セクションに次のコードを入力します。
# -*- coding: utf-8 -*- # event (str) : フィルター内では API の結果、それ以外の場合はパラメーター # context : 環境情報、一時的に使用しない # インポートモジュール制限: json,time,random,pickle,re,math import json def handler(event,context): # 文字列を JSON オブジェクトにロード obj = json.loads(event) # ここにコードを追加 # 追加終了 return obj[環境設定] セクションで、[メモリ] パラメーターと [関数のタイムアウト] パラメーターを設定します。
ツールバーの
アイコンをクリックします。
ワークフローを作成します。
[サービス開発] タブで、
アイコンにポインターを移動し、[ワークフローの作成] を選択します。目的のビジネスプロセスを展開し、[ワークフローの作成] を右クリックして、[ワークフローの作成] を選択することもできます。
[ワークフローの作成] ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定します。

パラメーター
説明
[API 名]
API の名前。名前は 4 ~ 50 文字で、英字、数字、アンダースコア (_) を使用できます。名前は英字で始める必要があります。
[API パス]
API を保存するパス。例: /user。
説明パスは最大 200 文字で、英字、数字、スラッシュ (/)、アンダースコア (_)、ハイフン (-) を使用できます。パスはスラッシュ (/) で始める必要があります。
[プロトコル]
API で使用するプロトコル。有効な値: [HTTP] および [HTTPS]。
HTTPS を使用して API を呼び出す必要がある場合は、API が API Gateway に公開された後、API Gateway コンソールで API に独立ドメイン名を関連付ける必要があります。また、API Gateway コンソールに Secure Sockets Layer (SSL) 証明書をアップロードする必要があります。詳細については、「API の HTTPS ベースの呼び出しを有効にする」をご参照ください。
[リクエストメソッド]
リクエストメソッド。有効な値: [GET] および [POST]。
[レスポンスコンテンツタイプ]
API のレスポンス形式。値を [JSON] に設定します。
[表示範囲]
API が表示されるユーザーの範囲。有効な値:
[ワークスペース]: API は現在のワークスペースのすべてのメンバーに表示されます。
[プライベート]: API は所有者のみに表示され、API の権限を他のメンバーに付与することはできません。
説明このパラメーターを [プライベート] に設定すると、ワークスペース内の他のメンバーは API リストで API を表示できません。
[ラベル]
API に追加するタグ。[ラベル] ドロップダウンリストからタグを選択します。
説明タグは最大 20 文字で、英字、数字、アンダースコア (_) を使用できます。ワークフローには最大 5 つのタグを設定できます。
[説明]
API の説明。説明は最大 2,000 文字です。
[保存先フォルダー]
ワークフローを保存するフォルダー。
[OK] をクリックします。
ワークフローを設定します。
ワークフローの設定タブで、ノードを DAG にドラッグし、ノードを接続します。次の図は例を示しています。

[API1] ノードをクリックします。表示されるパネルで、[API の選択] ドロップダウンリストから登録した API を選択し、[出力結果の設定] を選択して、
{"user_id":"$.data[0].id"}と入力します。
JSONPath 式を使用してレスポンスパラメーターを設定します。パラメーターの値を取得するための構文は ${NodeA.namea} で、リクエストパラメーターを設定する場合と同じです。
{"user_id":"$.data[0].id"}は、data 配列の最初の要素の id パラメーターの値を user_id パラメーターに割り当てます。その後、API1 ノードは JSON 形式で {"user_id":"value"} を返します。[PYTHON1] ノードをクリックします。表示されるパネルで、[関数の選択] ドロップダウンリストから登録した関数を選択します。
[SWITCH1] ノードをクリックします。表示されるパネルで、[分岐条件の設定] をクリックします。
親ノードのレスポンスパラメーターに基づいて条件式を入力できます。たとえば、
${ノード ID.パラメーター}>1または$.パラメーター>1形式で式を入力できます。条件式は、次の演算子をサポートしています: ==、!=、>=、>、<=、<、&&、!、()、+、-、*、/、%。この例では、user_id パラメーターは API1 ノードのレスポンスパラメーターであり、SWITCH1 ノードのリクエストパラメーターとして使用されます。
分岐ノード 1: $.user_id != 1 は、user_id パラメーターの値が 1 でない場合に分岐ノード 1 が実行されることを示します。 分岐ノード 2: $.user_id == 1 は、user_id パラメーターの値が 1 の場合に分岐ノード 2 が実行されることを示します。[終了] ノードをクリックします。次に、右側のナビゲーションペインの [レスポンスパラメーター] タブをクリックし、レスポンスパラメーターを設定します。
ワークフローをテストします。
右上隅の [テスト] をクリックします。
[API のテスト] ダイアログボックスで、[決定] をクリックします。
設定タブの下部にある [操作ログ] タブと [実行結果] タブで、実行ログと実行結果を表示します。