条件フロー

このページは ApigeeApigee ハイブリッドに適用されます。

Apigee Edge ドキュメントを表示する

条件フローでは、ポリシーは、フローの条件が true に評価された場合にのみ実行されます(常に実行される PreFlow または PostFlow にアタッチされたポリシーとは異なります)。このセクションでは、条件フローを作成する方法について説明します。

条件付きフローについて

リクエストとレスポンスの処理中に、セグメントごとに 1 つの条件付きフロー(条件が true と評価された最初のフロー)のみが実行されます。

次の例は、条件フローの使用方法を示しています。

例 1

次の ProxyEndpoint 定義は、API プロキシに対するあらゆる HTTP GET リクエストで、ProxyEndpoint によって実行される条件付きフローを示しています。

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

条件が request.verb フロー変数を参照していることに注目してください。フロー変数は、Apigee によって処理された API トランザクションに関連する状態情報を保持する名前付き参照です。Apigee は、参照可能な数多くの状態変数を定義します。

例 2

気象情報と天気予報を提供しているサービス バックエンドでは、API リソース /reports/forecasts にマッピングされた 2 つの条件付きフローが API で定義されている可能性があります。API 呼び出しでどちらかのリソースが URL に含まれていた場合、条件は true と評価され、該当する条件付きフローに接続されたロジックが実行されます。

そうすると、アプリのデベロッパーは以下の形式の URL に対してリクエストを作成することでリソースにアクセスできます。

http://myAPIs.myCo.com/weather/reports

または

http://myAPIs.myCo.com/weather/forecasts

API プロキシでは、特定のリソースに対応する条件付きフローを定義できます。

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

この例で参照されているのは proxy.pathsuffix フロー変数で、API プロキシへのアクセスに使用される URL のサフィックス部分が格納されています。そのため、これを使用して各リソースの条件付きフローに異なるポリシーを接続できます。

例: 条件フローの作成

次の例では、以下の操作を行います。

  • リクエスト メッセージが HTTP GET の場合にのみ実行される条件フローを作成します。
  • 新しいフローにポリシーを追加します。

条件付きフローの追加

新しいプロキシ エディタ

条件フローを追加するには:

  1. プロキシ エディタの [Develop] タブを選択します。
  2. 左側のペインで、[Proxy endpoints] > [default] を選択します。

    [default] を選択します。" class="l10n-absolute-url-src screenshot" l10n-attrs-original-order="class,width,alt,src" src="https://cloud.google.com/static/apigee/docs/api-platform/fundamentals/images/proxy-endpoints-default.png" width="35%" />

    注: すべての要素を表示するため、場合によっては右側のペインでビジュアル エディタを広げる必要があります。これを行うには、ビジュアル エディタとテキスト エディタの間の分割線をクリックして下に少しドラッグします。

  3. [Response] ペインの上にある [+] ボタンをクリックします。

    条件付きフローの追加ボタン

  4. [Add conditional flow] ダイアログで、[Path and verve] を選択し、[Path] フィールドに、条件フローを実行するためにリクエストパスに含めるパス接尾辞を入力します。上記の例 2をご覧ください。

    条件付きフローの追加ボタン

    条件フローは、リクエストが GET リクエストの場合にのみ実行されます(PUTPOST などの場合は実行されません)。

    Flow-1 という新しいフローが [Proxy Endpoint] ペインに表示されます。

    プロキシ エンドポイントに表示される条件フロー。

  5. 新しい条件フローの XML コードがテキスト エディタに表示されます。

    プロキシ エンドポイントに表示される条件フロー。

必要に応じて Condition 要素を編集できます。フローへのロジックの追加をご覧ください。

フローへのポリシーの接続

条件フローを作成したので、条件フローにポリシーを接続できます。次の例では、API プロキシが一定期間内に許可するリクエスト メッセージの数を制限する Quota ポリシーをフローに追加します。

  1. 左側のパネルで、[Policies] の右側にある [+] ボタンをクリックします。
  2. [Create policy] ダイアログで、[Select policy type] フィールドをクリックし、[Traffic Management] まで下にスクロールし、[Quota] を選択します。
  3. [Create] をクリックしてポリシーを作成します。
  4. [Request] ペインで、[Flow-1] の横にある [+] ボタンをクリックします。

    [Request] ペインの [Flow-1] の横にあるプラスボタンをクリックします。

  5. [Add policy step] ダイアログで、[Select existing policy] フィールドをクリックして [Quota-1] を選択します。
  6. [Add] をクリックします。

[Request] ペインに、フローと接続されたポリシー Quota-1 が表示されます。

新しいフローと Quota ポリシーを示す [Request] ペイン。

テキスト エディタで、XML の Flow-1 要素内に Quota-1 ポリシーを含むステップが表示されます。

XML に表示された条件フローと Quota ポリシー

この構成では、Quota ポリシーが GET リクエストに適用されます。他のタイプのリクエストは、Quota ポリシーのリクエスト最大件数に影響しません。

従来のプロキシ エディタ

条件付きフローを追加するには、API プロキシ ビルダーで [Develop] タブを選択します。

プロキシ ビルダーの [Develop] タブ

目的のエンドポイントで をクリックします。

条件付きフローの追加ボタン

[New Conditional Flow] フォームでは、フローに名前を付け、条件を構成できます。次の例では、PUTPOST などではなく、任意の URI の GET 動詞に関するリクエスト メッセージの HTTP を評価する単純な条件をベースパスの後に追加します。

[New Conditional Flow] ペインでは、フローには「Flow-1」という名前が付けられ、[Condition Type] には「Path and Verb」が構成されています

条件文の作成方法については、フロー変数を使用した条件をご覧ください。

Flow-1 という新しいフローが [Navigator] メニューに表示されます。

ハイライト表示された「Flow-1」。

次に、ProxyEndpoint の XML 構成を確認します。[Navigator] メニューで [Flow-1] を選択します。

以下の構成が表示されます。

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>
<Flows>
  <Flow name="Flow-1">
    <Request/>
    <Response/>
    <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
  </Flow>
</Flows>
<PostFlow name="PostFlow">
  <Request/>
  <Response/>
</PostFlow>

条件付きフローを作成したら、ポリシーの接続に利用できます。フローが選択されている状態で、リクエスト図またはレスポンス図の [+ Step] アイコンをクリックすると、フローに新規または既存のポリシーを追加できます。

[Navigator] メニューで、「issue」という名前の条件付きフローがハイライト表示され、[Flow] ペインに [Step] ボタンが表示されています。

[Add Step] ペインで、ポリシータイプが Quota、表示名が Quota-2 の新しいポリシー インスタンスが作成されます。

選択したフローにポリシーを接続して、そのフロー URI と動詞の組み合わせに対して行われたリクエストだけに Quota ポリシーが適用されるように API プロキシを構成します。たとえば、リクエスト内の learn フローにポリシーを接続すると、テキスト エディタで次の XML が生成されます。

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
...
</ProxyEndpoint>

この構成では、GET リクエストが URI パターン .../issue/**(URI で /issue/ と最後のスラッシュより後にあるすべて)で API プロキシに到達した場合、その API 呼び出しに割り当てが適用されます。

次のステップ

条件の構成や変数の使用については、以下のトピックで詳しく説明しています。