反模式:使用自訂程式碼或做為目標,在 Proxy 中叫用 Proxy

您正在查看 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

Apigee 可讓您從另一個 API Proxy 叫用一個 API Proxy。如果您有 API Proxy,且其中包含可供其他 API Proxy 使用的可重複使用程式碼,這項功能就特別實用。

反模式

在目標端點中使用 HTTPTargetConnection 或自訂 JavaScript 程式碼,從一個 API Proxy 叫用另一個 API Proxy,會導致額外的網路跳轉。

使用 HTTPTargetConnection 從 Proxy 1 叫用 Proxy 2

以下程式碼範例使用 HTTPTargetConnection 從 Proxy 1 叫用 Proxy 2:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>https://api-test.example.com/proxy2</URL>
</HTTPTargetConnection>

透過 JavaScript 程式碼從 Proxy 1 叫用 Proxy 2

以下程式碼範例使用 JavaScript 從 Proxy 1 叫用 Proxy 2:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('https://api-test.example.com/proxy2);
response.waitForComplete();

代碼流程

為了瞭解為何這項做法有其固有缺點,我們需要瞭解要求的路徑,如下圖所示:

1) 用戶端向 Proxy 1 提出要求,2) Proxy 1 向 Proxy 2 提出要求,導致網路跳轉,
            3) Proxy 2 向目標提出要求。
圖 1:程式碼流程

如圖所示,要求會遍歷多個分散式元件,包括 Router 和 Message Processor。

在上方的程式碼範例中,從 Proxy 1 叫用 Proxy 2 表示要求必須在執行階段透過傳統路徑 (Router > MP) 進行路由。這類似於從用戶端叫用 API,因此會產生多個網路躍點,導致延遲時間增加。考量到 Proxy 1 要求已抵達 MP,因此這些跳躍是不必要的。

影響

從另一個 API Proxy 叫用一個 API Proxy 會導致不必要的網路跳躍,也就是說,要求必須從一個訊息處理器傳遞至另一個訊息處理器。

最佳做法

  • 使用Proxy 鏈結功能,從一個 API Proxy 叫用另一個 API Proxy。Proxy 鏈結效率更高,因為它會使用本機連線參照目標端點 (另一個 API Proxy)。

    程式碼範例會在端點定義中使用 LocalTargetConnection 顯示 Proxy Chaining:

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

    系統會在同一個訊息處理器中執行叫用的 API Proxy,因此可避免網路躍點,如以下圖所示:

    1) 用戶端向 Proxy 1 提出要求,2) Proxy 1 透過 pseudo-local 呼叫向 Proxy 2 提出要求,3) Proxy 2 向目標提出要求。
    圖 2:含有 Proxy Chaining 的程式碼流程

延伸閱讀