ResponseCache 政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

快取後端資源中的資料,減少傳送至資源的要求數量。視為應用程式 向同一個 URI 發出要求時,您可以使用這項政策傳回快取的回應,而非 將要求轉送至後端伺服器ResponseCache 政策有助於改善 API 的 盡可能減少延遲時間和網路流量

如果 API 使用的後端資料已更新,那麼 ResponseCache 可能最實用 只有定期更新舉例來說,假設您有一個用來公開天氣報表資料的 API 每十分鐘才會更新一次使用 ResponseCache 傳回 重新整理,即可減少傳送至後端的要求數量。這樣也能減少 網路躍點的數量

針對一般用途的短期快取,請考慮使用填入快取政策。 這項政策需要與查詢快取政策 (用於讀取快取項目) 和 撤銷快取政策 (用於撤銷項目)。

觀看這部影片,瞭解回應快取政策。

範例

10 分鐘的快取

這個範例說明如何保留 10 分鐘。

假設您有 API 位於以下網址:

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

您使用查詢參數 w 做為快取鍵。Apigee Edge 會檢查 也就是每次接收要求時查詢參數 w 的值。如果 快取中有回應時,快取中的回應訊息 傳回要求用戶端。

現在,假設您已設定如下的 ResponseCache 政策。

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

API Proxy 第一次收到下列網址的要求訊息時, 快取回應在 10 分鐘內發出第二次請求時,快取查詢會進行,也就是 快取的回應會傳回到應用程式,但不會將要求轉送至後端服務。

http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778

略過快取查詢

以下範例顯示如何略過快取查詢,並保留快取 重新整理。另請參閱 這部影片,說明如何使用 SkipCacheLookup。

系統會在要求路徑中評估選用的 SkipCacheLookup 條件 (如果已設定)。 如果條件評估為 true,則會略過快取查詢,且快取會 重新整理。

使用條件式快取重新整理功能的常見用途,就是定義特定 HTTP 使條件判斷為 true 的標頭。編寫指令碼的用戶端應用程式 您必須設定成定期提交含有適當 HTTP 標頭的要求 會造成回應快取重新整理。

舉例來說,假設在以下網址呼叫 API:

'http://{org_name}-test.apigee.net/weather/forecastrss?w=23424778' -H "bypass-cache:true"

現在,請設想該 Proxy 上設定的 ResponseCache 政策。請注意, 略過快取條件已設為 true。

<ResponseCache name="ResponseCache">
    <CacheKey>
        <KeyFragment ref="request.queryparam.w" />
    </CacheKey>
    <!-- Explicitly refresh the cached response -->
    <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
    <ExpirySettings>
        <TimeoutInSeconds>600</TimeoutInSeconds>
    </ExpirySettings>
</ResponseCache>

如要進一步瞭解條件,請參閱「流程變數和 限制條件

元素參照

元素參照會說明政策的元素和屬性。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
    <DisplayName>Response Cache 1</DisplayName>
    <Properties/>
    <CacheKey>
        <Prefix/>
        <KeyFragment ref="request.uri" />
    </CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
        <ExpiryDate/>
        <TimeOfDay/>
        <TimeoutInSeconds ref="flow.variable.here">300</TimeoutInSeconds>
    </ExpirySettings>
    <CacheResource>cache_to_use</CacheResource>
    <CacheLookupTimeoutInSeconds/>
    <ExcludeErrorResponse/>
    <SkipCacheLookup/>
    <SkipCachePopulation/>
    <UseAcceptHeader/>
    <UseResponseCacheHeaders/>
</ResponseCache>

&lt;ResponseCache&gt;屬性

<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">

下表說明所有政策父項元素的共同屬性:

屬性 說明 預設 存在必要性
name

政策的內部名稱。name 屬性的值可以 包含英文字母、數字、空格、連字號、底線和半形句號。此值不能 超過 255 個半形字元

視需要使用 <DisplayName> 元素,為政策加上標籤: 管理使用者介面 Proxy 編輯器,使用不同的自然語言名稱。

不適用 必填
continueOnError

如果設為「false」,系統會在政策失敗時傳回錯誤。這是可預期的情況 大多數政策的行為

如果設為 true,即使政策已發生,流程執行作業仍會繼續執行 失敗。

false 選用
enabled

如要強制執行政策,請設為 true

設為 false 即可停用政策。這項政策不會 仍會強制執行 政策。

true 選用
async

此屬性已淘汰。

false 已淘汰

&lt;DisplayName&gt;元素

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然語言名稱。

<DisplayName>Policy Display Name</DisplayName>
預設

不適用

如果省略這個元素,政策的 name 屬性值會是

存在必要性 選用
類型 字串

&lt;CacheKey&gt;元素

設定儲存在快取中資料的唯一指標。

快取金鑰的大小上限為 2 KB。

<CacheKey>
    <Prefix>string</Prefix>
    <KeyFragment ref="variable_name" />
    <KeyFragment>literal_string</KeyFragment>
</CacheKey>

預設:

不適用

所在地:

必填

類型:

不適用

<CacheKey> 會建立儲存在快取中每個資料的名稱。 通常使用實體標頭或查詢參數中的值來設定索引鍵。此時,您只能 元素的 ref 屬性指定了包含鍵值的變數。

在執行階段,<KeyFragment> 值會在前面加上 <Scope> 元素值或 <Prefix> 值。舉例來說, 產生的快取金鑰 UserToken__apiAccessToken__&lt;value_of_client_id&gt;:

<CacheKey>
    <Prefix>UserToken</Prefix>
    <KeyFragment>apiAccessToken</KeyFragment>
    <KeyFragment ref="request.queryparam.client_id" />
</CacheKey>

請將 <CacheKey> 元素與 <Prefix><Scope>。詳情請參閱使用快取金鑰

&lt;CacheLookupTimeoutInSeconds&gt;元素

指定快取查詢失敗的秒數後,系統會視為 快取失敗。如果發生這種情況,流程會沿著快取遺漏的路徑繼續執行。

<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>

預設:

30

所在地:

選用

類型:

整數

&lt;CacheResource&gt;元素

指定應儲存訊息的快取。省略這個元素即可使用其中包含 共用快取。如果希望能夠 清除快取中的項目。詳情請參閱「快取」。

<CacheResource>cache_to_use</CacheResource>

預設:

不適用

所在地:

選用

類型:

字串

如要進一步瞭解如何設定快取,請參閱建立及編輯環境 快取。

&lt;CacheKey&gt;/&lt;KeyFragment&gt;元素

指定要納入快取金鑰的值,建立用來比對的命名空間 快取回應產生的要求。

<KeyFragment ref="variable_name"/>
<KeyFragment>literal_string</KeyFragment>

預設:

不適用

所在地:

選用

類型:

不適用

這可以是鍵 (您提供的靜態名稱) 或值 (由 參照變數)。所有指定片段組合 (加上前置字串) 都會串連 建立快取金鑰

<KeyFragment>apiAccessToken</KeyFragment>
<KeyFragment ref="request.queryparam.client_id" />

請將 <KeyFragment> 元素與 <Prefix><Scope>。詳情請參閱使用快取金鑰

屬性

屬性 類型 預設 必填 說明
參考資料 字串

用來取得值的變數。如果這個元素包含 一個常值。

&lt;CacheKey&gt;/&lt;Prefix&gt;元素

指定要做為快取金鑰前置字串的值。

<Prefix>prefix_string</Prefix>

預設:

不適用

所在地:

選用

類型:

字串

如要指定自己的值,請使用這個值,而非 <Scope> 而非 <Scope> 列舉值。如已定義 <Prefix> 會在寫入快取的項目前面加上快取金鑰值。A 罩杯 <Prefix> 元素值會覆寫 <Scope> 元素 值。

請將 <Prefix> 元素與 <CacheKey><Scope>。詳情請參閱使用快取金鑰

&lt;ExcludeErrorResponse&gt;元素

目前預設情況下,這項政策會快取 HTTP 回應,但會盡可能包含「任何」可能 狀態碼。這表示成功和錯誤回應都會快取下來。舉例來說,如果回應中包含 根據預設,2xx 和 3xx 狀態碼都會快取。

如果您「不想」快取目標,請將這個元素設為 true 傳回 HTTP 錯誤狀態碼的回應;只有狀態碼從 200 到 205 的回應,才會 就會快取此元素Edge 只會計算這些 HTTP 狀態碼 「成功」您無法變更這項關聯。

如需有關此元素實用的回應快取模式討論,請參閱這篇社群貼文

注意:在日後推出的版本 (待確認) 中,這項設定會預設為 元素就會變更為 true查看 Apigee 版本資訊

<ExcludeErrorResponse>true</ExcludeErrorResponse>

預設:

false

所在地:

選用

類型:

布林值

&lt;ExpirySettings&gt;元素

指定快取項目的到期時間。分享螢幕畫面時,<TimeoutInSeconds> 會覆寫 <TimeOfDay><ExpiryDate>

<ExpirySettings>
  <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
  <TimeoutInSeconds ref="duration_variable">seconds_until_expiration</TimeoutInSeconds>
  <ExpiryDate ref="date_variable">expiration_date</ExpiryDate>
</ExpirySettings>

預設:

不適用

所在地:

必填

類型:

不適用

&lt;ExpirySettings&gt;/&lt;ExpiryDate&gt;元素

指定快取項目的到期日。使用以下格式:mm-dd-yyyy。 存在時,此元素的同層 (<TimeoutInSeconds>) 和覆寫值 <ExpiryDate>

<ExpirySettings>
    <ExpiryDate ref="{date_variable}">expiration_date</ExpiryDate>
</ExpirySettings>

預設:

不適用

所在地:

選用

類型:

字串

屬性

<ExpiryDate ref="" />
屬性 說明 預設 存在必要性 類型
參考資料

用來取得值的變數。如果這個元素包含 一個常值。

不適用 選用 字串

&lt;ExpirySettings&gt;/&lt;TimeOfDay&gt;元素

快取項目的到期時間。請使用以下形式:hh:mm:ss。 存在時,此元素的同層 (<TimeoutInSeconds>) 和覆寫值 <TimeOfDay>

以 HH:mm:ss 的格式輸入時間,其中 HH 代表以 24 小時製表示的小時。適用對象 例如下午 2:30 的 14:30:00

指定時段時,預設的語言代碼和時區會因代碼的位置而異 執行中 (設定政策時無法得知)。如要瞭解如何設定 語言代碼,請參閱建立及編輯 環境快取

<ExpirySettings>
    <TimeOfDay ref="time_variable">expiration_time</TimeOfDay>
</ExpirySettings>

預設:

不適用

所在地:

選用

類型:

字串

屬性

屬性 說明 預設 存在必要性 類型
參考資料 包含到期時間值的變數。 不適用 選用 字串

&lt;ExpirySettings&gt;/&lt;TimeoutInSec&gt;元素

快取項目的到期時間 (以秒為單位)。