キャッシュからの取得
適用対象: すべての API Management レベル
cache-lookup
ポリシーを使用し、キャッシュを検索して、キャッシュに格納された有効な応答があればそれを返します。 このポリシーを適用できるのは、応答の内容が一定期間にわたって静的である場合です。 応答のキャッシュを使用すると、バックエンド Web サーバーの帯域幅および処理の要件が低減され、API コンシューマーによって認識される遅延が小さくなります。
Note
このポリシーには、対応するキャッシュに格納ポリシーが必要です。
重要
組み込みのキャッシュは揮発性であり、同じ API Management サービスの同じリージョン内のすべてのユニットによって共有されます。
Note
ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 このポリシーの構成に役立つ、ガイド付きのフォーム ベース エディターがポータルに用意されています。 API Management ポリシーを設定または編集する方法について説明します。
ポリシー ステートメント
<cache-lookup vary-by-developer="true | false" vary-by-developer-groups="true | false" caching-type="prefer-external | external | internal" downstream-caching-type="none | private | public" must-revalidate="true | false" allow-private-response-caching="@(expression to evaluate)">
<vary-by-header>Accept</vary-by-header>
<!-- should be present in most cases -->
<vary-by-header>Accept-Charset</vary-by-header>
<!-- should be present in most cases -->
<vary-by-header>Authorization</vary-by-header>
<!-- should be present when allow-private-response-caching is "true"-->
<vary-by-header>header name</vary-by-header>
<!-- optional, can be repeated -->
<vary-by-query-parameter>parameter name</vary-by-query-parameter>
<!-- optional, can be repeated -->
</cache-lookup>
属性
属性 | 説明 | 必要 | Default |
---|---|---|---|
allow-private-response-caching | true に設定すると、承認ヘッダーを含む要求をキャッシュできます。 ポリシー式を使用できます。 |
いいえ | false |
caching-type | 属性の次の値のいずれかを選択します。 - internal (組み込みの API Management キャッシュを使用する場合)、- external (- に関するページの説明に従って、外部キャッシュを使用する場合)、- prefer-external (構成されている場合は外部キャッシュ、そうでない場合は内部キャッシュを使用する場合)。ポリシー式は使用できません。 |
いいえ | prefer-external |
downstream-caching-type | この属性の値は次のいずれかに設定する必要があります。 - none - ダウンストリーム キャッシュは許可されません。 - private - ダウンストリーム プライベート キャッシュが許可されます。 - public - プライベートおよび共有ダウンストリーム キャッシュが許可されます。 ポリシー式を使用できます。 |
いいえ | なし |
must-revalidate | ダウンストリーム キャッシュが有効になっているとき、この属性によって、ゲートウェイ応答での must-revalidate キャッシュ制御ディレクティブのオンとオフを切り替えます。 ポリシー式を使用できます。 |
いいえ | true |
vary-by-developer | 要求に含まれているtrue を所有している開発者アカウントごとに応答をキャッシュする場合は、true に設定します。 ポリシー式を使用できます。 |
はい | false |
vary-by-developer-groups | true に設定すると、true ごとに応答をキャッシュします。 ポリシー式を使用できます。 |
はい | false |
要素
名前 | 説明 | 必須 |
---|---|---|
vary-by-header | これらの要素を 1 つ以上追加して、指定したヘッダーの値 (Accept 、Accept-Charset 、Accept-Encoding 、Accept-Language 、Authorization 、Expect 、From 、Host 、If-Match など) ごとの応答のキャッシュを開始します。 |
いいえ |
vary-by-query-parameter | これらの要素を 1 つ以上追加して、指定したクエリ パラメーターの値ごとの応答のキャッシュを開始します。 1 つまたは複数のパラメーターを入力します。 セミコロンを区切り文字として使用します。 | いいえ |
使用法
- ポリシー セクション: inbound
- ポリシー スコープ: グローバル、ワークスペース、製品、API、操作
- ゲートウェイ: クラシック、v2、従量課金、セルフホステッド、ワークスペース
使用上の注意
- API Management は、HTTP GET 要求のキャッシュ参照のみを実行します。
vary-by-query-parameter
の使用時は、rewrite-uri テンプレートでパラメーターを宣言するか、またはcopy-unmatched-params
属性をfalse
に設定することをお勧めします。 このフラグを非アクティブ化すると、宣言されていないパラメーターはバックエンドに送信されます。
- このポリシーは、ポリシー セクションで 1 回だけ使用できます。
例
対応する cache-store ポリシーの例
<policies>
<inbound>
<base />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none" must-revalidate="true" caching-type="internal" >
<vary-by-query-parameter>version</vary-by-query-parameter>
</cache-lookup>
</inbound>
<outbound>
<cache-store duration="seconds" />
<base />
</outbound>
</policies>
ポリシー式の使用例
この例は、API Management 応答のキャッシュ時間を、バックエンド サービスの Cache-Control
ディレクティブによって指定されたバックエンド サービスの応答キャッシュ時間と一致するように構成する方法を示しています。
<!-- The following cache policy snippets demonstrate how to control API Management response cache duration with Cache-Control headers sent by the backend service. -->
<!-- Copy this snippet into the inbound section -->
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="public" must-revalidate="true" >
<vary-by-header>Accept</vary-by-header>
<vary-by-header>Accept-Charset</vary-by-header>
</cache-lookup>
<!-- Copy this snippet into the outbound section. Note that cache duration is set to the max-age value provided in the Cache-Control header received from the backend service or to the default value of 5 min if none is found -->
<cache-store duration="@{
var header = context.Response.Headers.GetValueOrDefault("Cache-Control","");
var maxAge = Regex.Match(header, @"max-age=(?<maxAge>\d+)").Groups["maxAge"]?.Value;
return (!string.IsNullOrEmpty(maxAge))?int.Parse(maxAge):300;
}"
/>
詳細については、ポリシー式およびコンテキスト変数に関する各ページを参照してください。
関連ポリシー
関連するコンテンツ
ポリシーに対する処理の詳細については、次のトピックを参照してください。