Send Docs Feedback

Note: Most user interface tasks can be performed in Edge Classic or the New Edge experience. For an overview, getting started topics, and release notes specific to the New Edge experience, see the docs.

フローの構成

フローは API プロキシの基本構成要素です。フローを使用すると、API プロキシがポリシーやコードを実行する順序を構成することで、API の動作をプログラムできます。

フローの概念については、「フローについて」を参照してください。

This topic describes how to create conditional flows and add logic (policies) to flows at a high level. The art of creating conditions involves more detail than what's covered in this topic. For that detail, see Managing proxy state with flow variables and Flow variables and conditions.

フローへのポリシーの添付

Edge には、セキュリティ保護の実装やトラフィックの管理やメッセージの操作のために、さまざまなタイプの事前定義ポリシーが用意されています。さらに、ポリシーを使用すると、独自のカスタムコードを追加してメッセージ処理を全面的にカスタマイズできます。

例:

  • OAuth セキュリティ保護ポリシーをProxyEndpoint のリクエスト PreFlow に添付します。ProxyEndpoint のリクエスト PreFlow はパイプラインで最初のフローなので、これがセキュリティ保護ポリシーに違反していた場合はリクエストを直ちに却下できます。
  • JSON から XML への変換ポリシーをTargetEndpoint のレスポンス PostFlow に添付して、レスポンスを JSON から XML に変換します。
  • JavaScript ポリシーを ProxyEndpoint の Conditional Flow に追加して、リクエストを処理するための JavaScript コードを実行します。

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

選択したフローにポリシーを添付すれば、そのフロー URI と動詞の組み合わせに対して行われたリクエストに対してのみ Quota Policy を強制するように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/** (/issue/ と、最後のスラッシュよりも後にある URI 内のあらゆるもの) とともに API プロキシに届くと, その API 呼び出しでクォータが強制されます。

条件フローについて

PreFlow または PostFlow に添付されたポリシーは必ず実行されます。一方、条件フローに含まれるポリシーは、フローの条件が true と評価された場合にのみ実行されます。

リクエストやレスポンスの処理中、各セグメントで実行される条件フローは、条件が true と評価された最初のフロー 1 つだけです。 つまり、条件フローは以下に挙げたそれぞれの一部として 1 つだけ実行できます。

  • ProxyEndpoint のリクエストパイプライン
  • TargetEndpoint のリクエストパイプライン
  • ProxyEndpoint のレスポンスパイプライン
  • TargetEndpoint のレスポンスパイプライン

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

<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 フロー変数です。フロー変数は名前付き参照で、Edge によって処理される API トランザクションに関連付けられた状態情報を保持します。 Edge は、参照可能な数多くの状態変数を定義します。

RESTful サービスは、API リソースの集合です。API リソースはエンティティを識別する URI パスフラグメントで、デベロッパは API を呼び出すことでそれにアクセスできます。例えば、サービスバックエンドで天気概況と天気予報を提供している場合は、/reports/forecasts という 2 つの API リソースに対応する 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 だった場合にのみ実行されるフローをセットアップします。

条件フローを追加するには、API プロキシビルダーで「Develop」ビューを選択します。目的のエンドポイントの「+」アイコンをクリックします。

「New Conditional Flow」フォームでは、フローに名前を付け、条件を構成できます。次の例では、ベースパスの後ろ、任意の URI に対する (PUT、POST などではなく) GET 動詞について、リクエストメッセージの HTTP を評価する単純な条件を追加しています。

(条件文の作成方法については、「フローの変数と条件」を参照してください。)

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

では、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>

次のステップ

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

Help or comments?