了解路由

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

路由确定从 ProxyEndpointTargetEndpoint 的请求的路径。路由中包含用于访问 API ProxyEndpoint 的网址以及 TargetEndpoint 定义的后端服务的网址。

观看此视频了解路由的简介,其中介绍了 ProxyEndpointTargetEndpoint 之间的关系。

确定 API 代理端点的网址

下图显示了从应用发送到 ProxyEndpoint 的请求,并且该请求被定向到后端服务:

HTTP 客户端请求通过 API 代理发送到 HTTP 服务,然后响应会通过 API 代理返回给客户端。

在 Apigee 上创建 API 代理后,应用用来访问代理的默认网址具有以下形式:

https://www.example.com/shopping/cart/addItem
        |_____________| |___________| |_____|
               |             |           |
            hostname      basepath     resource

其中:

  • 主机名是您添加到 DNS 中的网域或 IP 地址。
  • 基本路径和资源路径在创建 API 代理时定义。

当请求传入 Apigee 时,Apigee 会解析网址以将请求定向到正确的 ProxyEndpoint。例如,以下网址用于访问一个 API 代理:

http://example.com/v1/weather/forecastrss

如果您查看上图中 API 代理的 ProxyEndpoint 定义,则可以看到此网址是如何解析的:

  1. 网址的网域部分 http://example.com 对应于为环境组定义的主机名。代理已部署到该环境组中的一个或多个环境。如需了解详情,请参阅环境和环境组简介
  2. 网址的第二部分 /v1/weatherProxyEndpoint 中的 <BasePath> 元素确定。您在创建代理时定义基本路径。API 代理在环境中的基本路径必须是唯一的,从而使同一环境中的两个 API 代理不会具有相同的基本路径。
  3. 网址的第三部分 /forecastrss 是 API 代理定义的资源,具有 <Flows> 元素定义的对应条件流。

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

确定目标端点的网址

ProxyEndpoint 定义中的 <RouteRule> 元素确定 API 代理的目标,并且会在 ProxyEndpoint 请求的 PreFlow、条件流和 PostFlow 中的所有政策之后计算。

ProxyEndpoint 可以将目标定义为:

  • 指向后端服务的直接网址。
  • 单个 TargetEndpoint 定义。
  • 多个 TargetEndpoint,API 代理根据条件将请求委托给目标端点。
  • Null 路由或目标,表示请求未转发到目标。相反,请求的所有处理和响应的生成都在 Apigee 上进行。

视频:观看一个短视频,详细了解目标端点。

直接网址

ProxyEndpoint 可以绕过任何命名的 TargetEndpoint 配置,直接调用后端服务。例如,以下 <RouteRule> 始终对 http://example.com/myAPI: 进行 HTTP 调用。

<RouteRule name="default">
  <URL>http://example.com/myAPI</URL>
</RouteRule>

但是,由于没有 TargetEndpoint,您只能向 ProxyEndpoint 定义的流添加政策。

单一目标

在单个目标定义中,ProxyEndpoint 按名称引用单个 TargetEndpoint 定义,如上图所示:

<RouteRule name="default">
  <TargetEndpoint>default</TargetEndpoint>
</RouteRule>

对此 API 代理的所有请求都定向到相同的 TargetEndpoint 定义。TargetEndpoint 中的 <URL> 标记确定后端服务的位置。在上图中,目标网址是 http://weather.yahooapis.com

条件目标

<RouteRule> 标记允许您根据条件将请求定向到目标。您可以使用流变量、查询参数、HTTP 标头、消息内容或上下文信息(如时段和语言区域)来确定目标端点。例如,您可以在请求网址中包括一个地理区域,例如美国和英国。然后,您可以基于地区将请求路由到目标端点。

以下路由规则会对请求中的 HTTP 标头进行评估。如果 HTTP 标头 routeTo 的值为 TargetEndpoint1,则请求将被转发到名为 TargetEndpoint1TargetEndpoint。如果不是,则请求将转发到 TargetEndpoint2

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <TargetEndpoint>TargetEndpoint2</TargetEndpoint>
</RouteRule>

如果您有多个路由规则,请将其中一个创建为默认规则,即没有条件的路由规则。确保默认路由规则在条件路由列表中最后定义,因为在 ProxyEndpoint 中规则是自上而下计算的。

另请参阅条件路由条件参考文档

视频:观看一个短视频,了解如何使用条件目标路由到目标端点。

Null 路由

null 路由支持不需要将请求消息转发到 TargetEndpoint 的场景。当 ProxyEndpoint 执行所有必要的处理时(例如使用 JavaScript 调用外部服务),这非常有用。

以下示例定义了一个 null 路由:

<RouteRule name="GoNowhere"/>

了解详情