您正在查看 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 如何解析此网址:
- 网址的网域部分 http://myOrg-prod.apigee.net 与 Edge 上的虚拟主机相对应。在上面的 ProxyEndpoint 定义中,API 代理使用 <VirtualHost> 标记来引用名为 default 的虚拟主机。您可以在您的环境中定义多个虚拟主机。
虚拟主机定义了公开的 API 代理的网域和端口。虚拟主机还定义了是使用 HTTP 协议还是使用加密 HTTPS 协议访问 API 代理。如需详细了解虚拟主机,请参阅虚拟主机(Beta 版)简介。 - 网址的第二部分 /v1/weather 由 ProxyEndpoint 中的 <BasePath> 元素确定。基本路径对于环境的 API 代理必须是唯一的,以便两个 API 代理的基本路径不同。
- 网址的第三部分 /predictionrss 是 API 代理定义的资源,具有由 <Flows> 标记定义的相应条件流。
视频:观看一个短视频,详细了解 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"/>