フロー構成のリファレンス

このセクションでは、API プロキシフローの定義で使用する XML 要素のリファレンス情報を提供します。

階層と構文

次の例は、フロー構成要素の要素階層と構文を示しています。

要素の階層

次の例は、<ProxyEndpoint> 要素と <TargetEndpoint> 要素内のフロー構成要素の階層を示しています。

<ProxyEndpoint | TargetEndpoint>
    <PreFlow>
          <Request>
                <Step>
                    <Condition>
                    <Name>
          <Response>
                <Step>
                    <Condition>
                    <Name>
          <Description>
    <Flows>
          <Flow>
                <Description>
                <Condition>
                <Request>
                      <Step>
                          
                <Response>
                      <Step>
                          
          <Description>
    <PostFlow>
          <Request>
                <Step>
                    
          <Response>
                <Step>
                    
          <Description>
    <PostClientFlow> (<ProxyEndpoint> only)
          <Response>
                
          <Description>

      // Additional configuration elements

</ProxyEndpoint | TargetEndpoint>

構文

次の例は、フロー構成要素の構文を表しています。以降のセクションでは、これらの要素について詳しく説明します。

<!-- ProxyEndpoint flow configuration file -->
<ProxyEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  <PostClientFlow name="flow_name">
    <Description>flow_description</Description>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

<!-- TargetEndpoint flow configuration file -->
<TargetEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
    ...
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  ...
</TargetEndpoint>

これらの要素を使用して、PreFlow、条件付きフロー、PostFlow、PostClientFlow の実行を定義します。

<Condition>

ランタイムに処理されるステートメントを定義します。ステートメントが true と評価された場合、条件に関連付けられたステップまたはフローが実行されます。ステートメントが false と評価された場合、ステップまたはフローは無視されます。

文字列
親要素 <Flow>
<Step>
子要素 なし

この要素を <Flow> 要素または <Step> 要素に配置するかに応じて、条件を特定のステップに適用またはフロー全体に適用できます。

// Condition can apply to just one step:        // Or to the flow:
<Flows>                                         <Flows>
  <Flow>                                          <Flow>
    <Step>                                          <Condition>
      <Condition>                                   <Step>
      <Name>                                          <Name>
      ...                                             ...
    ...                                             ...
  ...                                             ...
</Flows>                                        </Flows>

<Step> 内の条件が true と評価された場合、Edge によってそのステップが実行されます。条件が false と評価された場合、Edge によってそのステップがスキップされます。

<Flow> 内の条件が true と評価された場合、Edge によってフロー内のすべてのステップが処理されます。条件が false と評価された場合、Edge によってフロー全体がスキップされます。

構文

<Condition> 要素の構文は次のとおりです。

<Condition>property operator "value"</Condition>

ここで

プロパティ
条件で使用するフロー変数のプロパティ。たとえば、request フロー変数には、pathcontent という名前のプロパティがあります。これらを条件として使用するには、次のように flow_variable[dot]property_name の形式で指定します。
request.path
request.content

フロー変数とそのプロパティの完全なリストについては、フロー変数のリファレンスをご覧ください。

演算子
条件の評価方法を定義する演算子。よく利用される演算子は次のとおりです。
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

完全なリストについては、条件リファレンスの演算子をご覧ください。

"value"
フロー変数のプロパティの評価に使用される値。通常、整数または文字列などの基本的なデータ型になります。(たとえば、200、"/cat" など)。この値には、条件でのパターン マッチングで説明されているように、パターン マッチング用のアスタリスクやその他の文字などのワイルドカードを含めることができます。

例 1

次の例では、request フロー変数の verb プロパティが "GET" かどうかを確認しています。

<!-- api-platform/reference/examples/flow-segments/condition-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  ...
</ProxyEndpoint>

リクエストが "GET" の場合、"Log-Request-OK" ポリシーを実行します。

例 2

次の例は、レスポンス コードを確認します。

<!-- api-platform/reference/examples/flow-segments/condition-2.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

コードの値に応じて、異なるポリシーが実行されます。

属性

<Condition> 要素には属性はありません。

子要素

<Condition> 要素には子要素はありません。

<Description>

人が読める用語でフローの説明を記述します。この要素は、フローに関する情報を自分やその他のデベロッパーに伝える際に使用されます。この説明は外部からは参照できません。

文字列
親要素 <Flow>
<PreFlow>
<PostFlow>
子要素 なし

構文

<Description> 要素の構文は次のとおりです。

<Description>flow_description</Description>

次の例は、フローの目的を指定する <Description> 要素を示しています。

<!-- api-platform/reference/examples/flow-segments/description-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

属性

<Description> 要素には属性はありません。

子要素

<Description> 要素には子要素はありません。

<Flow>

Edge が実行するステップのカスタムセットを定義します。

複合オブジェクト
親要素 <Flows>
子要素 <Condition>
<Description>
<Request>
<Response>

必要に応じて、<Flow><Condition> を指定できます。指定すると、条件が true と評価された場合のみ、Edge によってフロー内のステップが実行されます。それ以外の場合、Edge はフロー全体をスキップします。

<Flows> 要素には、複数の <Flow> 要素を含めることが可能です。それぞれに、独自の条件とステップを指定できます。複数の <Flow> 要素が含まれている場合、条件がない、または条件が true と評価される最初の要素のみが実行されます。

常に実行される(実行される条件付きフローが他に記述されていない場合に)、デフォルトのフローを定義できます。この機能は、API プロキシの構成によっては、悪意のある攻撃から保護するために有用な方法になり得ます。

構文

<Flow> 要素の構文は次のとおりです。

<Flow name="conditional_flow_name">
  <Description>flow_description</Description>
  <Condition>property operator "value"</Condition>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</Flow>

<Flow> のすべての子要素は省略可能です。

例 1

次の例は、常に「Log-Message-OK」ポリシーを実行する、シンプルな <Flow> を示しています。

<!-- api-platform/reference/examples/flow-segments/flow-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-flow">
    <Flow>
      <Request>
        <Step>
          <Name>Log-Message-OK</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

例 2

次の例は、それぞれ独自の条件を持つ複数のステップを持つ <Flow> を示しています。

<!-- api-platform/reference/examples/flow-segments/flow-2.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

例 3

次の例は、条件付きフローに含まれる複数のフローを表しています。

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge によって、セグメント内のフローが 1 つだけ実行されます。条件がない最初のフロー、または条件が true と評価された最初のフローが実行されます。

属性

次の表に、<Flow> 要素の属性を示します。

属性 説明
name 文字列 (必須)フローの一意の ID。たとえば、"My-Conditional-Flow-1" です。名前にスペースや特殊文字を使用することはできません。

子要素

次の表に、<Flow> の子要素を示します。

子要素 説明
<Condition> 文字列 ランタイムに処理される条件文を定義します。ステートメントが true と評価された場合、フロー(フロー内のすべてのステップ)が実行されます。ステートメントが false と評価された場合、フロー(フロー内のすべてのステップ)は無視されます。
<Description> 文字列 フローの簡単な説明を記述します。この説明は外部からは参照できません。
<Request> 複合オブジェクト リクエスト セグメントのステップと条件を指定します。
<Response> 複合オブジェクト レスポンス セグメントのステップと条件を指定します。

<Flows>

0 個以上の <Flow> 要素が含まれます。

複合オブジェクト
親要素 <ProxyEndpoint>
<TargetEndpoint>
子要素 <Flow>

<Flows> 内に複数の <Flow> 要素がある場合は、1 つの <Flow> のみが実行されます。これは、<Condition> がない最初のフロー、または条件が true と評価される最初のフローです。

常に実行される(実行されるフローがその他にない場合に)デフォルトのフローを定義できます。この機能は、API プロキシの構成によっては、悪意のある攻撃から保護するために有用な方法になり得ます。

構文

<Flows> 要素の構文は次のとおりです。

<Flows name="flow_name">
  <Flow name="conditional_flow_name">
    <Description>flow_description</Description>
    <Condition>property operator "value"</Condition>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </Flow>
</Flows>

<Flows> のすべての子要素は省略可能です。

例 1

次の例は、単一の <Flow> を持つ単純な <Flows> 要素を示しています。

<!-- api-platform/reference/examples/flow-segments/flows-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge によって、proxy フロー変数から収集したパスの接尾辞に基づいて、これらのポリシーのいずれかが実行されます。パスの接尾辞がどの条件にも一致しない場合、Edge はこのフローを実行しません。

例 2

次の例は、<Flows> 内の複数の <Flow> 要素を示しています。それぞれに独自の <Condition> があります。

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge は、セグメント内で条件が true と評価された最初のフローを実行します。その後、Edge はセグメント内の残りのフローをスキップします。

例 3

次の例は、「デフォルト」の <Flow> を示しています。

<!-- api-platform/reference/examples/flow-segments/flows-3.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-conditional-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-conditional-flow-2">
      <Response>
        <Step>
          <Condition>response.header.someheader = "42"</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-default-flow">
      <Response>
        <Step>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Edge は、セグメント内で条件が true と評価された最初のフローを実行します。実行する条件付きフローがない場合、この例の 3 番目のフロー(条件なしのフロー)が実行されます。

デフォルト フローは、悪意のある攻撃から保護するために有用な方法になります。

属性

<Flows> 要素には属性はありません。

子要素

<Flows> 要素には次の子要素があります。

子要素 説明
<Flow> 複合オブジェクト 条件付きフロー内で実行可能な一連のステップを定義するフロー。

<Name>

<Flow> 内で実行されるポリシーの ID を指定します。

文字列
親要素 <Step>
子要素 なし

構文

<Name> 要素の構文は次のとおりです。

<Name>policy_name</Name>

次の例では、2 つのポリシーがその名前でフローに追加されています。

<!-- api-platform/reference/examples/flow-segments/name-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

属性

<Name> 要素には属性はありません。

子要素

<Name> 要素には子要素はありません。

<PostFlow>

リクエストとレスポンスの PostFlow で実行されるステップを定義します。

複合オブジェクト
親要素 <ProxyEndpoint>
<TargetEndpoint>
子要素 <Description>
<Request>
<Response>

<PostFlow> 要素の構文は次のとおりです。

構文

<PostFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostFlow>

次の例の PostFlow では、リクエストとレスポンスの両方にステップが定義されています。

<!-- api-platform/reference/examples/flow-segments/postflow-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Name>Set-Response-Headers</Name>
      </Step>
    </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

属性

次の表に、<PostFlow> 要素の属性を示します。

属性 説明
name 文字列 フローの一意の ID。セグメント内で一意の ID を指定します(たとえば、"My-PostFlow-1")。値にスペースや特殊文字は使用できません。

子要素

次の表に、<PostFlow> の子要素を示します。

子要素 説明
<Description> 文字列 フローの簡単な説明を記述します。
<Request> 複合オブジェクト リクエストの PostFlow で実行されるポリシーを定義します。
<Response> 複合オブジェクト レスポンスの PostFlow で実行されるポリシーを定義します。

<PostClientFlow>

クライアントにレスポンスが返された後に実行される ProxyEndpoint のポリシーを定義します。通常、これらのポリシーは、レスポンスに関連するメッセージをログに記録します。

複合オブジェクト
親要素 <ProxyEndpoint>
子要素 <Description>
<Response>

構文

<PostClientFlow> 要素の構文は次のとおりです。

<PostClientFlow name="flow_name">
  <Description>flow_description</Description>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostClientFlow>

<PostClientFlow> のすべての子要素は省略可能です。

次の例は、1 つのポリシーを実行する単純な PostClientFlow を示しています。

<!-- api-platform/reference/examples/flow-segments/postclientflow-1.xml -->
<ProxyEndpoint name="default">
  <PostClientFlow name="my-postclientflows">
    <Description>My first PostClientFlow. Processed after the response is sent back to the client.</Description>
    <Response>
      <Step>
        <Name>Message-Logging-OK</Name>
      </Step>
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

属性

次の表に、<PostClientFlow> 要素の属性を示します。

属性 説明
name 文字列 フローの一意の ID。名前にスペースや特殊文字は使用できません。例: "My-PostClientFlow-1"

子要素

次の表に、<PostClientFlow> の子要素を示します。

子要素 説明
<Description> 文字列 フローの簡単な説明を記述します。
<Response> 複合オブジェクト レスポンスの PostFlow で実行されるポリシーを定義します。

<PreFlow>

リクエストとレスポンスの PreFlow で実行されるポリシーを定義します。

複合オブジェクト
親要素 <ProxyEndpoint>
<TargetEndpoint>
子要素 <Description>
<Request>
<Response>

構文

<PreFlow> 要素の構文は次のとおりです。

<PreFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PreFlow>

<PreFlow> のすべての子要素は省略可能です。

次の例は、リクエストとレスポンスにフローが定義された PreFlow を表しています。

<!-- api-platform/reference/examples/flow-segments/preflow-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

属性

次の表に、<PreFlow> 要素の属性を示します。

属性 説明
name 文字列 フローの一意の ID。名前にスペースや特殊文字は使用できません。例: "My-PreFlow-1"

子要素

次の表に、<PreFlow> の子要素を示します。

子要素 説明
<Description> 文字列 フローの簡単な説明を記述します。
<Request> 複合オブジェクト リクエストの PreFlow で実行されるポリシーを定義します。
<Response> 複合オブジェクト レスポンスの PreFlow で実行されるポリシーを定義します。

<Request>

フローのリクエスト セグメントで実行されるポリシーを定義します。

複合オブジェクト
親要素 <Flow>
<PreFlow>
<PostFlow>
子要素 <Condition>
<Step>

構文

<Request> 要素の構文は次のとおりです。

<Request>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Request>

<Request> のすべての子要素は省略可能です。

次の例では、PreFlow と PostFlow の両方のリクエストにフローが定義されています。

<!-- api-platform/reference/examples/flow-segments/request-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PostFlow>
  ...
</ProxyEndpoint>

属性

<Request> 要素には属性はありません。

子要素

次の表に、<Request> の子要素を示します。

子要素 説明
<Condition> 複合オブジェクト リクエスト セグメント内のステップを実行するかどうか判定します。
<Step> 文字列 リクエスト セグメント内で実行されるポリシーを指定します。

<Response>

フローのレスポンス セグメントで実行されるポリシーを定義します。

複合オブジェクト
親要素 <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
子要素 <Condition>
<Step>

構文

<Response> 要素の構文は次のとおりです。

<Response>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Response>

<Response> のすべての子要素は省略可能です。

次の例では、PreFlow と PostFlow の両方のレスポンスにフローが定義されています。

<!-- api-platform/reference/examples/flow-segments/response-1.xml -->
<ProxyEndpoint name="default">
    <PreFlow name="my-preFlows">
        <Description>My first PreFlow</Description>
        <Response>
            <Step>
                <Condition>response.status.code LesserThanOrEquals 300</Condition>
                <Name>Log-Response-OK</Name>
            </Step>
            <Step>
                <Condition>response.status.code GreaterThan 300</Condition>
                <Name>Log-Response-NOT-OK</Name>
            </Step>
        </Response>
    </PreFlow>
    <PostFlow name="my-postflows">
        <Description>My first PostFlow</Description>
        <Response>
            <Step>
                <Name>Set-Response-Headers</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

属性

<Response> 要素には属性はありません。

子要素

次の表に、<Response> の子要素を示します。

子要素 説明
<Condition> 文字列 レスポンス セグメント内のステップを実行するかどうか判定します。
<Step> 文字列 レスポンス セグメント内で実行されるポリシーを指定します。

<Step>

実行するポリシーを指定します。ポリシーの実行条件を指定することもできます。

複合オブジェクト
親要素 <Request>
<Response>
子要素 <Condition>
<Name>

<Flow> に複数のステップが定義されている場合、これらのステップはフローの XML で定義されている順番で実行されます。

条件なしのステップは常に実行されます。条件付きのステップは、条件が true と評価された場合にのみ実行されます。条件が false と評価された場合、Edge はステップをスキップします。

構文

<Step> 要素の構文は次のとおりです。

<Step>
  <Condition>property operator "value"</Condition>
  <Name>policy_name</Name>
</Step>

<Condition><Name> はそれぞれ <Step> あたり 1 つ指定できますが、<Flow> には複数のステップを指定できます。

<Step> のすべての子要素は省略可能です。

例 1

次の例には、条件付きのステップが 1 つ、条件なしのステップが 1 つあります。

<!-- api-platform/reference/examples/flow-segments/step-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
      <Description>My first PostFlow</Description>
      <Request>
          <Step>
              <Condition>request.verb = "GET"</Condition>
              <Name>Log-Request-OK</Name>
          </Step>
      </Request>
      <Response>
          <Step>
              <Name>Set-Response-Headers</Name>
          </Step>
      </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

リクエスト セグメントごとに条件なしのステップが常に実行されます。レスポンス セグメントのリクエストが "GET" の場合にのみ、条件付きのステップが実行されます。

例 2

次の例では、1 つのセグメント内に複数のステップが定義されています。

<!-- api-platform/reference/examples/flow-segments/step-2.xml -->
<ProxyEndpoint name="default">
    <PostFlow name="PostFlow">
        <Response>
            <Step>
                <Name>Assign-Message-1</Name>
            </Step>
            <Step>
                <Name>Assign-Message-2</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

条件なしのステップは常に実行されます。

属性

<Step> 要素には属性はありません。

子要素

次の表に、<Step> の子要素を示します。

子要素 説明
<Condition> 文字列 ランタイムに処理されるステップの条件文を定義します。ステートメントが true と評価されると、Edge はステップを実行します。ステートメントが false の場合、Edge はステップをスキップします。
<Name> 文字列 現在のフローで実行されるポリシーの ID を指定します。