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

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示します。

このセクションでは、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 と評価された場合、Apigee によってそのステップが実行されます。条件が false と評価された場合、Apigee によってそのステップがスキップされます。

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

構文

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

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

ここで

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

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

operator
条件の評価方法を定義する構文。一般的な演算子は次のとおりです。
>     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>

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

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

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

<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>

Apigee は、セグメント内のフローを 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

次の例は、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>

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

例 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>

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

例 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>

Apigee は、条件が 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 と評価された場合、Apigee はステップをスキップします。

構文

<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 と評価されると、Apigee はステップを実行します。ステートメントが false と評価されると、Apigee はステップをスキップします。
<Name> 文字列 現在のフローで実行されるポリシーの ID を指定します。