本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
身為 Apigee 開發人員,您的主要開發活動包括設定 API Proxy,以便做為 API 或後端服務的 Proxy。本文是建構 API Proxy 時可用的所有設定元素參考資料。
如果您想瞭解如何建構 API Proxy,建議您先參閱「建構簡單的 API Proxy」一文。
請使用下列任一方法編輯 API Proxy 設定:
- 使用 Apigee UI 或 API。
- 請按照「下載及上傳 API Proxy 設定套件」一文的說明,下載 API Proxy 設定套件並手動編輯,然後將新設定上傳至 Apigee。
API Proxy 設定目錄結構
API Proxy 設定目錄結構如下所示:
API Proxy 設定包含以下內容:
基本設定 | API Proxy 的主要設定。 |
ProxyEndpoint | 傳入 HTTP 連線 (從要求應用程式到 Apigee)、要求和回應流程,以及政策附件。 |
TargetEndpoint | 傳出 HTTP 連線 (從 Apigee 到後端服務)、要求和回應流程,以及政策附件設定。 |
流程 | ProxyEndpoint 和 TargetEndpoint 要求和回應管道,可為其附加政策。 |
政策 | 符合 Apigee 政策結構定義的 XML 格式設定檔。 |
資源 | 政策參照的用於執行自訂邏輯的腳本、JAR 檔案和 XSLT 檔案。 |
基本設定
/apiproxy/weatherapi.xml
API Proxy 的基本設定,用於定義 API Proxy 的名稱。名稱不得重複。
設定範例:
<APIProxy name="weatherapi"> </APIProxy>
基礎設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
APIProxy |
|||
name |
API 代理程式名稱,在機構內不得重複。您可以在名稱中使用的字元僅限於:A-Za-z0-9_- |
不適用 | 是 |
revision |
API Proxy 設定的修訂版本編號。您不需要明確設定修訂版本號碼,因為 Apigee 會自動追蹤 API Proxy 的目前修訂版本。 | 不適用 | 否 |
ConfigurationVersion |
這個 API Proxy 所遵循的 API Proxy 設定結構定義版本。目前唯一支援的值是 majorVersion 4 和 minorVersion 0。這項設定日後可能會用於啟用 API 代理程式格式的演進。 | 4.0 | 否 |
Description |
API Proxy 的文字說明。如果提供,說明會顯示在 Apigee UI 中。 | 不適用 | 否 |
DisplayName |
使用者友善名稱,可能與 API Proxy 設定的 name 屬性不同。 |
不適用 | 否 |
Policies |
這個 API Proxy 的 /policies 目錄中政策清單。通常只有在使用 Apigee UI 建立 API Proxy 時,您才會看到這個元素。這只是一個資訊清單設定,旨在提供 API Proxy 內容的資訊。 |
不適用 | 否 |
ProxyEndpoints |
這個 API Proxy 的 /proxies 目錄中 Proxy 端點的清單。通常只有在使用 Apigee UI 建立 API Proxy 時,您才會看到這個元素。這只是一個資訊清單設定,旨在提供 API Proxy 內容的資訊。 |
不適用 | 否 |
Resources |
這個 API Proxy 的 /resources 目錄中資源 (JavaScript、Python、Java、XSLT) 清單。通常只有在使用 Apigee UI 建立 API Proxy 時,您才會看到這個元素。這只是一個資訊清單設定,旨在提供 API Proxy 內容的資訊。 |
不適用 | 否 |
Spec |
識別與 API Proxy 相關聯的 OpenAPI 規格。這個值會設為規格儲存器中的網址或路徑。 |
不適用 | 否 |
TargetServers |
此 API Proxy 的任何目標端點中參照的目標伺服器清單。通常只有在使用 Apigee 建立 API Proxy 時,您才會看到這個元素。這只是一個資訊清單設定,旨在提供 API Proxy 內容的資訊。 | 不適用 | 否 |
TargetEndpoints |
這個 API Proxy 的 /targets 目錄中,目標端點的清單。通常只有在使用 Apigee UI 建立 API Proxy 時,您才會看到這個元素。這只是一個資訊清單設定,旨在提供 API Proxy 內容的資訊。 |
不適用 | 否 |
ProxyEndpoint
下圖顯示要求/回應流程:
/apiproxy/proxies/default.xml
ProxyEndpoint 設定會定義 API Proxy 的入站 (面向用戶端) 介面。設定 Proxy 端點時,您會設定網路設定,定義用戶端應用程式 (apps) 應如何叫用 Proxy API。
下列 ProxyEndpoint 設定範例會儲存在 /apiproxy/proxies
下:
<ProxyEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> </HTTPProxyConnection> <FaultRules/> <DefaultFaultRule/> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
基本 Proxy 端點中必要的設定元素如下:
ProxyEndpoint 設定元素
名稱 | 說明 | 預設 | 是否必要 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ProxyEndpoint |
||||||||||||||||||
name |
Proxy 端點的名稱。在定義多個 Proxy 端點 (在少數情況下) 時,必須在 API Proxy 設定中保持不重複。您只能在名稱中使用下列字元:A-Za-z0-9._\-$ % 。 |
不適用 | 是 | |||||||||||||||
PreFlow |
定義要求或回應的 PreFlow 流程中的政策。 | 不適用 | 是 | |||||||||||||||
Flows |
定義要求或回應的條件式流程中的政策。
|
不適用 | 是 | |||||||||||||||
PostFlow |
定義要求或回應的 PostFlow 流程中的政策。
|
不適用 | 是 | |||||||||||||||
HTTPProxyConnection |
定義與 API Proxy 相關聯的網路位址和 URI 路徑。 | |||||||||||||||||
BasePath |
這是必填的字串,可用於唯一識別 Apigee 用來將傳入訊息路由至適當 API 代理伺服器的 URI 路徑。 BasePath 是 URI 片段 (例如 在基礎路徑中使用萬用字元 您可以在 API 代理程式基礎路徑中使用一或多個「*」萬用字元。舉例來說, 重要事項:Apigee 不支援使用萬用字元「*」做為基礎路徑的第一個元素。例如,系統不支援 |
/ | 是 | |||||||||||||||
Properties |
一組選用的 HTTP 設定可定義為 <ProxyEndpoint> 的屬性。可用的屬性包括:
|
不適用 | 否 | |||||||||||||||
FaultRules |
定義 Proxy 端點如何回應錯誤。錯誤規則會指定兩個項目:
請參閱「處理錯誤」。 |
不適用 | 否 | |||||||||||||||
DefaultFaultRule |
處理其他錯誤規則未明確處理的任何錯誤 (系統、傳輸、訊息或政策)。 請參閱「處理錯誤」。 |
不適用 | 否 | |||||||||||||||
RouteRule |
定義 ProxyEndpoint 要求管道處理後的入站要求訊息目的地。通常,RouteRule 會指向具名目標端點、IntegrationEndpoint 或網址。 | |||||||||||||||||
Name |
必要屬性,提供 RouteRule 的名稱。您可以在名稱中使用的字元僅限於 A-Za-z0-9._\-$ % 。例如 Cat2 %_ 就是合法名稱。 |
不適用 | 是 | |||||||||||||||
Condition |
在執行階段用於動態轉送的選用條件陳述式。舉例來說,如果您想啟用以內容為依據的轉送功能,以便支援後端版本控制,則可使用條件式 RouteRules。 | 不適用 | 否 | |||||||||||||||
TargetEndpoint |
用於識別命名 TargetEndpoint 設定的選用字串。命名的目標端點是指在 指定目標端點後,您就能指出 ProxyEndpoint 要求管道處理完要求訊息後,應將其轉送至何處。請注意,這是選用設定。 代理端點可能會直接呼叫網址。舉例來說,以 HTTP 用戶端身分運作的 JavaScript 或 Java 資源,可能會執行目標端點的基本職責,也就是將要求轉送至後端服務。 |
不適用 | 否 | |||||||||||||||
URL |
選用字串,用於定義 Proxy 端點呼叫的傳出網路位址,可略過可能儲存在 /targets 下的任何 TargetEndpoint 設定 |
不適用 | 否 |
如何設定 RouteRules
命名的目標端點是指 /apiproxy/targets
底下的設定檔,RouteRule 會在代理程式端點處理要求後,將要求轉送至該檔案。
例如,下列 RouteRule 會參照 /apiproxy/targets/myTarget.xml
設定:
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
直接網址叫用
Proxy 端點也可以直接叫用後端服務。直接呼叫網址會略過 /apiproxy/targets
下任何名為 TargetEndpoint 的設定。因此,TargetEndpoint 是可選的 API Proxy 設定,但在實際操作中,我們不建議從 Proxy 端點直接呼叫。
舉例來說,下列 RouteRule 會對 http://api.mycompany.com/v2
發出 HTTP 呼叫。
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
條件式路徑
RouteRules 可鏈結,以便在執行階段支援動態路由。根據 HTTP 標頭、訊息內容、查詢參數或時區等背景資訊,您可以將傳入要求路由至命名的 TargetEndpoint 設定、直接路由至網址,或兩者皆是。
條件式 RouteRules 的運作方式與 Apigee 上的其他條件式陳述式相同。請參閱「條件參考資料」和「流程變數參考資料」。
舉例來說,下列 RouteRule 組合會先評估內送要求,以驗證 HTTP 標頭的值。如果 HTTP 標頭 routeTo
的值為 TargetEndpoint1
,則要求會轉送至名為 TargetEndpoint1
的目標端點。如果沒有,則會將內送要求轉送至 http://api.mycompany.com/v2
。
<RouteRule name="MyRoute"> <Condition>request.header.routeTo = "TargetEndpoint1"</Condition> <TargetEndpoint>TargetEndpoint1</TargetEndpoint> </RouteRule> <RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
空值路徑
您可以定義空值 RouteRule,以支援不需將要求訊息轉送至目標端點的情況。當 Proxy 端點執行所有必要的處理作業時,這項功能就非常實用,例如使用 JavaScript 呼叫外部服務,或從 Apigee 鍵/值儲存庫的查詢中擷取資料。
例如,以下定義為空值的 Route:
<RouteRule name="GoNowhere"/>
條件式空值路徑可能很實用。在以下範例中,當 HTTP 標頭 request.header.X-DoNothing
的值為 null
以外的值時,系統會執行空值路徑。
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
請注意,RouteRules 可連結,因此條件式空值 Route 通常是設計用於支援條件式轉送的 RouteRules 集合的其中一個元件。
實際使用條件為空值的路徑,可支援快取。您可以使用 Cache 政策設定的變數值,設定 API 代理程式,在從快取提供項目時執行 null 路徑。
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
TargetEndpoint
目標端點是 Proxy 端點的出站等價。目標端點會做為後端服務或 API 的用戶端,負責傳送要求並接收回應。
API Proxy 不需要任何目標端點。您可以設定 Proxy 端點,直接呼叫網址。沒有目標端點的 API Proxy 通常會包含 Proxy 端點,該端點會直接呼叫後端服務,或設定為使用 Java 或 JavaScript 呼叫服務。
TargetEndpoint 設定
/targets/default.xml
目標端點會定義從 Apigee 到其他服務或資源的傳出連線。
以下是 TargetEndpoint 設定範例:
<TargetEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <SSLInfo/> <Authentication/> </HTTPTargetConnection> <FaultRules/> <DefaultFaultRule/> <ScriptTarget/> <LocalTargetConnection/> </TargetEndpoint>
TargetEndpoint 設定元素
目標端點可以透過下列任一方式呼叫目標:
- 用於 HTTP 或 HTTPS 呼叫的 HTTPTargetConnection
- 用於本機 Proxy 對 Proxy 連結的 LocalTargetConnection
在目標端點中只設定其中一個。
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
TargetEndpoint |
|||
name |
目標端點的名稱,在 API Proxy 設定中不得重複。目標端點的名稱會用於 ProxyEndpoint RouteRule,以便將傳出要求轉送至處理程序。您可以在名稱中使用的字元僅限於:A-Za-z0-9._\-$ % 。 |
不適用 | 是 |
PreFlow |
定義要求或回應的 PreFlow 流程中的政策。 | 不適用 | 是 |
Flows |
定義要求或回應的條件式流程中的政策。
|
不適用 | 是 |
PostFlow |
定義要求或回應的 PostFlow 流程中的政策。
|
不適用 | 是 |
HTTPTargetConnection |
透過子項指定透過 HTTP 存取的後端資源。 如果您使用 HTTPTargetConnection,請勿設定其他類型的目標連線 (ScriptTarget 或 LocalTargetConnection)。
您可以使用 |
||
URL |
定義後端服務的網路位址,目標端點會將要求訊息轉送至該位址。 | 不適用 | 否 |
LoadBalancer |
定義一或多個命名的 TargetServer 設定。命名 TargetServer 設定可用於負載平衡,用於定義 2 個以上端點設定連線。 您也可以使用目標伺服器,將 API Proxy 設定與具體後端服務端點網址分離。 |
不適用 | 否 |
Properties |
一組選用的 HTTP 設定可定義為 <TargetEndpoint> 的屬性。使用 例如: <Properties> <Property name="response.payload.parse.limit">15M</Property> </Properties> 可設定的最小限制為 10M,可設定的最大限制為 30M。如果未設定這個屬性,則預設限制為 10M。 詳情請參閱「訊息酬載大小」。 |
不適用 | 否 |
SSLInfo |
您可以選擇在目標端點上定義 TLS/SSL 設定,以控管 API Proxy 與目標服務之間的 TLS/SSL 連線。請參閱「TLS/SSL TargetEndpoint 設定」。 | 不適用 | 否 |
LocalTargetConnection |
透過子項元素指定要本地存取的資源,略過負載平衡和訊息處理器等網路特性。 如要指定目標資源,請加入 APIProxy 子項元素 (含有 ProxyEndpoint 元素) 或 Path 子項元素。 詳情請參閱「鏈結多個 API Proxy」。 如果您使用 LocalTargetConnection,請勿設定其他類型的目標連線 (HTTPTargetConnection 或 ScriptTarget)。 |
||
APIProxy |
指定要用於要求目標的 API 代理程式名稱。目標 Proxy 必須與傳送要求的 Proxy 位於相同機構和環境中。這是使用 Path 元素的替代方案。 | 不適用 | 否 |
ProxyEndpoint |
與 APIProxy 搭配使用,用於指定目標 Proxy 的 Proxy 端點名稱。 | 不適用 | 否 |
Path |
指定要用於要求目標的 API Proxy 端點路徑。目標 Proxy 必須與傳送要求的 Proxy 位於相同機構和環境中。這是使用 APIProxy 的替代方案。 | 不適用 | 否 |
FaultRules |
定義目標端點對錯誤的反應方式。錯誤規則會指定兩個項目:
請參閱「處理錯誤」。 |
不適用 | 否 |
DefaultFaultRule |
處理其他 FaultRule 未明確處理的任何錯誤 (系統、傳輸、訊息或政策)。 請參閱「處理錯誤」。 |
不適用 | 否 |
<Authentication>
元素用法
<TargetEndpoint>
中 <Authentication>
元素的用法與 ServiceCallout 政策中的 <Authentication>
元素用法相同。在 <TargetEndpoint>
和 ServiceCallout 中,<Authentication>
是 <HttpTargetConnection>
的子元素。詳情請參閱 ServiceCallout 政策參考資料中的「驗證元素」。
<Authentication>
元素錯誤參考資料
如果您使用 <Authentication>
元素,請參閱 ServiceCallout 政策文件的「Errors」部分,瞭解可能的錯誤訊息,以及如何排解部署和執行階段錯誤。
<Authentication>
元素範例
以下範例說明如何呼叫在 Cloud Run 上部署的服務做為目標,並使用 Authentication
元素產生 OpenID Connect 權杖,用於驗證呼叫:
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Properties/> <URL>https://cloudrun-hostname.a.run.app/test</URL> <Authentication> <GoogleIDToken> <Audience>https://cloudrun-hostname.a.run.app/test</Audience> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </TargetEndpoint>
以下範例說明如何使用 Authentication
元素,呼叫指向 Cloud Run 的 TargetService,以產生驗證呼叫所需的 OpenID Connect 權杖。HeaderName
元素會將產生的權杖權杖新增至傳送至目標系統的 X-Serverless-Authorization
標頭。如果有 Authorization
標頭,則會保留不變,並一併傳送至要求中。
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <HeaderName>X-Serverless-Authorization</HeaderName> <GoogleIDToken> <Audience ref="flow.variable.audience">https://cloudrun-hostname.a.run.app</Audience> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="cloud-run-target" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
以下範例說明如何呼叫指向 Google Secret Manager 服務的 TargetService。在這個範例中,GoogleAccessToken 元素會設定為產生 Google 驗證權杖,以便驗證目標要求:
<HTTPTargetConnection> <Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication> <URL> https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id </URL> </HTTPTargetConnection>
以下範例說明如何自動設定 GoogleIDToken 的目標對象。如果 useTargetUrl
為 true
,且參照的變數未解析為有效變數,則會使用目標的網址 (不含查詢參數) 做為目標對象。假設要求路徑為 /foobar
,目標伺服器網址為 https://xyz.com
,GoogleIDToken 的目標對象就會自動設為 https://xyz.com/foobar
。
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <GoogleIDToken> <Audience ref='myvariable' useTargetUrl="true"/> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="TS" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
TLS/SSL TargetEndpoint 設定
目標端點通常需要管理 HTTPS 連線與異質後端基礎架構。因此,我們支援多個 TLS/SSL 設定。
TLS/SSL 目標端點設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
SSLInfo |
|
||
Enabled |
將此屬性設為
不過,如果包含的
反之,如果有開頭為 |
false | 否 |
Enforce |
在 Apigee 和目標後端之間強制執行嚴格的 SSL。 如果設為 如果未設定或設為 您可以使用功能旗標 |
false |
否 |
TrustStore |
含有受信任的根伺服器憑證的金鑰庫。如果傳送的憑證鏈結終止於此 KeyStore 中包含的憑證,Apigee 會將遠端同端視為可信任。 |
不適用 | 否 |
ClientAuthEnabled |
如果設為 啟用雙向 TLS 通常需要在 Apigee 上設定信任存放區和金鑰存放區。 |
false |
否 |
KeyStore |
包含用於外送用戶端驗證的私密金鑰的 KeyStore | 不適用 | 是 (如果 ClientAuthEnabled 為 true) |
KeyAlias |
用於外送用戶端驗證的私密金鑰別名 | 不適用 | 是 (如果 ClientAuthEnabled 為 true) |
IgnoreValidationErrors |
指出系統是否忽略驗證錯誤。如果後端系統使用 SNI,且傳回的憑證主體別名 (DN) 與主機名稱不相符,就無法忽略錯誤,連線也會失敗。 注意:如果將 |
false |
否 |
Ciphers |
傳出 TLS/SSL 的支援加密法。如果未指定密碼,系統會允許 JVM 使用的所有密碼。 如要限制密碼編譯器,請新增下列元素,列出支援的密碼編譯器: <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> |
不適用 | 否 |
Protocols |
傳出 TLS/SSL 的支援通訊協定。如果未指定任何通訊協定,則系統會允許 JVM 使用所有可用的通訊協定。 如要限制通訊協定,請明確指定。舉例來說,如要只允許 TLS 1.2 或 TLS 1.3: <Protocols> <Protocol>TLSv1.2</Protocol> <Protocol>TLSv1.3</Protocol> </Protocols> |
不適用 | 否 |
CommonName |
Apigee 會將此處的值與遠端對等端憑證上的 CN (一般名稱) 或 SAN (主體別名) 進行比對。 |
不適用 | 否 |
指定環境層級的 SSL 強制執行機制
如果 SSLInfo.Enforce
設為 true
或 false
,則指定的值會覆寫 TargetEndpoint 或 TargetServer 設定中 <SSLInfo>
區塊中指定的任何精細執行選項。
如果未設定 SSLInfo.Enforce
,SSL 強制執行機制會根據個別 <SSLInfo>
區塊中使用 <Enforce>
元素指定的任何值決定。詳情請參閱 TLS/SSL TargetEndpoint 設定。
在以下範例中,SSLInfo.Enforce
已設為 true
。在產生的輸出內容中,您可以看到 SSL 已在指定環境中強制執行。
VALUE=true
curl -Ss -v -X PUT \ "https://apigee.googleapis.com/v1/organizations/MYORG/environments/MYENV" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer TOKEN" \ -d '{ "name": "MYENV", "properties": { "property": [{ "name": "features.SSLInfo.Enforce", "value": "'"$VALUE"'" }] } }'
輸出:
{ ... "properties": { "property": [ { "name": "features.SSLInfo.Enforce", "value": "true" } ] }, ... }
已啟用出站用戶端驗證的目標端點範例
<TargetEndpoint name="default"> <HttpTargetConnection> <URL>https://myservice.com</URL> <SSLInfo> <Enabled>true</Enabled> <Enforce>true</Enforce> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>myKeystore</KeyStore> <KeyAlias>myKey</KeyAlias> <TrustStore>myTruststore</TrustStore> </SSLInfo> </HttpTargetConnection> </TargetEndpoint>
如需詳細操作說明,請參閱「 傳輸層安全標準 (TLS) 設定選項」。
使用資料流變數動態設定 TLS/SSL 值
您也可以動態設定 TLS/SSL 詳細資料,以便支援彈性的執行階段需求。舉例來說,如果 Proxy 連線至兩個可能不同的目標 (測試目標和正式目標),您可以讓 API Proxy 以程式輔助方式偵測所呼叫的環境,並動態設定適當的 KeyStore 和 TrustStore 參照。Apigee 社群文章「 使用變數參照為 TargetEndpoint 提供動態 SSLInfo」進一步說明這個情況,並提供可部署的 API 代理程式範例。
以下範例說明如何在 TargetEndpoint 設定中設定 <SSLInfo>
標記,在執行階段提供值,例如透過 Java 呼叫、JavaScript 政策或 AssignMessage 政策。請使用含有您要設定值的任何訊息變數。
變數只能用於下列元素。
<SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo>
使用參照動態設定 TLS/SSL 值
設定使用 HTTPS 的目標端點時,您必須考量 TLS/SSL 憑證到期或系統設定變更時,您需要更新憑證的情況。
詳情請參閱「 處理已過期憑證」。
不過,您可以選擇將目標端點設定為改用金鑰庫或信任庫的參照。使用參照的優點是,您可以更新參照,讓其指向其他金鑰庫或信任庫,藉此更新 TLS/SSL 憑證,而無須重新啟動訊息處理器。
舉例來說,下方顯示的是使用金鑰庫參照的目標端點:
<SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo>
請使用下列 POST API 呼叫,建立名為 keystoreref
的參照:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
其中 $TOKEN
會設為您的 OAuth 2.0 存取權憑證,如取得 OAuth 2.0 存取權憑證一文所述。如要瞭解本範例中使用的 curl
選項,請參閱「使用 curl」。如要瞭解所使用的環境變數,請參閱「為 Apigee API 要求設定環境變數」。
參照會指定金鑰庫的名稱和類型。
請使用下列 GET API 呼叫來查看參照資料:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
其中 $TOKEN
會設為您的 OAuth 2.0 存取權憑證,如取得 OAuth 2.0 存取權憑證一文所述。如要瞭解本範例中使用的 curl
選項,請參閱「使用 curl」。如要瞭解所使用的環境變數,請參閱「為 Apigee API 要求設定環境變數」。
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
其中 $TOKEN
會設為您的 OAuth 2.0 存取權憑證,如取得 OAuth 2.0 存取權憑證一文所述。如要瞭解本範例中使用的 curl
選項,請參閱「使用 curl」。如要瞭解所使用的環境變數,請參閱「為 Apigee API 要求設定環境變數」。
如要日後變更參照,以便指向不同的 KeyStore,並確保別名具有相同的名稱,請使用下列 PUT 呼叫:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -X PUT \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myNewKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
其中 $TOKEN
會設為您的 OAuth 2.0 存取權憑證,如取得 OAuth 2.0 存取權憑證一文所述。如要瞭解本範例中使用的 curl
選項,請參閱「使用 curl」。如要瞭解所使用的環境變數,請參閱「為 Apigee API 要求設定環境變數」。
搭配目標負載平衡功能的 TargetEndpoint
目標端點支援使用三種負載平衡演算法,在多個已命名的目標伺服器上進行負載平衡。
如需詳細操作說明,請參閱「 跨後端伺服器負載平衡」。
IntegrationEndpoint
IntegrationEndpoint 是專門用於執行 Apigee 整合的目標端點。如果您已設定 IntegrationEndpoint,Apigee 會將 request 物件傳送至 Apigee 的整合平台執行。如要執行整合,除了設定 IntegrationEndpoint 之外,您還必須在 Proxy 流程中新增 SetIntegrationRequest 政策。
您可以在 IntegrationEndpoint 設定中設定 <AsyncExecution>
元素,讓整合作業以同步或非同步方式執行。詳情請參閱「同步執行與非同步執行」。執行整合作業後,Apigee 會將回應儲存在回應訊息中。
設定 IntegrationEndpoint
如要將整合端點設為目標端點,請將 IntegrationEndpoint 元素新增至 ProxyEndpoint 設定。以下是 ProxyEndpoint 設定範例:
<ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request> <Step> <Name>my-set-integration-request-policy</Name> </Step> </Request> </PreFlow> <Flows/> <PostFlow name="PostFlow"/> <HTTPProxyConnection> <BasePath>/integration-endpoint-test</BasePath> <Properties/> </HTTPProxyConnection> <RouteRule name="default"> <IntegrationEndpoint>my-int-endpoint</IntegrationEndpoint> </RouteRule> </ProxyEndpoint>
在 ProxyEndpoint 設定範例中,Apigee 會執行下列工作:
- 在 PreFlow 中執行名為
my-set-integration-request-policy
的政策,該政策會設定整合要求物件和整合流程變數。 - 使用
my-int-endpoint
做為目標端點,如RouteRule
所指定。 - 讀取
my-set-integration-request-policy
建立的整合要求物件。 - 使用 SetIntegrationRequest 政策設定的要求物件和流程變數,將要求傳送至 Apigee 的整合平台。
- 將整合項目的回應儲存在回應訊息中。
包含 <IntegrationEndpoint>
宣告的 XML 檔案會在 APIGEE_BUNDLE_DIRECTORY/apiproxy/integration-endpoints/
目錄中提供。如果您使用 Develop > API Proxies > CREATE NEW > Integration target
選項建立 API Proxy,Apigee 會將宣告儲存在 /apiproxy/integration-endpoints/default.xml
檔案中。如果您是透過使用者介面建立整合端點 XML,可以為 XML 檔案提供自訂名稱。
以下範例顯示 XML 檔案中的 <IntegrationEndpoint>
元素宣告:
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>false</AsyncExecution> </IntegrationEndpoint>
IntegrationEndpoint 設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
IntegrationEndpoint |
|||
name |
IntegrationEndpoint 的名稱。您可以在名稱中使用的字元僅限:A-Za-z0-9._\-$ % |
不適用 | 是 |
AsyncExecution |
布林值,可指定整合作業應以同步或非同步模式執行。詳情請參閱「同步執行與非同步執行」。 | false | 否 |
同步執行與非同步執行
您可以設定整合作業以同步或非同步模式執行。如要瞭解同步和非同步執行模式的差異,請參閱 <AsyncExecution>。
請使用 </IntegrationEndpoint>
中的 <AsyncExecution>
元素指定同步或非同步執行作業。如果您將 <AsyncExecution>
設為 true
,整合作業會以非同步方式執行。如果將其設為 false
,整合作業就會以同步方式執行。
以下範例會將 AsyncExecution
設為 true
:
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>true</AsyncExecution> </IntegrationEndpoint>
政策
API Proxy 中的 /policies
目錄包含可附加至 API Proxy 中流程的所有政策。
政策設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
Policy |
|||
name |
政策的內部名稱。您可以在名稱中使用的字元僅限: 您可以選擇使用 |
不適用 | 是 |
enabled |
設為 設為 |
true |
否 |
continueOnError |
將其設為 將其設為 |
false |
否 |
async |
設定為 如要在 API Proxy 中使用非同步行為,請參閱「JavaScript 物件模型」。 |
false |
否 |
政策附加
下圖顯示 API 代理程式流程的執行順序:
如上所示:
政策會以處理步驟的形式附加至流程。政策名稱用於參照要以處理步驟方式強制執行的政策。政策附件的格式如下:
<Step><Name>MyPolicy</Name></Step>
系統會依附加至流程的順序強制執行政策。例如:
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
政策附件設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
Step |
|||
Name |
這個步驟定義要執行的政策名稱。 | 不適用 | 是 |
Condition |
判斷是否要套用政策的條件陳述式。如果政策含有相關聯的條件,則只有在條件陳述式評估為 true 時,政策才會執行。 | 不適用 | 否 |
流程
ProxyEndpoint 和 TargetEndpoint 會定義要求和回應訊息處理的管道。處理管道包含要求流程和回應流程。每個要求流程和回應流程都會細分為 PreFlow、一或多個選用的條件或命名流程,以及 PostFlow。
- PreFlow:一律執行。會在任何條件式流程之前執行。
- PostFlow:一律執行。在任何條件式流程後執行。
此外,您也可以在 Proxy 端點中新增 PostClientFlow,該流程會在回應傳回至要求的用戶端應用程式後執行。只有 MessageLogging 政策可以附加至此流程。PostClientFlow 可減少 API 代理延遲時間,並提供可用於記錄的資訊,這些資訊會在回應傳回至用戶端 (例如 client.sent.start.timestamp
和 client.sent.end.timestamp
) 後才計算。這項流程主要用於測量回應訊息開始和結束時間戳記之間的時間間隔。
以下是附加訊息記錄政策的 PostClientFlow 範例。
... <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <PostClientFlow> <Request/> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ...
API 代理處理管道會按照以下順序執行流程:
要求管道:
- Proxy Request PreFlow
- Proxy Request 條件式流程 (選用)
- Proxy Request PostFlow
- 目標要求預檢
- 指定要求條件流程 (選用)
- 目標請求後續流程
回應管道:
- 目標回覆預先流程
- 指定回應條件式流程 (選用)
- 目標回應 PostFlow
- Proxy Response PreFlow
- Proxy Response 條件流程 (選用)
- Proxy Response PostFlow
- PostClientFlow 回應 (選用)
只有含有政策附件的流程才需要在 ProxyEndpoint 或 TargetEndpoint 設定中進行設定。只有在 PreFlow 或 PostFlow 處理期間需要強制執行政策時,才需要在 ProxyEndpoint 或 TargetEndpoint 設定中指定 PreFlow 和 PostFlow。
與條件式流程相反,PreFlow 和 PostFlow 元素的順序並不重要,因為 API 代理程式會在管道中適當的點執行每個元素,無論這些元素在 Endpoint 設定中顯示的位置為何。
條件式流程
Proxy 端點和目標端點支援無限數量的條件式流程 (也稱為命名流程)。
API Proxy 會測試條件式流程中指定的條件,如果符合條件,API Proxy 就會執行條件式流程中的處理步驟。如果條件不符合,系統會略過條件式流程中的處理步驟。系統會依據 API Proxy 中定義的順序評估條件式流程,並執行符合條件的第 1 個流程。
定義條件式流程後,您就能根據下列項目在 API Proxy 中套用處理步驟:
- 要求 URI
- HTTP 動詞 (
GET
/PUT
/POST
/DELETE
) - 查詢參數、標頭和表單參數的值
- 許多其他類型的條件
舉例來說,下列條件式流程會指定只在要求資源路徑為 /accesstoken
時執行。任何路徑為 /accesstoken
的傳入要求都會導致系統執行這個流程,以及附加至流程的任何政策。如果要求路徑不含 /accesstoken
後置字串,則不會執行這項流程 (但其他條件式流程可能會執行)。
<Flows> <Flow name="TokenEndpoint"> <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> </Flow> </Flows>
流程設定元素
名稱 | 說明 | 預設 | 是否必要 |
---|---|---|---|
Flow |
由 Proxy 端點或目標端點定義的要求或回應處理管道 | ||
Name |
流程的專屬名稱。 | 不適用 | 是 |
Condition |
條件式陳述式,可評估一或多個變數,並將其評估為 true 或 false。除了預先定義的 PreFlow 和 PostFlow 類型以外,所有流程都必須定義執行條件。不過,如果您在流程序列結尾加入單一流程,且不附帶任何條件,該流程就會充當流程序列結尾的「Else」陳述式。 | 不適用 | 是 |
Request |
與要求訊息處理相關聯的管道 | 不適用 | 否 |
Response |
與回應訊息處理相關聯的管道 | 不適用 | 否 |
步驟處理
Apigee 會強制執行條件式流程的順序。條件式流程會由上而下執行。系統會執行條件評估為 true
的第一個條件式流程,且只會執行一個條件式流程。
舉例來說,在下列流程設定中,任何不含路徑後置字串 /first
或 /second
的內送要求都會導致 ThirdFlow
執行,並強制執行名為 Return404
的政策。
<Flows> <Flow name="FirstFlow"> <Condition>proxy.pathsuffix MatchesPath "/first"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> </Request> </Flow> <Flow name="SecondFlow"> <Condition>proxy.pathsuffix MatchesPath "/second"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step> </Request> </Flow> <Flow name="ThirdFlow"> <Request> <Step><Name>Return404</Name></Step> </Request> </Flow> </Flows>
資源
「資源」(可用於 API Proxy 的資源檔案) 是指可使用政策附加至流程的指令碼、程式碼和 XSL 轉換。這些會顯示在 Apigee UI 中 API Proxy 編輯器的「Scripts」部分。
如要瞭解支援的資源類型,請參閱「管理資源」。
資源可儲存在 API Proxy、環境或機構中。在每個情況下,資源都會在政策中以名稱參照。Apigee 會從 API Proxy 開始,依序在環境和機構層級解析名稱。
儲存在機構層級的資源,可供任何環境中的政策參照。儲存在環境層級的資源可供該環境中的政策參照。儲存在 API Proxy 層級的資源,只能由該 API Proxy 中的政策參照。