このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge のドキュメントを表示する。
ポリシーは、フローに接続されるまで実行されません。Step 構成で Policy に名前を付けて、Policy のアタッチメントを作成できます。
API プロキシの動作には、アタッチメント ポイントの選択が重要になります。例えば、Quota ポリシーをレスポンス フローに接続すると、リクエスト メッセージがバックエンド サービスに送信された後、割り当てが強制されるようになります。これでは、Quota ポリシーを適用する目的が果たされません。したがって、Quota ポリシーは処理 Step としてリクエスト フローに接続する必要があります。
ポリシー アタッチメントの形式:
<Step>
<Name>{policy_name}</Name>
</Step>次に例を示します。
<Step>
<Name>QuotaPolicy</Name>
</Step>ProxyEndpoint 構成または TargetEndpoint 構成で、Step 構成を適切なリクエスト 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>