查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
快取後端資源中的資料,減少傳送至資源的要求數量。視為應用程式 向同一個 URI 發出要求時,您可以使用這項政策傳回快取的回應,而非 將要求轉送至後端伺服器ResponseCache 政策有助於改善 API 的 盡可能減少延遲時間和網路流量
如果 API 使用的後端資料已更新,那麼 ResponseCache 可能最實用 只有定期更新舉例來說,假設您有一個用來公開天氣報表資料的 API 每十分鐘才會更新一次使用 ResponseCache 傳回 重新整理,即可減少傳送至後端的要求數量。這樣也能減少 網路躍點的數量
針對一般用途的短期快取,請考慮使用填入快取政策。 這項政策需要與查詢快取政策 (用於讀取快取項目) 和 撤銷快取政策 (用於撤銷項目)。
觀看這部影片,瞭解回應快取政策。
範例
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>
<ResponseCache>屬性
<ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
下表說明所有政策父項元素的共同屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
name |
政策的內部名稱。 視需要使用 |
不適用 | 必填 |
continueOnError |
如果設為「 如果設為 |
false | 選用 |
enabled |
如要強制執行政策,請設為 設為 |
true | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName>元素
除 name
屬性外,一併使用
管理 UI Proxy 編輯器,使用不同的自然語言名稱。
<DisplayName>Policy Display Name</DisplayName>
預設 |
不適用 如果省略這個元素,政策的 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<CacheKey>元素
設定儲存在快取中資料的唯一指標。
快取金鑰的大小上限為 2 KB。
<CacheKey> <Prefix>string</Prefix> <KeyFragment ref="variable_name" /> <KeyFragment>literal_string</KeyFragment> </CacheKey>
預設: |
不適用 |
所在地: |
必填 |
類型: |
不適用 |
<CacheKey>
會建立儲存在快取中每個資料的名稱。
通常使用實體標頭或查詢參數中的值來設定索引鍵。此時,您只能
元素的 ref 屬性指定了包含鍵值的變數。
在執行階段,<KeyFragment>
值會在前面加上
<Scope>
元素值或 <Prefix>
值。舉例來說,
產生的快取金鑰
UserToken__apiAccessToken__
<value_of_client_id>:
<CacheKey> <Prefix>UserToken</Prefix> <KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id" /> </CacheKey>
請將 <CacheKey>
元素與
<Prefix>
和<Scope>
。詳情請參閱使用快取金鑰。
<CacheLookupTimeoutInSeconds>元素
指定快取查詢失敗的秒數後,系統會視為 快取失敗。如果發生這種情況,流程會沿著快取遺漏的路徑繼續執行。
<CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>
預設: |
30 |
所在地: |
選用 |
類型: |
整數 |
<CacheResource>元素
指定應儲存訊息的快取。省略這個元素即可使用其中包含 共用快取。如果希望能夠 清除快取中的項目。詳情請參閱「快取」。
<CacheResource>cache_to_use</CacheResource>
預設: |
不適用 |
所在地: |
選用 |
類型: |
字串 |
如要進一步瞭解如何設定快取,請參閱建立及編輯環境 快取。
<CacheKey>/<KeyFragment>元素
指定要納入快取金鑰的值,建立用來比對的命名空間 快取回應產生的要求。
<KeyFragment ref="variable_name"/> <KeyFragment>literal_string</KeyFragment>
預設: |
不適用 |
所在地: |
選用 |
類型: |
不適用 |
這可以是鍵 (您提供的靜態名稱) 或值 (由 參照變數)。所有指定片段組合 (加上前置字串) 都會串連 建立快取金鑰
<KeyFragment>apiAccessToken</KeyFragment> <KeyFragment ref="request.queryparam.client_id" />
請將 <KeyFragment>
元素與
<Prefix>
和<Scope>
。詳情請參閱使用快取金鑰。
屬性
屬性 | 類型 | 預設 | 必填 | 說明 |
---|---|---|---|---|
參考資料 | 字串 | 否 |
用來取得值的變數。如果這個元素包含 一個常值。 |
<CacheKey>/<Prefix>元素
指定要做為快取金鑰前置字串的值。
<Prefix>prefix_string</Prefix>
預設: |
不適用 |
所在地: |
選用 |
類型: |
字串 |
如要指定自己的值,請使用這個值,而非 <Scope>
而非 <Scope>
列舉值。如已定義
<Prefix>
會在寫入快取的項目前面加上快取金鑰值。A 罩杯
<Prefix>
元素值會覆寫 <Scope>
元素
值。
請將 <Prefix>
元素與
<CacheKey>
和<Scope>
。詳情請參閱使用快取金鑰。
<ExcludeErrorResponse>元素
目前預設情況下,這項政策會快取 HTTP 回應,但會盡可能包含「任何」可能 狀態碼。這表示成功和錯誤回應都會快取下來。舉例來說,如果回應中包含 根據預設,2xx 和 3xx 狀態碼都會快取。
如果您「不想」快取目標,請將這個元素設為 true
傳回 HTTP 錯誤狀態碼的回應;只有狀態碼從 200 到 205 的回應,才會
就會快取此元素Edge 只會計算這些 HTTP 狀態碼
「成功」您無法變更這項關聯。
如需有關此元素實用的回應快取模式討論,請參閱這篇社群貼文。
注意:在日後推出的版本 (待確認) 中,這項設定會預設為 元素就會變更為 true查看 Apigee 版本資訊。
<ExcludeErrorResponse>true</ExcludeErrorResponse>
預設: |
false |
所在地: |
選用 |
類型: |
布林值 |
<ExpirySettings>元素
指定快取項目的到期時間。分享螢幕畫面時,<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>
預設: |
不適用 |
所在地: |
必填 |
類型: |
不適用 |
<ExpirySettings>/<ExpiryDate>元素
指定快取項目的到期日。使用以下格式:mm-dd-yyyy
。
存在時,此元素的同層 (<TimeoutInSeconds>
) 和覆寫值
<ExpiryDate>
。
<ExpirySettings> <ExpiryDate ref="{date_variable}">expiration_date</ExpiryDate> </ExpirySettings>
預設: |
不適用 |
所在地: |
選用 |
類型: |
字串 |
屬性
<ExpiryDate ref="" />
屬性 | 說明 | 預設 | 存在必要性 | 類型 |
---|---|---|---|---|
參考資料 |
用來取得值的變數。如果這個元素包含 一個常值。 |
不適用 | 選用 | 字串 |
<ExpirySettings>/<TimeOfDay>元素
快取項目的到期時間。請使用以下形式:hh:mm:ss
。
存在時,此元素的同層 (<TimeoutInSeconds>
) 和覆寫值
<TimeOfDay>
。
以 HH:mm:ss 的格式輸入時間,其中 HH 代表以 24 小時製表示的小時。適用對象 例如下午 2:30 的 14:30:00
指定時段時,預設的語言代碼和時區會因代碼的位置而異 執行中 (設定政策時無法得知)。如要瞭解如何設定 語言代碼,請參閱建立及編輯 環境快取。
<ExpirySettings> <TimeOfDay ref="time_variable">expiration_time</TimeOfDay> </ExpirySettings>
預設: |
不適用 |
所在地: |
選用 |
類型: |
字串 |
屬性
屬性 | 說明 | 預設 | 存在必要性 | 類型 |
---|---|---|---|---|
參考資料 | 包含到期時間值的變數。 | 不適用 | 選用 | 字串 |
<ExpirySettings>/<TimeoutInSec>元素
快取項目的到期時間 (以秒為單位)。