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

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

Edge 可讓您從另一個 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>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 代表要求必須在執行階段透過傳統路徑 (即路由器 > 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 鏈的程式碼流程

其他資訊