本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
路由确定从 ProxyEndpoint
到 TargetEndpoint
的请求的路径。路由中包含用于访问 API ProxyEndpoint
的网址以及 TargetEndpoint
定义的后端服务的网址。
观看此视频了解路由的简介,其中介绍了 ProxyEndpoint
和 TargetEndpoint
之间的关系。
确定 API 代理端点的网址
下图显示了从应用发送到 ProxyEndpoint
的请求,并且该请求被定向到后端服务:
在 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
定义,则可以看到此网址是如何解析的:
- 网址的网域部分
http://example.com
对应于为环境组定义的主机名。代理已部署到该环境组中的一个或多个环境。如需了解详情,请参阅环境和环境组简介。 - 网址的第二部分
/v1/weather
由ProxyEndpoint
中的<BasePath>
元素确定。您在创建代理时定义基本路径。API 代理在环境中的基本路径必须是唯一的,从而使同一环境中的两个 API 代理不会具有相同的基本路径。 - 网址的第三部分
/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
,则请求将被转发到名为 TargetEndpoint1
的 TargetEndpoint
。如果不是,则请求将转发到 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"/>