了解路由

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

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

观看本视频,了解路由的介绍,其中描述了 ProxyEndpoint 与 TargetEndpoint 之间的关系。

确定 API 代理端点的网址

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

在 Edge 上创建 API 代理后,应用用于访问该代理的默认网址采用以下格式:

http://{org-name}-{env-name}.apigee.net/{base-path}/{resource-path}

https://{org-name}-{env-name}.apigee.net/{base-path}/{resource-path}

其中:

  • {org-name} 是您的组织名称。此名称是在 Edge 上创建帐号时创建的。
  • {env-name} 是 Edge 环境名称。默认情况下,在云端创建的所有 Apigee 组织都预配有两个环境:“测试”和“prod”。部署 API 代理时,您可以选择将其部署到一个或两个环境中。
  • 创建API代理时会定义 {base-path}{resource-path}

当 Edge 收到请求时,Edge 会解析网址以将请求定向到正确的 ProxyEndpoint。例如,以下网址用于访问 Edge 上的 API 代理:

http://myOrg-prod.apigee.net/v1/weather/forecastrss

如果检查上图中 API 代理的 ProxyEndpoint 定义,就可以看到 Edge 解析此网址的方式:

  1. 网址的域名部分 http://myOrg-prod.apigee.net 对应于 Edge 上的虚拟主机。在上面的 ProxyEndpoint 定义中,API 代理使用 <VirtualHost> 标记来引用名为 default 的虚拟主机。您可以在您的环境中定义多个虚拟主机。

    虚拟主机定义了公开的 API 代理的网域和端口。虚拟主机还定义了是使用 HTTP 协议还是使用加密 HTTPS 协议访问 API 代理。如需详细了解虚拟主机,请参阅关于虚拟主机(Beta 版)
  2. 网址的第二部分 /v1/weather 由 ProxyEndpoint 中的 <BasePath> 元素确定。基本路径对于环境的 API 代理必须是唯一的,以便两个 API 代理的基本路径不同。
  3. 网址的第三部分 /forecastrss 是 API 代理定义的资源,具有由 /forecastrss 标记定义的相应条件流。

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

确定目标端点的网址

ProxyEndpoint 定义中的 <RouteRule> 标记确定 API 代理的目标,并在处理 ProxyEndpoint 请求的 PreFlow、条件流和 PostFlow 的所有政策之后进行评估。

ProxyEndpoint 可以将目标定义为:

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

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

直接网址

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

<RouteRule name="default">
  <URL>http://api.mycompany.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,则请求将转发到名为 TargetEndpoint1 的 TargetEndpoint。如果不是,则请求将转发到 TargetEndpoint2。

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

如果您有多个路由规则,请创建一个作为“default”,即没有条件的路由规则。确保默认路由规则在条件路由列表中最后定义,因为规则是在 ProxyEndpoint 中自上而下进行评估的。

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

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

Null 路由

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

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

<RouteRule name="GoNowhere"/>

了解详情