API Proxy 設定參考資料

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

身為 Apigee 開發人員,您的主要開發活動包括設定 API Proxy,以便做為 API 或後端服務的 Proxy。本文是建構 API Proxy 時可用的所有設定元素參考資料。

如果您想瞭解如何建構 API Proxy,建議您先參閱「建構簡單的 API Proxy」一文。

請使用下列任一方法編輯 API Proxy 設定:

API Proxy 設定目錄結構

API Proxy 設定目錄結構如下所示:

顯示 apiproxy 為根目錄的目錄結構。在 apiproxy 目錄下方,有政策、proxy、資源和目標目錄,以及 weatherapi.xml 檔案。

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

下圖顯示要求/回應流程:

顯示用戶端呼叫 HTTP 服務。要求會先經過 Proxy 端點,然後再經過目標端點,最後才由 HTTP 服務處理。回應會先經過目標端點,然後再經過 Proxy 端點,最後才傳回至用戶端。

/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 片段 (例如 /weather),會附加至 API Proxy 的基準網址 (例如 http://apifactory-test.apigee.net)。BasePath 在環境中必須是唯一的。產生或匯入 API Proxy 時,系統會驗證唯一性。

在基礎路徑中使用萬用字元

您可以在 API 代理程式基礎路徑中使用一或多個「*」萬用字元。舉例來說,/team/*/members 的基本路徑可讓用戶端呼叫 https://[host]/team/blue/membershttps://[host]/team/green/members,而您不必建立新的 API Proxy 來支援新的團隊。請注意,系統不支援 /**/。

重要事項:Apigee 不支援使用萬用字元「*」做為基礎路徑的第一個元素。例如,系統不支援 /*/search。由於 Apigee 會以特定方式識別有效路徑,因此以「*」開頭的基礎路徑可能會導致非預期錯誤。

/
Properties 一組選用的 HTTP 設定可定義為 <ProxyEndpoint> 的屬性。可用的屬性包括:
  • request.queryparams.ignore.content.type.charset

    使用 request.queryparams.ignore.content.type.charset 屬性,告知 Proxy 在處理要求網址時,忽略 Content-Type 標頭的 charset 參數。例如:

    <Properties>
      <Property name="request.queryparams.ignore.content.type.charset">true</Property>
    </Properties>

    下表顯示輸出內容範例,取決於 charset 屬性的設定,以及 Content-Type 標頭的 charset 參數是否存在。

    房源設定 標頭值 輸出範例
    charset=false 未設定 charset 參數 [email protected]
    charset=false charset=utf-8 john.doe [email protected]
    charset=true,且標頭中沒有 charset 參數。 未設定 charset 參數 [email protected]
    charset=true charset=utf-8 參數組 [email protected]
  • request.payload.parse.limit

    使用屬性 request.payload.parse.limit 設定可在要求流程中處理的最大酬載大小 (以 MB 為單位)。

    例如:

    <Properties>
      <Property name="request.payload.parse.limit">30M</Property>
    </Properties>

    可設定的最小限制為 10M,可設定的最大限制為 30M。如果未設定這個屬性,則預設限制為 10M。

    詳情請參閱「訊息酬載大小」。

不適用
FaultRules
定義 Proxy 端點如何回應錯誤。錯誤規則會指定兩個項目:
  • 根據預先定義的類別、子類別或錯誤名稱,指定要處理的錯誤的條件
  • 一或多項政策,定義對應條件的錯誤規則行為

請參閱「處理錯誤」。

不適用
DefaultFaultRule

處理其他錯誤規則未明確處理的任何錯誤 (系統、傳輸、訊息或政策)。

請參閱「處理錯誤」。

不適用
RouteRule 定義 ProxyEndpoint 要求管道處理後的入站要求訊息目的地。通常,RouteRule 會指向具名目標端點、IntegrationEndpoint 或網址。
Name 必要屬性,提供 RouteRule 的名稱。您可以在名稱中使用的字元僅限於 A-Za-z0-9._\-$ %。例如 Cat2 %_ 就是合法名稱。 不適用
Condition 在執行階段用於動態轉送的選用條件陳述式。舉例來說,如果您想啟用以內容為依據的轉送功能,以便支援後端版本控制,則可使用條件式 RouteRules。 不適用
TargetEndpoint

用於識別命名 TargetEndpoint 設定的選用字串。命名的目標端點是指在 /targets 目錄中,由同一個 API Proxy 定義的任何目標端點。

指定目標端點後,您就能指出 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

顯示用戶端呼叫 HTTP 服務。要求會先經過 Proxy 端點,然後再經過目標端點,最後才由 HTTP 服務處理。回應會先經過目標端點,然後再經過 Proxy 端點,最後才傳回至用戶端。

目標端點是 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)。

您可以使用 <Authentication> 子元素,對特定 Google Cloud 產品 (例如 Cloud FunctionsCloud Run) 執行的 Google 服務或自訂服務發出經過驗證的呼叫。如要使用 <Authentication> 元素,請按照「使用 Google 驗證」一文所述的步驟進行設定和部署。在適當設定下,政策會為您建立驗證權杖,並將其新增至服務要求。另請參閱 <Authentication> 元素用法

URL 定義後端服務的網路位址,目標端點會將要求訊息轉送至該位址。 不適用
LoadBalancer

定義一或多個命名的 TargetServer 設定。命名 TargetServer 設定可用於負載平衡,用於定義 2 個以上端點設定連線。

您也可以使用目標伺服器,將 API Proxy 設定與具體後端服務端點網址分離。

不適用
Properties 一組選用的 HTTP 設定可定義為 <TargetEndpoint> 的屬性。

使用 response.payload.parse.limit 屬性,設定可在回應流程中處理的最大酬載大小 (以 MB 為單位)。

例如:

<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 的目標對象。如果 useTargetUrltrue,且參照的變數未解析為有效變數,則會使用目標的網址 (不含查詢參數) 做為目標對象。假設要求路徑為 /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

<SSLInfo> 區塊可用於單向和雙向 TLS/SSL。

Enabled

將此屬性設為 true 時,系統會根據此 <SSLInfo> 區塊中指定的任何其他參數,指定目標連線應使用 SSL 通訊協定。設為 false 時,表示目標連線不應使用 SSL。

不過,如果包含的 <HTTPTargetConnection> 區塊包含 <URL> 元素,且該元素評估為開頭為 https:// 的字串,即使 <Enabled> 為否 (false),系統也會使用 SSL 通訊協定。在這種情況下,系統會忽略整個 <SSLInfo> 區塊。

反之,如果有開頭為 http://<URL> 元素,即使 <Enabled> 為 true,也不會使用 SSL 通訊協定。

false
Enforce

在 Apigee 和目標後端之間強制執行嚴格的 SSL。

如果設為 true,則會針對憑證無效、憑證已過期、憑證為自簽、憑證主機名稱不符或憑證根目錄不受信任的目標,導致連線失敗。系統會傳回 4xx5xx 的失敗代碼。

如果未設定或設為 false,則連線至有問題憑證的目標後端的結果,取決於 <IgnoreValidationErrors> 的設定 (請參閱下文)。如果 <IgnoreValidationErrors> 設為 true,在特定情況下,系統可能會傳回成功回應 (2xx)。

您可以使用功能旗標 SSLInfo.Enforce 在環境層級覆寫 Enforce 欄位。請參閱「指定環境層級的 SSL 強制執行」一文。

false
TrustStore

含有受信任的根伺服器憑證的金鑰庫。如果傳送的憑證鏈結終止於此 KeyStore 中包含的憑證,Apigee 會將遠端同端視為可信任。

不適用
ClientAuthEnabled

如果設為 true,則會在 Apigee 和遠端對等端 (API 用戶端或目標後端) 之間啟用雙向 TLS (也稱為雙向 TLS 或 mTLS)。

啟用雙向 TLS 通常需要在 Apigee 上設定信任存放區和金鑰存放區。

false
KeyStore 包含用於外送用戶端驗證的私密金鑰的 KeyStore 不適用 是 (如果 ClientAuthEnabled 為 true)
KeyAlias 用於外送用戶端驗證的私密金鑰別名 不適用 是 (如果 ClientAuthEnabled 為 true)
IgnoreValidationErrors

指出系統是否忽略驗證錯誤。如果後端系統使用 SNI,且傳回的憑證主體別名 (DN) 與主機名稱不相符,就無法忽略錯誤,連線也會失敗。

注意:如果將 <Enforce> 設為 true,系統會忽略 <IgnoreValidationErrors> 的值。

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 設為 truefalse,則指定的值會覆寫 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 會執行下列工作:

  1. 在 PreFlow 中執行名為 my-set-integration-request-policy 的政策,該政策會設定整合要求物件和整合流程變數。
  2. 使用 my-int-endpoint 做為目標端點,如 RouteRule 所指定。
  3. 讀取 my-set-integration-request-policy 建立的整合要求物件。
  4. 使用 SetIntegrationRequest 政策設定的要求物件和流程變數,將要求傳送至 Apigee 的整合平台。
  5. 將整合項目的回應儲存在回應訊息中。

包含 <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

政策的內部名稱。您可以在名稱中使用的字元僅限:A-Za-z0-9._\-$ %。不過,Apigee UI 會強制執行其他限制,例如自動移除非英數字元的字元。

您可以選擇使用 <DisplayName> 元素,在 Apigee UI 代理程式編輯器中為政策加上不同自然語言名稱的標籤。

不適用
enabled

設為 true 即可強制執行政策。

設為 false 即可關閉政策。即使政策仍附加至流程中,也不會強制執行。

true
continueOnError

將其設為 false,即可在政策失敗時傳回錯誤。這是大多數政策的預期行為。

將其設為 true,即使政策失敗,流程執行作業仍會繼續。

false
async

設定為 true 時,政策執行作業會卸載至其他執行緒,讓主執行緒可自由處理其他要求。離線處理作業完成後,主執行緒就會回來,並完成處理訊息流程。在某些情況下,將 async 設為 true 可提升 API 代理程效能。不過,過度使用非同步作業可能會因為執行緒切換過多而影響效能。

如要在 API Proxy 中使用非同步行為,請參閱「JavaScript 物件模型」。

false

政策附加

下圖顯示 API 代理程式流程的執行順序:

顯示用戶端呼叫 HTTP 服務。要求會遇到 Proxy 端點和目標端點,其中各自包含觸發政策的步驟。HTTP 服務傳回回應後,ProxyEndpoing 會先處理回應,然後再傳回給用戶端。與要求一樣,回應會由步驟中的政策處理。

如上所示:

政策會以處理步驟的形式附加至流程。政策名稱用於參照要以處理步驟方式強制執行的政策。政策附件的格式如下:

<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.timestampclient.sent.end.timestamp) 後才計算。這項流程主要用於測量回應訊息開始和結束時間戳記之間的時間間隔。

以下是附加訊息記錄政策的 PostClientFlow 範例。

...
  <PostFlow name="PostFlow">
      <Request/>
      <Response/>
  </PostFlow>
  <PostClientFlow>
      <Request/>
      <Response>
          <Step>
              <Name>Message-Logging-1</Name>
          </Step>
      </Response>
  </PostClientFlow>
  ...

API 代理處理管道會按照以下順序執行流程:

要求管道:

  1. Proxy Request PreFlow
  2. Proxy Request 條件式流程 (選用)
  3. Proxy Request PostFlow
  4. 目標要求預檢
  5. 指定要求條件流程 (選用)
  6. 目標請求後續流程

回應管道:

  1. 目標回覆預先流程
  2. 指定回應條件式流程 (選用)
  3. 目標回應 PostFlow
  4. Proxy Response PreFlow
  5. Proxy Response 條件流程 (選用)
  6. Proxy Response PostFlow
  7. 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 中的政策參照。