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

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

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

反模式

從另一個 API Proxy 叫用一個 API Proxy 時,無論是使用目標端點中的 HTTPTargetConnection,還是自訂 JavaScript 程式碼,都會導致額外的網路躍點。

使用 HTTPTargetConnection 從 Proxy 1 叫用 Proxy 2

下列程式碼範例會使用 HTTPTargetConnection,從 Proxy 1 叫用 Proxy 2:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>http://myorg-test.apigee.net/proxy2</URL>
</HTTPTargetConnection>

從 JavaScript 程式碼叫用 Proxy 1 中的 Proxy 2

下一個程式碼範例會使用 JavaScript 從 Proxy 1 叫用 Proxy 2:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('http://myorg-test.apigee.net/proxy2);
response.waitForComplete();

代碼流程

如要瞭解這項做法為何有先天上的缺點,請參閱下圖,瞭解要求採取的路徑:

圖 1:程式碼流程

如圖所示,要求會經過多個分散式元件,包括路由器和訊息處理器。

在上述程式碼範例中,從 Proxy 1 叫用 Proxy 2,表示要求必須在執行階段透過傳統路徑 (即 Router > MP) 轉送。這類似於從用戶端叫用 API,因此會產生多個網路躍點,進而增加延遲。考量到 Proxy 1 要求已「送達」MP,這些躍點並無必要。

影響

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

最佳做法

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

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

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

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

    圖 2:使用 Proxy Chaining 的程式碼流程

延伸閱讀