本頁內容適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
結果
提供以政策為依據的存取權,可存取 Apigee 中提供的鍵/值對應 (KVM) 儲存空間。
您可以設定 KeyValueMapOperations 政策,分別指定 PUT
、GET
或 DELETE
作業,從現有名稱對應中儲存、擷取及刪除鍵/值組合。(政策至少須執行其中一項作業)。
這項政策是可擴充政策,使用這項政策可能會產生費用或影響用量,具體情況取決於您的 Apigee 授權。如要瞭解政策類型和使用方式的影響,請參閱「政策類型」。
影片:以下影片簡要介紹了 KVM。
範例
使用文字值 PUT KVM
執行下列政策時,系統會建立名為 FooKVM
的加密 KVM,然後建立名為 FooKey_1
的金鑰,並以字串常值 foo
和 bar
設定兩個值 (不是以從變數擷取的值設定)。在下一個範例中,當您GET
鍵時,您會指定索引編號來擷取所需的值。
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="FooKVM" mapIdentifier="FooKVM"> <DisplayName>FooKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Put> <Key> <Parameter>FooKey_1</Parameter> </Key> <Value>foo</Value> <Value>bar</Value> </Put> </KeyValueMapOperations>
請注意,範圍是 environment
。也就是說,您可以在管理 UI 中,依序點選「APIs」>「Environment Configuration」>「Key Value Maps」,查看 KVM。該頁面顯示的 KVM 全都屬於所選環境。
從常值取得 KVM
這項政策會查看上一個範例中的 FooKVM
對應,從 FooKey_1
鍵取得第二個值 (index="2"),並將該值儲存在名為 foo_variable
的變數中。
<KeyValueMapOperations mapIdentifier="FooKVM" async="false" continueOnError="false" enabled="true" name="GetKVM"> <DisplayName>GetKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="foo_variable" index="2"> <Key> <Parameter>FooKey_1</Parameter> </Key> </Get> </KeyValueMapOperations>
動態存取 KVM
本政策使用 <MapName>
元素,透過流程變數動態參照 KVM。元素會從流程變數取得 KVM ID。請注意,系統會省略 mapIdentifier
屬性;您無法將 <MapName>
與 mapIdentifier
屬性搭配使用。
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="GetKVM"> <DisplayName>GetKVM</DisplayName> <MapName ref="flow.variable"/> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="foo_variable" index="2"> <Key> <Parameter>FooKey_1</Parameter> </Key> </Get> </KeyValueMapOperations>
使用變數 PUT KVM
實用的 KVM 簡單範例是網址縮短服務。KVM 可設定為儲存縮短網址和對應的完整網址。
這個政策範例會建立 KVM。這項政策會使用 PUT
指令,將含有兩個相關值的鍵放入名為 urlMapper
的 KVM。
<KeyValueMapOperations name="putUrl" mapIdentifier="urlMapper"> <Scope>apiproxy</Scope> <Put override="true"> <Key> <Parameter ref="urlencoding.requesturl.hashed"/> </Key> <Value ref="urlencoding.longurl.encoded"/> <Value ref="request.queryparam.url"/> </Put> </KeyValueMapOperations>
這個範例中的鍵 urlencoding.requesturl.hashed
是自訂變數的範例。系統會透過程式碼 (例如 JavaScript 或 Java) 產生雜湊要求網址,然後儲存在這個變數中,KeyValueMapOperations 政策可存取該變數。
系統會為每個鍵 requesturl.hashed
儲存兩個值:
- 名為
urlencoding.longurl.encoded
的自訂變數內容 - 預先定義變數
request.queryparam.url
的內容
舉例來說,當政策在執行階段執行時,變數的值可能如下所示:
urlencoding.requesturl.hashed: ed24e12820f2f900ae383b7cc4f2b31c402db1be
urlencoding.longurl.encoded: http://tinyurl.com/38lwmlr
request.queryparam.url: http://apigee.com
Apigee 的鍵/值存放區會產生下列 KVM 和項目,並限定於附加政策的 API 代理項目:
{ "entry" :[ { "name" : "ed24e12820f2f900ae383b7cc4f2b31c402db1be", "value" : "http://tinyurl.com/38lwmlr,http://apigee.com" } ], "name" : "urlMapper" }
除非刪除,否則系統會一直保留該筆記錄。鍵/值儲存項目會分散在執行雲端的 Apigee 執行個體中。
從變數取得 KVM
實用的 KVM 簡單範例是網址縮短服務。KVM 可設定為儲存縮短網址和對應的完整網址。
如要擷取 KVM 項目值 (例如「KeyValueMapOperations」PUT
分頁中涵蓋的項目),請設定政策來 GET
KVM:
<KeyValueMapOperations name="getUrl" mapIdentifier="urlMapper"> <Scope>apiproxy</Scope> <Get assignTo="urlencoding.shorturl" index='1'> <Key> <Parameter ref="urlencoding.requesturl.hashed"/> </Key> </Get> </KeyValueMapOperations>
執行這項政策時,如果 urlencoding.requesturl.hashed
變數的值為 ed24e12820f2f900ae383b7cc4f2b31c402db1be
,系統會將名為 urlencoding.shorturl
的自訂變數設為 http://tinyurl.com/38lwmlr
值。
現在資料已擷取完畢,其他政策和程式碼可以從這些變數中擷取值,進而存取資料。
從 KVM 取得值
使用 private.
屬性搭配所有變數,透過 GET
指令存取 KVM 時,即可在偵錯工作階段中隱藏 KVM 資訊。如果未使用 private.
屬性,KVM 仍會加密,但 KVM 資訊會在偵錯工作階段中解密顯示,且不會擲回例外狀況。
在本例中,變數 private.encryptedVar
會保留 KVM foo
金鑰的解密值。
<KeyValueMapOperations name="getEncrypted" mapIdentifier="encrypted_map"> <Scope>apiproxy</Scope> <Get assignTo="private.encryptedVar" index='1'> <Key> <Parameter>foo</Parameter> </Key> </Get> </KeyValueMapOperations>
現在資料已擷取完畢,其他政策和程式碼可以從該變數中擷取值,進而存取資料。
<KeyValueMapOperations>
提供以政策為準的金鑰值對應 (KVM) 存取權。
語法
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="urlMapper" > <DisplayName>Key Value Map Operations 1</DisplayName> <Scope>environment</Scope> <ExpiryTimeInSecs>300</ExpiryTimeInSecs> <InitialEntries> <Entry> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> <Value>VALUE_LITERAL</Value> </Entry> <Entry> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> <Value>VALUE_LITERAL</Value> <Value>VALUE_LITERAL</Value> </Entry> </InitialEntries> <Put override="BOOLEAN"> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> </Put> <Get assignTo="VARIABLE_NAME" index="INDEX_NUMBER"> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> </Get> <Delete> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> </Delete> </KeyValueMapOperations>
<KeyValueMapOperations> 屬性
以下範例顯示 <KeyValueMapOperations>
元素的屬性:
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="map_name">
下表說明 <KeyValueMapOperations>
元素的屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
mapIdentifier |
指定識別碼,告知政策應存取哪個 KVM。 如果缺少這個 ID 和 |
不適用 | 選用 |
下表說明所有政策父項元素的共同屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
name |
政策的內部名稱。 您可以選擇使用 |
不適用 | 必填 |
continueOnError |
將其設為 將其設為 |
false | 選用 |
enabled |
設為 設為 |
是 | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName> 元素
除了 name
屬性之外,您也可以在管理 UI 代理程式編輯器中使用不同的自然語言名稱標示政策。
<DisplayName>Policy Display Name</DisplayName>
預設 |
不適用 如果省略這個元素,系統會使用政策的 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
子元素
本節說明 KeyValueMapOperations 政策的元素和屬性:
<Delete> 元素
刪除指定的鍵/值組合。請至少使用 <Get>
、<Put>
或 <Delete>
其中一個。
請務必在根元素上使用 mapIdentifier
屬性,或使用 <MapName>
元素指定 KVM 的名稱。例如:
<Delete> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> </Delete>
預設 | 不適用 |
---|---|
存在必要性 | 如果沒有 <Get> 或 <Put> ,則為必要欄位。 |
類型 | 不適用 |
<Entry> 元素
KVM 的種子值,會在 KVM 初始化時填入。如果是 Apigee,金鑰大小上限為 2 KB。
例如:
<InitialEntries> <Entry> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> <Value>v1</Value> </Entry> <Entry> <Key> <Parameter>key_name_variable</Parameter> </Key> <Value>v3</Value> <Value>v4</Value> </Entry> </InitialEntries>
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 不適用 |
<ExclusiveCache> 元素
已淘汰,請改用 <Scope>
元素。
<ExpiryTimeInSecs> 元素
指定 Apigee 從指定 KVM 重新整理快取值的時間間隔 (以秒為單位)。
如果值為 0 或 -1,或是排除這個元素,系統會使用預設值 300 秒。例如:
<ExpiryTimeInSecs>600</ExpiryTimeInSecs>
預設 | 300 (5 分鐘) |
---|---|
存在必要性 | 選用 |
類型 | 整數 |
KVM 是一種長期保存機制,可將鍵和值儲存在 NoSQL 資料庫中。
因此,在執行階段從 KVM 讀取資料可能會降低 Proxy 效能。為提升效能,Apigee 內建機制,可在執行階段將 KVM 鍵/值快取到記憶體中。這項 KVM 作業政策一律會從快取讀取 GET
作業。
<ExpiryTimeInSecs>
元素可讓您控制政策中使用的鍵/值在從 KVM 重新整理前,於快取中儲存的時間長度。不過,GET
和 PUT
作業對快取到期時間的影響有所不同。
GET
- 首次執行 KVM GET
作業時,系統會將 KVM 中要求的鍵/值 (名稱在政策的根層級 mapIdentifier
屬性或 <MapName>
元素中指定) 載入快取,並保留在快取中,供後續 GET
作業使用,直到發生下列其中一種情況為止:
<ExpiryTimeInSecs>
中指定的秒數到期。
或- KVM 政策中的
PUT
作業會覆寫現有值 (詳見下文)。
PUT
- PUT
作業會將鍵/值寫入指定的 KVM。如果 PUT
寫入的鍵已存在於快取中,該快取會立即重新整理,並在政策的 <ExpiryTimeInSecs>
元素中指定秒數內保留新值。不過,使用 PUT
只會重新整理處理要求的單一執行階段節點中的快取。如要在每個分散式執行階段節點中重新整理快取,請使用 <ExpiryTimeInSecs>
元素為每個節點指定重新整理間隔。
範例 - 快取 KVM
GET
作業會擷取「rating」的值,並將「10」值新增至快取。政策的<ExpiryTimeInSecs>
為 60。- 30 秒後,
GET
政策會再次執行,並從快取擷取10
。 - 5 秒後,
PUT
政策會將rating
的值更新為8
,而PUT
政策的<ExpiryTimeInSecs>
為 20。快取會立即以新值重新整理,新值現在會保留在快取中 20 秒。(如果PUT
尚未發生,則第一個GET
填入的快取仍會存在 30 秒,這是原始 60 秒的剩餘時間)。 - 15 秒後,系統會執行另一個
GET
並擷取8
的值。
<Get> 元素
擷取指定鍵的值。請至少使用 <Get>
、<Put>
或 <Delete>
其中一個。
Apigee 會加密 KVM 中儲存的所有資料。詳情請參閱「關於加密金鑰」。使用 <Get>
時,Apigee 會解密儲存的資料,並將其指派給訊息環境中的變數。變數名稱是使用 assignTo
屬性指定。
請務必使用根元素上的 mapIdentifier
屬性或 <MapName>
元素,指定 KVM 的名稱。
您可以在政策中加入多個 Get
區塊,從 KVM 擷取多個項目。
預設 | 不適用 |
---|---|
存在必要性 | 如果沒有 <Put> 或 <Delete> ,則為必要欄位。 |
類型 | 不適用 |
屬性
下表說明 <Get> 元素的屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
assignTo |
要指派擷取值的變數。 |
不適用 | 必填 |
index |
要從多值鍵擷取項目的索引編號 (以 1 為基準)。
舉例來說,指定 如需範例,請參閱「範例」中的「從 KVM 取得值」分頁。 |
不適用 | 選用 |
從 KVM 取得單一項目
透過這個範例步驟設定,政策會讀取並解密 KVM 中單一金鑰的值,然後將解密值指派給名為 myvar
的變數。
<Get assignTo="myvar" index="1"> <Key> <Parameter>key_name_literal</Parameter> </Key> </Get>
排除從偵錯工作階段擷取的資料
在某些情況下,儲存在 KVM 中的資料屬於機密資料。如要防止擷取的資料顯示在偵錯工作階段中,請在 assignTo
屬性中指定的變數名稱上使用 private.
前置字串。如果您未使用 private.
前置字串,從 KVM 擷取的資料會以明文顯示在您建立的任何偵錯工作階段中。
透過這個範例步驟設定,政策會讀取並解密 KVM 中與單一金鑰相關聯的值,然後將該值指派給變數。指派內容不會顯示在偵錯工作階段中。
<Get assignTo="private.myvar" index="1"> <Key> <Parameter>key_name_literal</Parameter> </Key> </Get>
從 KVM 取得多個項目
在以下範例中,假設 KVM 具有下列鍵和值。除了儲存歷來最熱門的電影清單,KVM 也會儲存所有主要電影的導演姓名。
鍵 | 值 |
---|---|
top_movies | 《公主新娘》、《教父》、《大國民》 |
大國民 | 奧森威爾斯 |
公主新娘 | 羅勃雷納 |
教父 | 法蘭西斯福特柯波拉 |
您會發現與 top_movies
鍵相關聯的值包含多個電影名稱,並以半形逗號分隔。
使用這個範例設定,政策會擷取目前的熱門電影和導演姓名:
<Get assignTo="top.movie.pick" index="1"> <Key> <Parameter>top_movies</Parameter> </Key> </Get> <Get assignTo="movie.director"> <Key> <Parameter ref="top.movie.pick"/> </Key> </Get>
呼叫 API 代理時,Apigee 會建立下列變數和對應值,之後可在 API 代理流程中使用:
top.movie.pick=Princess Bride
movie.director=Rob Reiner
top.movie.pick
的值只是逗號分隔清單中的第一個項目,因為第一個 <Get>
元素使用 index
屬性 1。接著,第二個 <Get>
元素會使用指派給 top.movie.pick
的值做為鍵,將值擷取到 movie.director
中。
<InitialEntries> 元素
KVM 的種子值,會在 KVM 初始化時填入。請務必在根元素上使用 mapIdentifier
屬性指定 KVM 的名稱。
例如:
<InitialEntries> <Entry> <Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key> <Value>v1</Value> </Entry> <Entry> <Key> <Parameter>KEY_NAME_VARIABLE</Parameter> </Key> <Value>v3</Value> <Value>v4</Value> </Entry> </InitialEntries>
使用這個元素時,如果您在已部署的 API Proxy 版本中,透過 Apigee UI 儲存政策,或是部署含有這個元素的政策的 API Proxy 套件,系統就會在 KVM 中自動建立金鑰。如果政策中的值與 KVM 中的值不同,部署 API Proxy 時,系統會覆寫 KVM 中的值。所有新鍵/值都會與現有鍵/值一起新增至現有 KVM。
這個元素填入的鍵和值必須是常值。舉例來說,這個元素不支援 <Parameter
ref="request.queryparam.key">
。
索引鍵大小上限為 2 KB。
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 不適用 |
<Key> 元素
指定 KVM 項目中的鍵。這個元素會顯示為 <Get>
、<Put>
或 <Delete>
的子項,或是 <Entry>
元素的子項,而 <Entry>
元素是 <InitialEntries>
的子項。以下是固定金鑰的範例:
<Key> <Parameter>KEY_NAME_LITERAL</Parameter> </Key>
金鑰可以是複合式,含有動態元素,也就是說,可以附加多個 <Parameter>
來建立金鑰。舉例來說,變數 userID
和 role
的內容可能會合併,以建立動態鍵。以下是步驟設定範例,指定複合式動態判斷鍵:
<Key> <Parameter ref='userID'/> <Parameter ref='role'/> </Key>
請務必查看 <Parameter>
元素,瞭解如何設定金鑰名稱。
索引鍵大小上限為 2 KB。
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 不適用 |
<MapName> 元素
<MapName>
元素可讓政策在執行階段動態識別要使用的 KVM。
動態選取 KVM 的功能可讓您彈性設計一項KeyValueMapOperations
政策,根據政策執行的情境存取不同的 KVM。
以下提供一些例子:
<!-- use one of the following forms --> <MapName>literal_string</MapName> <MapName ref="flow.variable"></MapName> <MapName ref="flow.variable">literal_string</MapName>
第一行會以字串常值指定 KVM 名稱。第二行會從流程變數取得名稱。在第三行中,如果流程變數解析為空值,系統會改用字串常值。
如果您在政策中使用 <MapName>
,請勿指定 mapIdentifier
屬性。詳情請參閱政策屬性。
如果部署 Proxy 時地圖不存在,系統就不會建立地圖,且執行政策時 Apigee 會擲回執行階段錯誤。如果提供流程變數,則不允許使用 <InitialEntries>
元素。部署期間會發生驗證錯誤。
<Parameter>
元素
指定鍵/值組合中鍵的元件。建立、更新、擷取或刪除鍵/值組合時,這個元素會指定名稱。
你可以使用下列方式指定名稱:
-
字串常值
<Key> <Parameter>literal</Parameter> </Key>
-
在執行階段擷取的變數,使用
ref
屬性<Key> <Parameter ref="variable_name"/> </Key>
-
常值和變數參照的組合
<Key> <Parameter>targeturl</Parameter> <Parameter ref="apiproxy.name"/> <Parameter>weight</Parameter> </Key>
如果 <Key>
元素包含多個 <Parameter>
元素,有效鍵字串就是每個參數值的串連,並以雙底線做為分隔符號。舉例來說,在上述範例中,如果 apiproxy.name
變數的值為 abc1
,則有效鍵為 targeturl__abc1__weight
。
無論是取得、更新或刪除鍵/值項目,鍵名都必須與 KVM 中的鍵名相符。如需相關規範,請參閱「指定及擷取金鑰名稱」。
預設 | 不適用 |
---|---|
存在必要性 | 必填 |
類型 | 字串 |
屬性
下表說明 <Parameter>
元素的屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
ref | 指定變數名稱,該變數的值包含您要建立、取得或刪除的金鑰確切名稱。 | 不適用 | 如果開頭和結尾標記之間未提供任何常值,則為必填。 |
<Put> 元素
將鍵/值組合寫入 KVM。如果根元素 mapIdentifier
屬性中指定的 KVM 不存在,且未使用 <MapName>
元素,系統會自動建立地圖。如果鍵值對應已存在,系統會將鍵/值新增至該對應。
如要使用 UI 或 API 建立 KVM,請參閱:
- 使用 Apigee UI 搭配 KVM,在 UI 中建立環境範圍的加密 KVM
- 機構範圍的鍵值對應 API
- 環境範圍鍵值對應 API
- API Proxy 範圍的鍵值對應 API
<Put override="false"> <Key> <Parameter ref="mykeyvar"/> </Key> <Value ref="myvalvar1"/> </Put>
預設 | 不適用 |
---|---|
存在必要性 | 如果沒有 <Get> 或 <Delete> ,則為必要欄位。 |
類型 | 不適用 |
屬性
下表說明 <Put>
元素的屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
覆寫 |
如果設為
只有在 KVM 存放區中目前沒有該鍵的項目時, |
true |
選用 |
<Scope> 元素
定義 KVM 的無障礙範圍。預設範圍為 environment
,也就是說,根據預設,地圖項目會由環境中執行的所有 API Proxy 共用 (例如測試或正式環境)。如果將範圍設為 apiproxy
,只有將值寫入地圖的 API Proxy 才能存取 KVM 中的項目。
請注意,存取對應或對應項目時,您必須指定建立對應時使用的相同範圍值。舉例來說,如果地圖是使用 apiproxy
範圍建立,您就必須使用 apiproxy
範圍擷取地圖的值、進行變更或刪除項目。
<Scope>environment</Scope>
預設 | environment |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
有效值 |
|
<Value> 元素
指定鍵的值。您可以將值指定為常值字串,也可以使用 ref
屬性,將值指定為要在執行階段擷取的變數:
<!-- Specify a literal value --> <Value>literal<Value>
或:
<!-- Specify the name of variable value to be populated at run time. --> <Value ref="variable_name"/>
您也可以加入多個 <Value>
元素,指定多部分值。值會在執行階段合併。
在下列範例中,兩個鍵會新增至 KVM:
- 鍵
k1
,值v1,v2
- 鍵
k2
,值v3,v4
<InitialEntries> <Entry> <Key> <Parameter>k1</Parameter> </Key> <Value>v1</Value> <Value>v2</Value> </Entry> <Entry> <Key> <Parameter>k2</Parameter> </Key> <Value>v3</Value> <Value>v4</Value> </Entry> </InitialEntries>
在以下範例中,一個鍵會建立兩個值。假設機構名稱為 foo_org
、API Proxy 名稱為 bar
,且環境為 test
:
- 鍵
foo_org
,值bar,test
<Put> <Key> <Parameter ref="organization.name"/> </Key> <Value ref="apiproxy.name"/> <Value ref="environment.name"/> </Put>
預設 | 不適用 |
---|---|
存在必要性 | 必填 |
類型 | 字串 |
屬性
下表說明 <Value>
元素的屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
ref |
指定變數名稱,該變數的值包含您要設定的金鑰值。 | 不適用 | 如果開頭和結尾標記之間未提供字面值,則為必填。如果提供字面值,則禁止使用。 |
錯誤參考資料
本節說明這項政策觸發錯誤時,Apigee 傳回的錯誤代碼和錯誤訊息,以及 Apigee 設定的錯誤變數。如果您要開發錯誤處理規則來處理錯誤,就必須瞭解這項資訊。如需更多資訊,請參閱「 政策錯誤的相關資訊」和「 處理錯誤」。
執行階段錯誤
政策執行時可能會發生這些錯誤。
錯誤代碼 | HTTP 狀態 | 原因 | 修正 |
---|---|---|---|
steps.keyvaluemapoperations.UnsupportedOperationException |
500 |
如果在 |
build |
部署錯誤
部署含有這項政策的 Proxy 時,可能會發生這些錯誤。
錯誤名稱 | 原因 | 修正 |
---|---|---|
InvalidIndex |
如果 KeyValueMapOperations 政策的 <Get> 元素中指定的 index 屬性為零或負數,則 API Proxy 的部署作業會失敗。索引會從 1 開始,因此索引為零或負整數會視為無效。 |
build |
KeyIsMissing |
如果 <Key> 元素完全缺少,或是 <Parameter> 元素缺少 KeyValueMapOperations 政策 <InitialEntries> 元素 <Entry> 下方的 <Key> 元素,就會發生這個錯誤。 |
build |
ValueIsMissing |
如果 KeyValueMapOperations 政策的 <InitialEntries> 元素 <Entry> 元素下方缺少 <Value> 元素,就會發生這項錯誤。 |
build |
結構定義
使用須知
如需 KVM 總覽,請參閱「使用鍵/值對應」。
使用 Apigee UI 時,您只能在環境範圍內定義 KVM,如「透過 Apigee UI 使用 KVM」一文所述。您可以使用 Apigee API,在機構、環境或 API Proxy 範圍內定義 KVM,詳情請參閱下列章節:
KVM 儲存空間提供輕量型資料持續性機制,可儲存格式為鍵/值組合的資料。您可以在執行階段透過政策或程式碼存取這些項目。地圖包含 key=value
格式的任意資料。
例如 localhost=127.0.0.1
、zip_code=94110
或 first_name=felix
。在第一個範例中,localhost
是鍵,而 127.0.0.1
是值。每個鍵/值組合都會儲存在鍵值對應表中的項目。KVM 可以儲存多個項目。
舉例來說,假設您需要儲存與各種後端環境相關聯的 IP 位址清單。您可以建立名為 ipAddresses
的 KVM,其中包含鍵/值組合清單做為項目。舉例來說,這個 JSON 可以代表這類對應:
{ "entry" : [ { "name" : "Development", "value" : "65.87.18.18" }, { "name" : "Staging", "value" : "65.87.18.22" } ], "name" : "ipAddresses" }
您可以使用這個結構建立 IP 位址商店,供政策在執行階段強制執行 IP 允許/拒絕清單,動態選取後端目標位址等。KeyValueMapOperations 政策通常用於儲存或擷取長期資訊,這些資訊需要在多個要求/回應交易中重複使用。
您可以透過 KeyValueMapOperations 政策或 Apigee API 直接操作 KVM。舉例來說,您可以使用 API 將大型資料集上傳至鍵/值儲存空間,或建立指令碼來管理鍵值對應項目。您必須先使用 API 建立 KVM,才能透過 KeyValueMapOperations 政策存取 KVM。
指定及擷取金鑰名稱
使用 <Parameter>
和 <Value>
元素時,您可以指定常值 (值位於開頭和結尾標記之間),也可以使用 ref
屬性指定變數名稱,該變數的值應在執行階段使用。
<Parameter>
元素值得特別一提,因為它會決定建立的金鑰名稱,以及您要擷取或刪除的金鑰名稱。以下提供兩個範例。
第一個是直接指定鍵名,第二個則是使用變數指定鍵名。
假設您使用下列項目在 KVM 中建立金鑰:
<Parameter>KEY_NAME_LITERAL</Parameter> <Parameter ref="key.name.variable"/>
在第一個執行個體中,KEY_NAME_LITERAL
的字面值會以鍵名形式儲存在 KVM 中。在第二個例項中,key.name.variable
中的任何值都會成為 KVM 中鍵的名稱。舉例來說,如果 key.name.variable
包含值 foo
,則鍵會命名為 foo
。
如要使用 GET
作業擷取金鑰和金鑰值 (或使用 DELETE
作業移除),<Parameter>
元素的值必須與 KVM 中的金鑰名稱相符。舉例來說,如果 KVM 中的鍵名為 my_key
,您可以指定 <Parameter>my_key</Parameter>
的字面值,也可以指定包含確切值 mny_key
的變數,如下所示:<Parameter ref="variable.containing.foo"/>
。
相關主題
如要進一步瞭解 KVM,請參閱下列主題: