鏈結多個 API Proxy

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

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

使用 Proxy Chaining 時,您可以指定一個 Proxy 是另一個 Proxy 的本機目標端點。請改用 LocalTargetConnection 元素,而非使用 HTTPTargetConnection 元素呼叫第二個 Proxy。

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

如果您有提供其他 Proxy 可用的獨立低階功能的 Proxy,Proxy 鏈結可能會很實用。舉例來說,透過後端資料儲存庫公開建立/讀取/更新/刪除作業的 Proxy,可以是將資料公開給用戶端的多個其他 Proxy 的目標 Proxy。

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

代理程式鏈結的運作方式

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

以下說明使用 HTTPTargetConnectionLocalTargetConnection (proxy 鏈結) 連結 Proxy 的差異:

不含 Proxy 鏈結的 Proxy 對 Proxy 通話圖表。

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

您可以指定其中一個 Proxy 為另一個 Proxy 的本地目標端點,藉此連結 Proxy。如要設定上圖所示的 Proxy-to-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 名稱或路徑。在以下範例中,有兩個 ProxyA 和 ProxyB,您希望 ProxyB 是 ProxyA 的目標端點。如要依 Proxy 名稱連結 Proxy,請執行下列步驟:

  1. 登入 Apigee UI
  2. 在左側窗格中依序選取「Develop」>「Proxies」
  3. 在 Proxy 清單中選取「ProxyA」ProxyA
  4. 按一下「開發」分頁標籤。
  5. 在「Code」窗格中,將 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 政策」。