HTTPModifier ポリシー

内容

HTTPModifier ポリシーでは、既存のリクエストまたはレスポンスのメッセージを変更できます。

このポリシーを使用すると、そのようなメッセージに対して以下の操作を実行できます。

  • 新しいフォーム パラメータ、ヘッダー、クエリ パラメータをメッセージに追加する
  • メッセージからヘッダー、クエリ パラメータ、フォーム パラメータを削除する
  • メッセージに既存のプロパティの値を設定する

HTTPModifier では、リクエストとレスポンスいずれかのプロパティの追加、変更、削除ができます。カスタム リクエスト メッセージを作成するで説明されているように、代わりに HTTPModifier を使用してカスタムのリクエスト メッセージやレスポンス メッセージを作成し、別のターゲットに渡すことができます。

HTTPModifier ポリシーでは、次の子要素を使用してフロー変数を作成できます。

<Add> 要素、<Set> 要素、<Remove> 要素を整理する順序が重要です。このポリシーでは、ポリシー構成に出現する順序でこれらのアクションを実行します。すべてのヘッダーを削除してから特定のヘッダーを設定する必要がある場合は、<Set> 要素の前に <Remove> 要素を含める必要があります。

このポリシーは、標準ポリシーであり、任意の環境タイプにデプロイできます。ポリシータイプと各環境タイプで使用可能かどうかは、ポリシータイプをご覧ください。

<HTTPModifier> 要素

HTTPModifier ポリシーを定義します。

デフォルト値 下の「デフォルト ポリシー」タブをご覧ください。
必須かどうか 必須
複合オブジェクト
親要素 なし
子要素 <Add>
<AssignTo>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

<HTTPModifier> 要素の構文は次のとおりです。

構文

<HTTPModifier> 要素の構文は次のとおりです。

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- All HTTPModifier child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</HTTPModifier>

デフォルト ポリシー

次の例は、Apigee UI でフローに HTTPModifier ポリシーを追加する場合のデフォルト設定を示しています。

<HTTPModifier continueOnError="false" enabled="true" name="http-modifier-default">
  <DisplayName>HTTP Modifier-1</DisplayName>
  <Properties/>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</HTTPModifier>

新しい HTTPModifier ポリシーを Apigee UI に挿入すると、テンプレートには使用可能なオペレーションすべてのスタブが含まれます。通常は、このポリシーを使用して実行するオペレーションを選択し、残りの子要素を削除します。たとえば、追加を実行する場合は <Add> 要素を使用し、<Remove> などの子要素をポリシーから削除して読みやすくします。

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to false to return an error when a policy fails. This is expected behavior for most policies. Set to true to have flow execution continue even after a policy fails. See also:
enabled true Optional Set to true to enforce the policy. Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

次の表は、<HTTPModifier> の子要素の概要をまとめたものです。

子要素 必須かどうか 説明
一般的な操作
<Add> 省略可 <AssignTo> 要素で指定されたメッセージ オブジェクトに情報を追加します。

<Add> は、元のメッセージに存在しないヘッダーまたはパラメータをメッセージに追加します。なお、<Set> にもこの機能があります。

既存のヘッダーまたはパラメータを上書きするには、<Set> 要素を使用します。

<Remove> 省略可 <AssignTo> 要素で指定されたメッセージ変数から指定された要素を削除します。
<Set> 省略可 <AssignTo> 要素で指定された、リクエストやレスポンスの既存のプロパティ値を置き換えます。

<Set> は、元のメッセージにすでに存在するヘッダーまたはパラメータを上書きします。存在しない場合は、新たに追加します。

その他の子要素
<AssignTo> 省略可 HTTPModifier ポリシーで操作するメッセージを指定します。これは、標準のリクエストやレスポンスでも、新しいカスタム メッセージでもかまいません。
<IgnoreUnresolvedVariables> 省略可 未解決の変数を検出したときに処理を停止するかどうかを決定します。

後続のセクションでは、これらの子要素についてそれぞれ説明します。

HTTPModifier ポリシーの使用方法の例をいくつか次に示します。

1: ヘッダーを追加する

次の例では、<Add> 要素を使用してリクエストにヘッダーを追加しています。この例の VerifyAPIKey 変数は、VerifyAPIKey ポリシーによって生成されます。

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

2: レスポンスを変更する

次の例では、ヘッダーを追加することで既存のレスポンス オブジェクトを変更します。

<HTTPModifier name="HM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</HTTPModifier>

この例では新しいメッセージは作成されません。その代わりに、HTTP ヘッダーを追加することで既存のレスポンス メッセージを変更しています。

この例では、<AssignTo> 要素の変数名として response が指定されているため、このポリシーによりターゲット サーバーから返されたデータで最初に設定されたレスポンス オブジェクトが変更されます。

このポリシーによってレスポンス メッセージに追加される HTTP ヘッダーは、LookupCache ポリシーによって取り込まれた変数から導出されます。このため、この HTTPModifier ポリシーによって変更されるレスポンス メッセージには、結果がキャッシュから取得されたかどうかを示す HTTP ヘッダーが組み込まれます。レスポンスでのヘッダーの設定は、デバッグやトラブルシューティングに便利です。

3: クエリ パラメータを削除する

次の例では、リクエストから apikey クエリ パラメータを削除します。

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

ユーザーの認証に VerifyAPIKey ポリシーを使用する場合は、リクエスト メッセージから apikey クエリ パラメータを削除することをおすすめします。このようにすることで、機密のキー情報がバックエンドのターゲットに渡されないようにします。

子要素のリファレンス

このセクションでは、<HTTPModifier> の子要素について説明します。

<Add>

リクエストまたはレスポンスに <AssignTo> 要素で指定された情報を追加します。

<Add> 要素によって、元のメッセージに存在しない新しいプロパティがメッセージに追加されます。なお、<Set> にもこの機能があります。既存のプロパティの値を変更する場合は、<Set> 要素を使用します。

デフォルト値 なし
必須かどうか 省略可
複合型
親要素 <HTTPModifier>
子要素 <FormParams>
<Headers>
<QueryParams>

<Add> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

例 1

次の例では、<FormParams> 要素を使用して最初のリクエストから 3 つのクエリ文字列パラメータの値が取得され、それらの値がフォーム パラメータとしてターゲット エンドポイントのリクエストに設定されています。

<HTTPModifier name="HM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、<Headers> 要素を使用して、ターゲット エンドポイントに送信されるリクエストに partner-id ヘッダーが追加されています。

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 3

次の例では、<QueryParams> 要素を使用して、静的な値を指定した単一のクエリ パラメータがリクエストに追加されています。

<HTTPModifier name="HM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

この例では、リクエストのプリフローで <Add> を使用しています。デバッグツールなどのツールで結果を確認すると、https://example-target.com/get へのリクエストは https://example-target.com/get?myParam=42 になっています。

<Add> の子要素では、メッセージ テンプレートという動的な文字列置換がサポートされます。

<FormParams><Add> の子)

リクエスト メッセージに新しいフォーム パラメータを追加します。この要素はレスポンス メッセージに作用しません。

デフォルト値 なし
必須かどうか 省略可
<FormParam> 要素の配列
親要素 <Add>
子要素 <FormParam>

<FormParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
  </Add>
</HTTPModifier>

例 1

次の例では、単一のフォーム パラメータ(answer)と静的値(42)がリクエストに追加されています。

<HTTPModifier name="HM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、name クエリ パラメータの値が取得されてフォーム パラメータとしてリクエストに追加され、クエリ パラメータが削除されています。

<HTTPModifier name="HM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</HTTPModifier>

この例では <AssignTo> でターゲットが指定されていません。このポリシーは、パラメータをそのリクエストのみに追加します。

例 3

次の例では、複数のフォーム パラメータがリクエストに追加されます。

<HTTPModifier name="HM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

この例では、元のリクエストからクエリ文字列パラメータが取得され、別の名前のフォーム パラメータとして追加されます。次に、元のクエリ パラメータが削除されます。 Apigee により、変更されたリクエストがターゲット エンドポイントに送信されます。

デバッグツールを使用すると、フローを確認できます。リクエストの本文に URL エンコード型のフォームデータが含まれていることがわかります。これは元々、クエリ文字列パラメータとして渡されたものです。

username=nick&zip_code=90210&default_language=en

<FormParams> は、次の条件を満たす場合にのみ使用できます。

  • HTTP 動詞: GETPOST
  • メッセージ タイプ: リクエスト
  • 以下のいずれか(または両方):
    • フォームデータ: 値または ""(空の文字列)に設定します。たとえば、curl では、-d "" をリクエストに追加します。
    • Content-Length ヘッダー: 0 に設定します(元のリクエストにデータがない場合。それ以外の場合は現在の長さ、バイト数)。たとえば、curl では、-H "Content-Length: 0" をリクエストに追加します。

次に例を示します。

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

<FormParams> を追加すると、メッセージのターゲット サービスへの送信前に Apigee によってリクエストの Content-Type ヘッダーが application/x-www-form-urlencoded に設定されます。

<Headers><Add> の子)

<AssignTo> 要素で指定されたリクエストまたはレスポンスに新しいヘッダーを追加します。

デフォルト値 なし
必須かどうか 省略可
<Header> 要素の配列
親要素 <Add>
子要素 <Header>

<Headers> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Add>
</HTTPModifier>

例 1

次の例では、partner-id ヘッダーがリクエスト メッセージに追加され、そのヘッダーに verifyapikey.VAK-1.developer.app.partner-id フロー変数の値が割り当てられます。

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<QueryParams><Add> の子)

新しいクエリ パラメータをリクエストに追加します。この要素はレスポンスに作用しません。

デフォルト値 なし
必須かどうか 省略可
<QueryParam> 要素の配列
親要素 <Add>
子要素 <QueryParam>

<QueryParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

例 1

次の例では、クエリ パラメータ myParam がリクエストに追加され、値 42 が割り当てられます。

<HTTPModifier name="HM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<QueryParams> は、次の条件を満たす場合にのみ使用できます。

  • HTTP 動詞: GETPOST
  • メッセージ タイプ: リクエスト

また、クエリ パラメータは、<AssignTo> 要素の type 属性がリクエスト メッセージの場合にのみ設定できます。この要素をレスポンスに設定しても効果はありません。

ポリシー(<Add><QueryParams/></Add>)でクエリ パラメータの空の配列を定義した場合、このポリシーではクエリ パラメータが追加されません。これは、<QueryParams> を省略した場合と同じです。

<AssignTo>

HTTPModifier ポリシーで操作するオブジェクトを決定します。次のオプションがあります。

  • リクエスト メッセージ: API プロキシによって受信された request
  • レスポンス メッセージ: ターゲット サーバーから返された response
  • カスタム メッセージ: カスタムのリクエスト オブジェクトまたはレスポンス オブジェクト

場合によっては、HTTPModifier ポリシーの操作対象オブジェクトを変更できないため注意してください。たとえば、<Add><Set> を使用して、レスポンスのクエリ パラメータ(<QueryParams>)やフォーム パラメータ(<FormParams>)の追加や変更を行うことはできません。操作できるのはリクエストのクエリ パラメータとフォーム パラメータのみです。

デフォルト値 なし
必須かどうか 省略可
文字列
親要素 <HTTPModifier>
子要素 なし

<AssignTo> を指定しないか、<AssignTo> 要素を指定しても要素のテキスト値を指定しない場合、ポリシーはその実行場所に応じてデフォルトのリクエストまたはレスポンスに作用します。ポリシーがリクエスト フローで実行される場合は、リクエスト メッセージに作用します。レスポンス フローで実行される場合は、デフォルトでレスポンスに作用します。

<AssignTo> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</HTTPModifier>

例 1

次の例では、<AssignTo> のテキストでメッセージが指定されていません。これは、ポリシーの実行場所に応じてポリシーが request メッセージまたは response メッセージのいずれかで動作することを意味します。

<HTTPModifier name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>-- no-op -->
  ...
</HTTPModifier>

createNew="false" を指定していて、メッセージ名を明示的に指定しない場合、<AssignTo> の他の属性は無関係です。この場合、<AssignTo> 要素を完全に省略することもできます。

例 2

次の例では、既存のオブジェクトを上書きして、新しいリクエスト オブジェクトを作成します。

<HTTPModifier name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
  ...
</HTTPModifier>

新しいリクエスト オブジェクトまたはレスポンス オブジェクトを作成すると、HTTPModifier ポリシーの他の要素(<Add><Set> など)は、その新しいリクエスト オブジェクトで機能します。

フローの後続部分で他のポリシーの新しいリクエスト オブジェクトにアクセスできます。また、ServiceCallout ポリシーを使用して新しいリクエスト オブジェクトを外部サービスに送信することもできます。

例 3

次の例は、MyRequestObject という名前の新しいリクエスト オブジェクトを作成しています。

<HTTPModifier name="assignto-3">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</HTTPModifier>

新しいリクエスト オブジェクトまたはレスポンス オブジェクトを作成すると、HTTPModifier ポリシーの他の要素(<Add><Set> など)は、その新しいリクエスト オブジェクトで機能します。

フローの後続部分で他のポリシーの新しいリクエスト オブジェクトに名前でアクセスできます。また、ServiceCallout ポリシーを使用して新しいリクエスト オブジェクトを外部サービスに送信することもできます。

次の表に、<AssignTo> の属性を示します。

属性 説明 必須かどうか 種類
createNew

値を割り当てるときに、このポリシーによって新しいメッセージが作成されるかどうかを決定します。

true の場合、ポリシーは type で指定された型(request または response)の新しい変数を作成します。新しい変数の名前を指定しない場合、ポリシーは type の値に応じて新しいリクエストまたはレスポンス オブジェクトを作成します。

false の場合、ポリシーは次のいずれかの方法で対応します。

  • <AssignTo> で変数名をリクエストまたはレスポンスに解決できる場合は、処理が続行されます。たとえば、ポリシーがリクエスト フロー内にある場合、変数はリクエスト オブジェクトです。ポリシーがレスポンス内にある場合、変数はレスポンス オブジェクトです。
  • <AssignTo> を解決できない場合、またはメッセージ以外のタイプに解決される場合は、エラーがスローされます。

createNew の指定がない場合、このポリシーは次のいずれかの処理を行います。

  • <AssignTo> がメッセージに解決される場合は、次のステップに進みます。
  • <AssignTo> を解決できない場合、またはメッセージ以外のタイプに解決された場合は、type で指定されたタイプの新しい変数が作成されます。
省略可 ブール値
transport

リクエストまたはレスポンスのメッセージ タイプにトランスポート タイプを指定します。

デフォルト値は http(サポートされる唯一の値)です。

省略可 文字列
type createNewtrue の場合、新しいメッセージのタイプを指定します。有効な値は request または response です。

デフォルト値は request です。この属性を省略すると、Apigee ではこのポリシーが実行されるフロー内の場所に応じて、リクエストまたはレスポンスが作成されます。

省略可 文字列

<DisplayName>

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value N/A
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used.
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Example

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

The <DisplayName> element has no attributes or child elements.

<IgnoreUnresolvedVariables>

未解決の変数を検出したときに処理を停止するかどうかを決定します。

デフォルト値 いいえ
必須かどうか 省略可
ブール値
親要素 <HTTPModifier>
子要素 なし

true を設定すると、未解決の変数を無視して処理を続行できます。それ以外の場合は false を設定します。デフォルト値は false です。

<IgnoreUnresolvedVariables>true に設定することは、変数値の設定と取得だけに限られるという点で、<HTTPModifier>continueOnErrortrue に設定することとは異なります。continueOnErrortrue に設定すると、Apigee は変数の使用時に発生したエラーだけでなく、すべてのエラーを無視します。

<IgnoreUnresolvedVariables> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</HTTPModifier>

例 1

次の例では、<IgnoreUnresolvedVariables>true に設定されます。

<HTTPModifier name="HM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</HTTPModifier>

<IgnoreUnresolvedVariables>true に設定されているため、possibly-defined-variable 変数が定義されていない場合、このポリシーはエラーをスローしません。

<Remove>

メッセージからヘッダー、クエリ パラメータ、フォーム パラメータを削除します。空のタグを指定すると、対応するすべてのパラメータ(ヘッダー、formparams、queryparams など)が削除されます。

影響を受けるメッセージはリクエストまたはレスポンスであることが考えられます。<AssignTo> 要素を使用して、<Remove> の操作対象のメッセージを指定します。

デフォルト値 なし
必須かどうか 省略可
複合型
親要素 <HTTPModifier>
子要素 <FormParams>
<Headers>
<QueryParams>

<Remove> の一般的な用途は、受信したリクエスト オブジェクトから機密情報を含むクエリ パラメータまたはヘッダーを削除し、バックエンド サーバーに渡さないようにすることです。

<Remove> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

例 1

次の例では、request オブジェクトからすべてのフォーム パラメータとクエリ パラメータを削除します。

<HTTPModifier name="HM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、メッセージ オブジェクトからすべてを削除します。

<HTTPModifier name="HM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</HTTPModifier>

これは通常、<Set> 要素を使用してメッセージに置換値を設定する場合にのみ行います。

<FormParams><Remove> の子)

指定されたフォーム パラメータをリクエストから削除します。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
<FormParam> 要素の配列または空の配列
親要素 <Remove>
子要素 <FormParam>

<FormParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Remove>
</HTTPModifier>

例 1

次の例では、リクエストから 3 つのフォーム パラメータが削除されます。

<HTTPModifier name="HM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、リクエストからすべてのフォーム パラメータが削除されます。

<HTTPModifier name="HM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 3

同じ名前のフォーム パラメータが複数ある場合は、次の構文を使用します。

<HTTPModifier name="HM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

この例では、f1f2 と、f3 の 2 番目の値が削除されます。f3 の値が 1 つしかない場合は削除されません。

<FormParams> は、次の条件を満たす場合にのみ使用できます。

  • メッセージ タイプ: リクエスト
  • Content-Type: application/x-www-form-urlencoded

<Headers><Remove> の子)

<AssignTo> 要素によって指定されたリクエストやレスポンスから、指定された HTTP ヘッダーを削除します。

デフォルト値 なし
必須かどうか 省略可
<Header> 要素の配列または空の配列
親要素 <Remove>
子要素 <Header>

<Headers> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Remove>
</HTTPModifier>

例 1

次の例では、リクエストから user-agent ヘッダーが削除されます。

<HTTPModifier name="HM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、リクエストからすべてのヘッダーが削除されます。

<HTTPModifier name="HM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 3

同じ名前のヘッダーが複数ある場合は、次の構文を使用します。

<HTTPModifier name="HM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

この例では、h1h2 と、h3 の 2 番目の値がリクエストから削除されます。h3 の値が 1 つしかない場合は削除されません。

<QueryParams><Remove> の子)

指定されたクエリ パラメータをリクエストから削除します。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
<QueryParam> 要素の配列または空の配列
親要素 <Remove>
子要素 <QueryParam>

<QueryParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

例 1

次の例では、リクエストから単一のクエリ パラメータが削除されます。

<HTTPModifier name="HM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

次の例では、リクエストからすべてのクエリ パラメータが削除されます。

<HTTPModifier name="HM-remove-queryparams-2">
  &tl;Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 3

同じ名前のクエリ パラメータが複数ある場合は、次の構文を使用します。

<HTTPModifier name="HM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

この例では、qp1qp2 と、qp3 の 2 番目の値がリクエストから削除されます。qp3 の値が 1 つしかない場合は削除されません。

例 4

次の例では、リクエストから apikey クエリ パラメータが削除されます。

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<QueryParams> は、次の条件を満たす場合にのみ使用できます。

  • HTTP 動詞: GETPOST
  • メッセージ タイプ: リクエスト

<Set>

<AssignTo> 要素で指定されたリクエストまたはレスポンス メッセージに情報を設定します。<Set> は、元のメッセージにすでに存在するヘッダー、クエリ、フォーム パラメータを上書きします。存在しない場合は、新しいパラメータを追加します。

HTTP メッセージのヘッダー、クエリ パラメータ、フォーム パラメータは複数の値を保持できます。ヘッダーまたはパラメータに値を追加するには、代わりに <Add> 要素を使用します。

デフォルト値 なし
必須かどうか 省略可
複合型
親要素 <HTTPModifier>
子要素 <FormParams>
<Headers>
<Path>
<QueryParams>
<StatusCode>
<Verb>
<Version>

<Set> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

次の例では、特定のヘッダーが設定されます。このポリシーがリクエスト フローに接続されている場合、アップストリーム システムは元のインバウンド リクエストに含まれていない追加のヘッダーを受信できます。

<HTTPModifier name="HM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<FormParams><Set> の子)

リクエストに既存のフォーム パラメータを上書きして、この要素で指定される新しい値に置き換えます。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
<FormParam> 要素の配列
親要素 <Set>
子要素 <FormParam>

<FormParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Set>
</HTTPModifier>

例 1

次の例では、myparam というフォーム パラメータが新しいカスタム リクエストの request.header.myparam 変数の値に設定されています。

<HTTPModifier name="HM-set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
  <AssignTo createNew="true" transport="http" type="request>>MyCustomRequest</AssignTo>
</HTTPModifier>

<FormParams> は、次の条件を満たす場合にのみ使用できます。

  • HTTP 動詞: POST
  • メッセージ タイプ: リクエスト

ポリシー(<Add><FormParams/></Add>)で空のフォーム パラメータを定義した場合、このポリシーではフォーム パラメータが追加されません。これは、<FormParams> を省略した場合と同じです。

<Set> は、メッセージの Content-Typeapplication/x-www-form-urlencoded に変更した後、それをターゲット エンドポイントに送信します。

<Headers><Set> の子)

<AssignTo> 要素で指定されたリクエストやレスポンス内の既存の HTTP ヘッダーを上書きします。

デフォルト値 なし
必須かどうか 省略可
<Header> 要素の配列
親要素 <Set>
子要素 <Header>

<Headers> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Set>
</HTTPModifier>

例 1

次の例では、x-ratelimit-remaining ヘッダーが ratelimit.Quota-1.available.count 変数の値に設定されています。

<HTTPModifier name="HM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

ポリシーで空のヘッダー(<Set><Headers/></Set>)を定義した場合、このポリシーではヘッダーが設定されません。これは、<Headers> を省略した場合と同じ効果があります。

<Path><Set> の子)

<QueryParams><Set> の子)

リクエストの既存のクエリ パラメータを新しい値で上書きします。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
<QueryParam> 要素の配列
親要素 <Set>
子要素 <QueryParam>

<QueryParams> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Set>
</HTTPModifier>

例 1

次の例では、address クエリ パラメータが request.header.address 変数の値に設定されています。

<HTTPModifier name="HM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</HTTPModifier>

<QueryParams> は、次の条件を満たす場合にのみ使用できます。

  • HTTP 動詞: GETPOST
  • メッセージ タイプ: リクエスト

ポリシー(<Set><QueryParams/></Set>)で空のクエリ パラメータを定義した場合、このポリシーではクエリ パラメータが設定されません。これは、<QueryParams> を省略した場合と同じです。

<StatusCode><Set> の子)

レスポンスにステータス コードを設定します。この要素はリクエストには作用しません。

デフォルト値 「200」(<AssignTo>createNew 属性が「true」に設定されている場合)
必須かどうか 省略可
文字列または VARIABLE
親要素 <Set>
子要素 なし

<StatusCode> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
  </Set>
</HTTPModifier>

例 1

次の例では、単純なステータス コードが設定されます。

<HTTPModifier name="HM-set-statuscode-404">
  <Set>
    <StatusCode>404<<StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

例 2

<StatusCode> のコンテンツがメッセージ テンプレートとして扱われます。このため、次の例に示すように、中かっこで囲まれた変数名がランタイム時に参照先変数の値に置き換えられます。

<HTTPModifier name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

<StatusCode> は、次の条件を満たす場合にのみ使用できます。

  • メッセージ タイプ: レスポンス

<Verb><Set> の子)

リクエストに HTTP 動詞を設定します。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
文字列または VARIABLE
親要素 <Set>
子要素 なし

<Verb> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</HTTPModifier>

例 1

次の例では、リクエストに単純な動詞が設定されます。

<HTTPModifier name="HM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

例 2

<Verb> のコンテンツがメッセージ テンプレートとして扱われます。このため、中かっこで囲まれた変数名がランタイム時に参照先変数の値に置き換えられます。

次の例では、変数を使用して動詞が入力されます。

<HTTPModifier name="HM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<Verb> は、次の条件を満たす場合にのみ使用できます。

  • メッセージ タイプ: リクエスト

<Version><Set> の子)

リクエストに HTTP バージョンを設定します。この要素はレスポンスには作用しません。

デフォルト値 なし
必須かどうか 省略可
文字列または VARIABLE
親要素 <Set>
子要素 なし

<Version> 要素の構文は次のとおりです。

構文

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

例 1

次の例では、バージョン番号が 1.1 に設定されています。

<HTTPModifier name="HM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
</HTTPModifier>

例 2

次の例では、中かっこで囲まれた変数を使用してバージョン番号が設定されます。

<HTTPModifier name="HM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<Version> のコンテンツがメッセージ テンプレートとして扱われます。このため、中かっこで囲まれた変数名がランタイム時に参照先変数の値に置き換えられます。

<Version> は、次の条件を満たす場合にのみ使用できます。

  • メッセージ タイプ: リクエスト

カスタム リクエスト メッセージを作成する

HTTPModifier を使用してカスタム リクエスト メッセージを作成できます。作成したカスタム リクエストは、以下の方法で使用できます。

  • 他のポリシーでその変数にアクセスする
  • 外部サービスに渡す

カスタム リクエスト メッセージを作成するには、HTTPModifier ポリシーに <AssignTo> 要素を使用します。次の例のように、createNewtrue に設定し、要素の本文に新しいメッセージの名前を指定します。

<HTTPModifier name="assignto-3">
    <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
    ...
  </HTTPModifier>

デフォルトの場合、Apigee はカスタム リクエスト メッセージに対して何も行いません。作成後、Apigee は元のリクエストでフローを続行します。カスタム リクエストを使用するには、リクエスト メッセージを使用するポリシーを追加し、そのポリシーの構成で新しく作成されたリクエスト メッセージを明示的に参照します。これにより、カスタム リクエストを外部サービス エンドポイントに渡すことができます。

次の例では、カスタム リクエスト メッセージが作成されます。

例 1

次の例では、HTTPModifier を使用してカスタム リクエスト オブジェクトを作成します。

<HTTPModifier name="HTTPModifier-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</HTTPModifier>

この例では

  • MyCustomRequest という新しいリクエスト メッセージ オブジェクトが作成されます。
  • MyCustomRequest では、このポリシーは次の処理を行います。
    • カスタム メッセージの address クエリ パラメータを受信リクエストの addy クエリ パラメータの値に設定します。
    • HTTP 動詞を GET に設定します。
  • <IgnoreUnresolvedVariables>false に設定します。<IgnoreUnresolvedVariables>false の場合、ポリシー構成で参照されている変数のいずれかが存在しないと、Apigee は API フローで障害状態に入ります。

例 2

次は、HTTPModifier を使用してカスタム リクエスト オブジェクトを作成する方法を示すもう一つの例です。

<HTTPModifier name="HTTPModifier-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
  </Set>
</HTTPModifier>

この例では、partner.request という新しいカスタム リクエストを作成しています。次に、新しいリクエストに <Verb> を設定します。

カスタム メッセージのさまざまなプロパティには、フローの後続部分で出現する別の HTTPModifier ポリシーでアクセスできます。次の例では、名前付きカスタム レスポンスからヘッダーの値を取得し、リクエスト メッセージの新しいヘッダーに配置します。

<HTTPModifier name="HM-Set-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</HTTPModifier>

エラーコード

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
entities.UnresolvedVariable 500 Message Template Variable in Undefined or out of scope.
steps.httpmodifier.InvalidStatusCode 500 The resolved value of the status code is not valid. See the fault string for more information.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidIndex If the index specified in the <Remove> elements of the HTTPModifier policy is 0 or a negative number, then deployment of the API Proxy fails.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
httpmodifier.POLICY_NAME.failed POLICY_NAME is the user-specified name of the policy that threw the fault. httpmodifier.HM-SetResponse.failed = true

Example error response

{
   "fault":{
      "detail":{
         "errorcode":"steps.httpmodifier.InvalidStatusCode"
      },
      "faultstring":"HTTPModifier[HM-SetResponse]: Invalid status code bad_request"
   }
}

Example fault rule

<FaultRule name="HTTPModifier Faults">
    <Step>
        <Name>HM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "InvalidStatusCode")</Condition>
    </Step>
    <Condition>(httpmodifier.failed = true)</Condition>
</FaultRule>

スキーマ

各ポリシータイプは XML スキーマ(.xsd)によって定義されます。参照用のポリシー スキーマは GitHub から入手できます。