このページは 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>