制御
5 つのボックスがシナリオの実行フローを操ります。
なお、どのボックスにも暗黙のポート in、error、done があります。
ポートと接続を参照してください。
Input / Param(入力 / パラメーター)
Section titled “Input / Param(入力 / パラメーター)”シナリオのパラメーターを宣言します。
| 入力 | なし |
| 出力 | value — { name: value, … } という単一のオブジェクト |
| 設定 | name(パラメーター名)、valueType(型と既定値) |
値は起動時に、コマンドラインの --param name=value で渡します。
値が用意されていない状態で実行がこのボックスに到達した場合は、対話的に入力を求められます。
入力「baseUrl」(文字列) ──► リクエストの env ポートOutput / Return(出力 / 戻り値)
Section titled “Output / Return(出力 / 戻り値)”シナリオの呼び出し元に結果を公開します。
| 入力 | value |
| 出力 | なし — 終端のボックスです。error も done もありません |
| 設定 | name |
シナリオ実行アクションから呼ばれたシナリオは、その出力のそれぞれを
呼び出し側の output:<name> ポートで利用できるようにします。
If(条件分岐)
Section titled “If(条件分岐)”2 方向の分岐です。
| 入力 | left、right |
| 出力 | then、else |
| 設定 | operator:lt、lte、eq、gte、gt、ne、contains — さらにリテラル値としての left と right |
コツ:どちらのオペランドも接続されず、値も入力されていない場合、
このボックスは in で受け取ったシグナルの真偽をそのまま判定します。
明示的な条件のない「ここまで到達したかどうか」の判定です。
Switch(多分岐)
Section titled “Switch(多分岐)”N 方向の分岐です。
| 入力 | on |
| 出力 | 宣言したケースごとに case-<id> ポート、さらに default |
| 設定 | cases:{ id, value } のリスト |
分岐先が 3 つ以上になったら、If を数珠つなぎにするよりこちらが適しています。 ケースごとに独立した線になるため、図として読みやすくなります。
Retry(再試行)
Section titled “Retry(再試行)”エラーからの復帰を区切る境界です。
| 入力 | maxAttempts、delay |
| 出力 | attempt(試行のたび)、exhausted(試行回数を使い切ったとき) |
| 設定 | 下記を参照 |
| フィールド | 既定値 | 役割 |
|---|---|---|
maxAttempts | 3 | 最大試行回数 |
backoff | fixed | fixed、linear、exponential |
delay + delayUnit | — | 基本待ち時間(ms、s、min) |
factor | 2 | 指数モードでの増加係数 |
maxDelay + maxDelayUnit | — | 待ち時間の上限 |
retryOnError | true | エラー時に再試行する |
retryOnFailure | false | 業務上の失敗時に再試行する |
retryOnStatus | — | HTTP ステータスのリスト。たとえば [429, 503] |
attempt に接続したサブグラフが再試行の対象範囲になります。
成功した場合は done から抜けます。このボックスに error ポートはありません。
このボックス自身が境界だからです。
Retry(3 回、指数、[429,503]) ├─ attempt ──► HTTP リクエスト ──► Assert └─ exhausted ──► Throw「サービス利用不可」