アウトバウンドポリシーの無効化

Mule 4 では、送信および受信 HTTP 要求の両方にポリシーを適用できます。

送信 HTTP 要求に適用されるポリシーはアウトバウンドポリシーと呼ばれます。アウトバウンドポリシーは、ポリシーテンプレートで ​http-policy:operation​ ブロックを定義して実行コンポーネントを指定することによって実装します。

Mule Runtime Engine は、API に適用されたすべてのポリシーの操作ブロックを、Mule アプリケーションで定義されているすべての HTTP リクエスター要素に適用します。

HTTP プロキシの場合は、アウトバウンドポリシーが適用される HTTP リクエスターが 1 つだけ定義されます。

API を実装する Mule アプリケーションはいくつかの外部サービスを呼び出す場合があるため、このような API では複数の HTTP リクエスターを定義できます。その場合、アウトバウンドポリシーは、アプリケーションが実行する各 HTTP 要求に適用されます。

次の例は、API を実装する Mule アプリケーションフローを示しています。

<flow name="implementation">
   <http:listener config-ref="http-config" path="api"/>

   <http:request method="GET" url="http://service-1" />
   <logger message="#[payload]" level="INFO"/>
   <http:request method="POST" url="http://service-2" />
</flow>

Mule アプリケーションが呼び出されるたびに、外部サービスに対して 2 つの HTTP 要求が実行されます。

次の例では、HTTP 要求にヘッダーを追加することで、前の例に Mule ポリシーが適用されています。

<http-policy:operation>
   <http-transform:add-request-headers>
       <http-transform:headers>#[{'new-header': 'the-value'}]</http-transform:headers>
   </http-transform:add-request-headers>

   <http-policy:execute-next/>
</http-policy:operation>

Mule アプリケーションが呼び出されるたびに、Mule ポリシーが 2 回 (​service-1​ を呼び出すときと ​service-2​ を呼び出すときに 1 回ずつ) 実行されます。各 HTTP 要求には、ポリシーによって追加された ​new-header​ というヘッダーが含まれます。

次に、​service-1​ が認証用に追加のヘッダーを必要としているのに対して、​service-2​ は予期しないヘッダーを持つ受信要求を拒否するというシナリオを考えてみましょう。

Mule 4.3.0 では、任意の Mule アプリケーションの HTTP リクエスターにアノテーション ​api-gateway:disablePolicies="true"​ を指定し、アノテーションが付けられたリクエスターに対しては Mule ポリシーエンジンがポリシーを実行しないようにすることで、これらの要件に対応できます。

アノテーション ​api-gateway:disablePolicies="true"​ を使用する場合は、アプリケーションで次の名前空間を指定する必要があります。

xmlns:api-gateway="http://www.mulesoft.org/schema/mule/api-gateway"

その結果、アプリケーションフローは次のようになります。

<flow name="implementation">
   <http:listener config-ref="http-config" path="api"/>

   <http:request method="GET" url="http://service-1" />
   <logger message="#[payload]" level="INFO"/>
   <http:request method="POST" url="http://service-2" api-gateway:disablePolicies="true" />
</flow>

service-2​ を呼び出す HTTP リクエスターでアノテーションを指定することで、ポリシーは適用されなくなります。したがって、その HTTP 要求には追加のヘッダーが付加されません。

アノテーションが付けられた Mule アプリケーションを 4.3.0 より前の Mule バージョンにデプロイした場合は、アノテーションは効果がなく、ポリシーは無効化されません。ただし、アプリケーションのデプロイは行われます。

関連情報