将 API 代理连接到一起

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

您可以指定一个代理是另一个代理的目标端点,从而有效连接代理链中的两个代理。以这种方式链接代理可以帮助您避免网络跃点,从而提升整体性能。

使用代理链时,您指定一个代理是另一个代理的本地目标端点。使用 LocalTargetConnection 元素来调用第二个代理,而不是使用 HTTPTargetConnection 元素。

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

当您有一个代理提供了一些其他代理将使用的离散的低级功能时,您可能会发现代理链很有用。例如,使用后端数据存储公开创建/读取/更新/删除操作的代理可以是将数据公开给客户端的多个其他代理的目标代理。

视频:观看一个短视频,详细了解 API 代理链。

代理链的工作原理

代理链使用本地连接来最大程度地减少从另一个代理调用一个代理时的网络开销。此本地连接效率更高,因为它绕过了负载均衡器、路由器和消息处理器等网络功能。

下面说明了将代理与 HTTPTargetConnectionLocalTargetConnection(代理链)连接之间的区别:

不使用代理链的代理到代理的调用图。

使用代理链的代理到代理调用图。

您可以通过指定一个代理是另一个的本地目标端点来连接代理。 对于上图中的配置(代理链到代理调用与代理链),您应指定 ProxyB (/proxyB) 是 ProxyA (/proxyA) 的本地目标端点。这会导致将到达 ProxyA 的请求转发到 ProxyB。

您可以通过以下两种方式在代理之间创建本地连接:

  • 通过指定目标代理的名称和 ProxyEndpoint 名称
  • 通过指定目标代理端点的路径

使用 LocalTargetConnection 元素在 TargetEndpoint 配置中连接目标代理,如下所述。

通过代理名称连接代理

您可以按名称指定目标代理。从一开始创建连接并一起开发代理时,您可能会发现这是最有用的。如果您不知道名称(或者名称可能发生变化),请考虑连接目标代理的端点路径,如下所述。

按名称连接到目标代理时,您需要指定代理的名称和其 ProxyEndpoint 名称。

以下示例指定了名为 data-manager 的目标代理,以及 data-manager 公开的 ProxyEndpoint 名称。如需了解参考信息,请参阅 API 代理配置参考

<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>

按路径连接代理

您可以通过其端点路径指定目标代理。当您不知道代理名称或名称可能更改时,您可能希望以这种方式进行操作。

如果您的代理只是目标代理的使用方(例如,如果您不是同时开发两者),则该路径可能是最可靠的连接方式。例如,如果您连接的代理由其他团队开发和维护,您可能需要使用可靠的端点路径进行连接。

以下示例在 /v1/streetcarts/foodcarts/data-manager 指定一个目标代理,假定主机与当前代理相同。如需了解参考信息,请参阅 API 代理配置参考

<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 界面连接代理

您还可以使用 Apigee 界面按代理名称或路径连接代理。以下示例中有两个代理(ProxyA 和 ProxyB),您希望 ProxyB 成为 ProxyA 的目标端点。如需按代理名称连接代理,请执行以下步骤:

  1. 登录 Apigee 界面
  2. 在左侧窗格中依次选择开发 > 代理
  3. 在代理列表中,选择 ProxyA
  4. 点击开发标签页。
  5. 代码窗格中,将 XML 的 <TargetEndpoint> 部分替换为以下内容:
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. 点击保存

链接的代理、API 产品和安全

当两个代理都位于同一 API 产品中时,代理链是最佳选择。默认情况下,客户端可以使用这两个代理。Apigee 目前不支持在客户端无权访问的单独 API 产品中绑定第二个代理。

如果必须确保第二个代理不受直接客户端请求的影响,请考虑添加逻辑,让第二个代理检查客户端的 IP 地址。在通过链进行调用的情况下,IP 地址将为本地地址。您的代码可以先验证它是否为本地代码,然后再继续处理。如需了解执行此操作的一种方法,请参阅 AccessControl 政策