ProxyEndpoint または TargetEndpoint フローへのポリシーの添付

ポリシーは、Flow に追加されるまで実行されません。Step 構成で Policy に名前を付けて、Policy のアタッチメントを作成できます。

API プロキシの動作には、アタッチメント ポイントの選択が重要になります。たとえば、Quota ポリシーをレスポンス Flow に追加すると、リクエスト メッセージがバックエンド サービスに送信された後、Quota が強制されるようになります。これでは、Quota ポリシーを適用する目的が果たされません。したがって、Quota ポリシーは処理 Step としてリクエスト Flow に追加する必要があります。

ポリシー アタッチメントの形式:

    <Step>
        <Name>{policy_name}</Name>
    </Step>
    

例:

    <Step>
        <Name>QuotaPolicy</Name>
    </Step>
    

ProxyEndpoint 構成または TargetEndpoint 構成で、Step 構成を適切なリクエスト Flow 要素またはレスポンス Flow 要素に追加することで、ポリシーが Flow に追加されます。

ポリシーは、リクエスト Flow またはレスポンス Flow に追加できます。リクエスト Flow とレスポンス Flow は、さらに PreFlow と PostFlow に分割されます。

以下の例では、ポリシーのアタッチメントがない最小限の ProxyEndpoint 構成を示します。これは単に(内向きの)HTTPProxyConnection と RouteRule を定義しています。

    <ProxyEndpoint name="default">
        <HTTPProxyConnection>
            <BasePath>/weather</BasePath>
            <VirtualHost>default</VirtualHost>
        </HTTPProxyConnection>
        <RouteRule name="default">
            <TargetEndpoint>default</TargetEndpoint>
        </RouteRule>
    </ProxyEndpoint>
    

API プロキシが他の処理を実行する前に、ProxyEndpoint が Quota ポリシーを(処理 Step として)強制するように、この構成を変更する必要があります。デベロッパーが Quota を超えた場合、それ以上のリクエストで計算資源が浪費されることは望ましくありません。

この構成を強制するには、次のように、処理 Step をリクエスト PreFlow に追加します。

    <ProxyEndpoint name="default">
      <PreFlow>
        <Request>
          <Step><Name>QuotaPolicy</Name></Step>
        </Request>
      </PreFlow>
      <HTTPProxyConnection>
        <BasePath>/weather</BasePath>
        <VirtualHost>default</VirtualHost>
      </HTTPProxyConnection>
      <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
      </RouteRule>
    </ProxyEndpoint>
    

ポリシーの実行を、ProxyEndpoint でその他の初期処理を実行した後に行いたい場合もあります。たとえば、PreFlow で Quota を確認し、Quota の確認後に、JSON から XML にリクエストを変換するなど、別の一連の処理を実行する場合です。そのためには、PostFlow リクエストパスにポリシーを追加します。以下にリクエスト PostFlow アタッチメントのサンプルを示します。このポリシーは、PreFlow(および条件付きフロー)の全ポリシーが実行された後、リクエスト メッセージで実行されます。

    <PostFlow>
      <Request>
        <Step><Name>JSONtoXMLPolicy</Name></Step>
      </Request>
    </PostFlow>
    

以下にレスポンス PostFlow アタッチメントのサンプルを示します。このポリシーは、レスポンス メッセージで実行されます(ProxyEndpoint のレスポンス PostFlow は、レスポンスがリクエスト元のクライアント アプリへ返される前の最終的な処理フェーズです)。

    <PostFlow>
      <Response>
        <Step><Name>XMLtoJSONPolicy</Name></Step>
      </Response>
    </PostFlow>