鏈結多個 API Proxy

本頁內容適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

您可以指定一個 Proxy 做為另一個 Proxy 的目標端點,在 Proxy 鏈中有效連結這兩個 Proxy。以這種方式串連 Proxy 可避免網路躍點,進而提升整體效能。

透過 Proxy 鏈結,您可以指定一個 Proxy 是另一個 Proxy 的本機目標端點。 您可以使用 LocalTargetConnection 元素,而非使用 HTTPTargetConnection 元素呼叫第二個 Proxy。

<LocalTargetConnection>
    <APIProxy>myproxy2</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

當您擁有提供某些離散低層級功能的 Proxy,而其他 Proxy 會耗用這些功能時,Proxy 鏈結就可能很有用。舉例來說,如果某個 Proxy 透過後端資料存放區公開建立/讀取/更新/刪除作業,則該 Proxy 可能會成為多個其他 Proxy 的目標 Proxy,這些 Proxy 會向用戶端公開資料。

影片:觀看短片,進一步瞭解 API Proxy 鏈結。

Proxy 鏈結的運作方式

Proxy 鏈結會使用本機連線,在從一個 Proxy 呼叫另一個 Proxy 時,盡量減少網路負擔。這類本機連線會略過負載平衡器、路由器和訊息處理器等網路功能,因此效率更高。

下圖說明透過 HTTPTargetConnectionLocalTargetConnection (Proxy 鏈結) 連接 Proxy 的差異:

不含 Proxy 鏈結的 Proxy 對 Proxy 呼叫圖表。

透過 Proxy 鏈結進行 Proxy 對 Proxy 呼叫的圖表。

如要連結 Proxy,請指定其中一個 Proxy 是另一個 Proxy 的本機目標端點。如果是上圖中的設定 (透過 Proxy 鏈結的 Proxy 對 Proxy 呼叫),您會指定 ProxyB (/proxyB) 是 ProxyA (/proxyA) 的本機目標端點。這會導致抵達 ProxyA 的要求轉送至 ProxyB。

您可以透過兩種方式在 Proxy 之間建立本機連線:

  • 指定目標 Proxy 的名稱和 ProxyEndpoint 名稱
  • 指定目標 Proxy 端點的路徑

您可以使用 LocalTargetConnection 元素,在 TargetEndpoint 設定中連結目標 Proxy,如下所述。

依 Proxy 名稱連結 Proxy

您可以依名稱指定目標 Proxy。從頭建立連線並共同開發 Proxy 時,您可能會發現這項功能最實用。如果您不知道名稱 (或名稱可能會變更),請考慮連線至目標 Proxy 的端點路徑,如下所述。

如要依名稱連線至目標 Proxy,請指定 Proxy 的名稱和 ProxyEndpoint 的名稱。

以下範例會指定名為 data-manager 的目標 Proxy,以及 data-manager 公開的 ProxyEndpoint 名稱。如需參考資訊,請參閱 API Proxy 設定參考資料

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <APIProxy>data-manager</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>
</TargetEndpoint>

依路徑連結 Proxy

您可以透過端點路徑指定目標 Proxy。如果您不知道 Proxy 名稱,或名稱可能會變更,建議採用這種做法。

如果您的 Proxy 只是目標 Proxy 的消費者 (例如您並未同時開發兩者),路徑可能是最可靠的連線方式。舉例來說,如果您連線的 Proxy 是由其他團隊開發及維護,您可能會想使用可靠的端點路徑連線。

以下範例會在 /v1/streetcarts/foodcarts/data-manager 指定目標 Proxy,假設主機與目前的 Proxy 相同。如需參考資訊,請參閱 API Proxy 設定參考資料

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <Path>/v1/streetcarts/foodcarts/data-manager</Path>
    </LocalTargetConnection>
</TargetEndpoint>

<LocalTargetConnection> 下的 <Path> 元素可以是字串,也可以使用訊息範本動態指派值。

使用 Apigee UI 連接 Proxy

您也可以使用 Apigee UI,依 Proxy 名稱或路徑連線 Proxy。在下列範例中,有兩個 Proxy,分別是 ProxyA 和 ProxyB,您希望 ProxyB 成為 ProxyA 的目標端點。如要依 Proxy 名稱連結 Proxy,請按照下列步驟操作:

  1. 前往 Proxy 清單。
  2. Cloud 控制台中的 Apigee

    在 Google Cloud 控制台中,前往「Proxy development」(Proxy 開發) >「API proxies」(API Proxy) 頁面。

    前往 API Proxy

    傳統版 Apigee UI

    1. 登入 Apigee 使用者介面
    2. 在左側窗格中選取「Develop」>「Proxies」
  3. 在 Proxy 清單中,選取「ProxyA」ProxyA
  4. 按一下「開發」分頁標籤。
  5. 在「程式碼」窗格中,將 XML 的 <TargetEndpoint> 區段替換成下列程式碼:
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. 按一下 [儲存]

鏈結的 Proxy、API 產品和安全性

如果兩個 Proxy 位於同一個 API 產品中,最適合使用 Proxy 鏈結。根據預設,用戶端可使用這兩種方式。Apigee 目前不支援將第二個 Proxy 綁定至用戶端不應存取的獨立 API 產品。

如果第二個 Proxy 必須防範直接用戶端要求,請考慮新增邏輯,讓第二個 Proxy 檢查用戶端的 IP 位址。如果是使用鏈結發出的呼叫,IP 位址會是本機位址。程式碼可以先驗證是否為本機,再允許繼續處理。如要瞭解其中一種做法,請參閱 AccessControl 政策