您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
Edge 提供名為「management API」的強大公用程式,提供以下服務:
- 部署或取消部署 API Proxy
- 設定虛擬主機、KeyStore 和 Truststore 等
- 建立、刪除和/或更新 KeyValueMaps、API 產品、開發人員應用程式、開發人員、消費者金鑰等實體。
- 擷取這些實體的相關資訊
您可以透過 Apigee Edge 平台中的名為「Management Server」(管理伺服器) 元件存取這些服務。您可以藉由簡單的管理 API 呼叫,輕鬆叫用這些服務。
有時我們可能需要在執行階段使用 API Proxy 中的一或多項服務。這是因為 KeyValueMaps、OAuth 存取權杖、API 產品、開發人員應用程式、開發人員、用戶端金鑰等實體包含鍵/值組合、自訂屬性或設定檔一部分的實用資訊。
舉例來說,您可以將下列資訊儲存在 KeyValueMap 中,讓執行階段更安全且易於存取:
- 後端目標網址
- 環境屬性
- 後端或第三方系統的安全性憑證
同樣地,您也可以在執行階段取得 API 產品清單或開發人員的電子郵件地址清單。這項資訊會顯示在開發人員應用程式設定檔中。
您可以在執行階段有效運用所有這些資訊,在 Apigee Edge 的政策或自訂程式碼中啟用動態行為。
反模式
管理 API 適合用於管理工作,且不應用於在 API Proxy 流程中執行任何執行階段邏輯。可能的原因如下:
- 使用管理 API 存取 KeyValueMap、OAuth Access Tokens 等實體相關資訊,或透過 API Proxy 提供任何其他用途,會導致管理伺服器依附關係。
- 管理伺服器不屬於 Edge 執行階段元件,因此可用性可能不高。
- 管理伺服器也可能無法在相同的網路或資料中心內佈建,因此可能會在執行階段造成網路延遲。
- 系統會對管理伺服器上的項目快取較長時間,因此如果我們在短時間內執行寫入和讀取作業,可能無法立即在 API Proxy 中查看最新資料。
- 增加執行階段的網路躍點。
在以下程式碼範例中, Management API 呼叫是透過自訂 JavaScript 程式碼進行,從 KeyValueMap 擷取資訊:
var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')
如果管理伺服器無法使用,叫用管理 API 呼叫的 JavaScript 程式碼就會失敗。因而導致 API 要求失敗。
影響程度
- 在執行階段導入管理伺服器的其他依附元件。如果管理伺服器發生錯誤,就會影響 API 呼叫。
- 管理 API 的使用者憑證必須儲存在本機或一些安全存放區,例如加密的 KVM。
- 您的效能需要使用網路叫用管理服務。
- 由於管理伺服器中的快取到期時間較長,系統可能不會立即顯示更新的值。
最佳做法
能在執行階段從 KeyValueMaps、API 產品、DeveloperApps、Developers、Consumer Keys 等實體擷取資訊,還有更有效的方法。例如:
- 使用 KeyValueMapOperations 政策存取 KeyValueMap 的資訊。以下程式碼範例說明如何從 KeyValueMap 擷取資訊:
<!-- /antipatterns/examples/2-6.xml --> <KeyValueMapOperations mapIdentifier="urlMap" async="false" continueOnError="false" enabled="true" name="GetURLKVM"> <DisplayName>GetURLKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="urlHosti" index="2"> <Key> <Parameter>urlHost_1</Parameter> </Key> </Get> </KeyValueMapOperations>
- 如要在 API Proxy 中存取 API 產品、開發人員應用程式、開發人員、用戶端金鑰等相關資訊,您可以採取下列任一做法:
- 如果您的 API Proxy 流程擁有 VerifyAPIKey 政策,您可以使用填入此政策的流程變數來存取資訊。以下程式碼範例說明如何使用 JavaScript 擷取開發人員應用程式的名稱和 create_by 資訊:
<!-- /antipatterns/examples/2-7.xml --> print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name")); print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
- 如果您的 API Proxy 流程沒有 VerifyAPIKey 政策,您可以使用「存取實體」和「擷取變數」政策,存取 API 產品、開發人員應用程式等項目的設定檔:
- 使用 AccessEntity 政策擷取 DeveloperApp 設定檔:
<!-- /antipatterns/examples/2-8.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp"> <DisplayName>GetDeveloperApp</DisplayName> <EntityType value="app"></EntityType> <EntityIdentifier ref="developer.app.name" type="appname"/> <SecondaryIdentifier ref="developer.id" type="developerid"/> </AccessEntity>
- 使用擷取變數政策從 DeveloperApp 擷取
appId
:<!-- /antipatterns/examples/2-9.xml --> <ExtractVariables name="Extract-Developer App-Info"> <!-- The source element points to the variable populated by AccessEntity policy. The format is <policy-type>.<policy-name> In this case, the variable contains the whole developer profile. --> <Source>AccessEntity.GetDeveloperApp"</Source> <VariablePrefix>developerapp</VariablePrefix> <XMLPayload> <Variable name="appld" type="string"> <!-- You parse elements from the developer profile using XPath. --> <XPath>/App/AppId</XPath> </Variable> </XMLPayload> </ExtractVariables>
- 使用 AccessEntity 政策擷取 DeveloperApp 設定檔:
- 如果您的 API Proxy 流程擁有 VerifyAPIKey 政策,您可以使用填入此政策的流程變數來存取資訊。以下程式碼範例說明如何使用 JavaScript 擷取開發人員應用程式的名稱和 create_by 資訊: