<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
Edge 允许您从一个 API 代理调用另一个 API 代理。此功能非常有用, 您有一个 API 代理,其中包含可供其他 API 代理使用的可重用代码。
反模式
在目标端点中使用 HTTPTargetConnection 或 自定义 JavaScript 代码会产生额外的网络跃点。
使用 HTTPTargetConnection 从代理 1 调用代理 2
以下代码示例使用 HTTPTargetConnection 从代理 1 调用代理 2:
<!-- /antipatterns/examples/2-1.xml --> <HTTPTargetConnection> <URL>http://myorg-test.apigee.net/proxy2</URL> </HTTPTargetConnection>
通过 JavaScript 代码从代理 1 调用代理 2
下面的代码示例使用 JavaScript 从代理 1 调用代理 2:
<!-- /antipatterns/examples/2-2.xml --> var response = httpClient.send('http://myorg-test.apigee.net/proxy2); response.waitForComplete();
代码流
如需了解为何出现这一固有缺陷,我们需要了解请求采用的路由,如下图所示:
如图所示,一个请求遍历多个分布式组件,包括路由器和消息处理器。
在上面的代码示例中,从代理 1 调用代理 2 意味着必须路由请求 传统路由(即 Router > MP)。这类似于从客户端调用 API,因而会导致多个网络跃点,从而增加延迟时间。这些跃点是 代理 1 请求已“达到”状态,没必要这样做议员
影响
从一个 API 代理调用另一个 API 代理时,会造成不必要的网络跃点, 必须从一个消息处理器传递到另一个消息处理器。
最佳做法
- 使用代理链功能从一个 API 代理调用另一个 API 代理。代理链更高效,因为它使用本地连接引用目标端点(另一个 API 代理)。
以下代码示例展示了在您的端点定义中使用 LocalTargetConnection 的代理链:
<!-- /antipatterns/examples/2-3.xml --> <LocalTargetConnection> <APIProxy>proxy2</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
调用的 API 代理将在同一消息处理器中执行;因此,它可避免网络跃点,如下图所示: