您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。信息
流是构成 API 代理的基础组件通过流,您可以配置 API 代理执行政策和代码的顺序,从而对 API 的行为进行编程。
如需从概念上大致了解流,请参阅控制如何使用流执行代理。
本主题介绍如何创建条件流以及向更高级别的流添加逻辑(政策)。对创建条件的描述比本主题中介绍的内容更为详细。如需了解详情,请参阅流变量概览和使用流变量的条件。
向流附加政策
Edge 提供许多不同类型的预定义政策,用于实现安全机制、管理流量和操作消息。此外,您还可以通过这些政策添加自己的自定义代码来完全自定义消息处理。
例如:
- 将 OAuth 安全性政策附加到 ProxyEndpoint 的请求 PreFlow。由于 ProxyEndpoint 的请求 PreFlow 是流水线中的第一个流,因此您可以立即拒绝违反您的安全政策的请求。
- 将 JSON 到 XML 转换政策附加到 TargetEndpoint 的 响应 PostFlow,以便将响应从 JSON 转换为 XML。
- 将 JavaScript 政策附加到 ProxyEndpoint 的条件流,以便执行 JavaScript 代码来处理请求
创建条件流后,便可以附加到政策。选择流后,点击请求或响应图表中的 + 步骤图标,以向流添加新政策或现有政策。
通过将政策附加到选定的流,您正在配置 API 代理,以便仅对发送到该流 URI 和动词组合的请求强制执行配额政策。例如,如果您将政策附加到 learn 流,则在代理编辑器的代码视图中会生成以下 XML:
<ProxyEndpoint name="default"> ... <Flow name="issue"> <Description/> <Request> <Step> <Name>Quota-2</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition> </Flow> ... </ProxyEndpoint>
在此配置中,如果 GET 请求附带的 API 代理的 URI 模式为 .../issue/**(/issue/ 以及 URI 中最后一个正斜线后的所有内容),则系统会针对该 API 调用强制执行配额约束。
条件流简介
始终执行附加到 PreFlow 或 PostFlow 的所有政策。但是,仅当流的条件评估结果为 true 时,条件流中的政策才会执行。
在处理请求和响应的过程中,每个细分只执行一个条件流,即条件计算结果为 true 的第一个流。这意味着,您可以作为下列每项的一部分执行一个条件流:
- ProxyEndpoint 的请求流水线
- TargetEndpoint 的请求流水线
- ProxyEndpoint 的响应流水线
- TargetEndpoint 的响应流水线
视频:观看一段短视频,详细了解条件流。
例如,以下 ProxyEndpoint 定义显示了由 ProxyEndpoint 针对向 API 代理发出的任何 HTTP GET
请求执行的条件流:
<ProxyEndpoint name="default"> <PreFlow> <Request/> <Response/> </PreFlow> <Flows> <Flow name="Flow-1"> <Condition>request.verb="GET"</Condition> <Request/> <Response/> </Flow> </Flows> <PostFlow> <Request/> <Response/> </PostFlow> ... </ProxyEndpoint>
请注意,该条件引用 request.verb 流变量。流变量是命名的引用,其中包含与 Edge 处理的 API 事务关联的状态信息。Edge 定义了许多您可以引用的状态变量。
RESTful 服务是 API 资源的集合。API 资源是一种 URI 路径片段,用于识别开发者可通过调用 API 访问的某个实体。例如,如果您的服务后端提供天气报告和天气预报,则您的 API 可能会定义两个条件流以映射到这些 API 资源:/reports
和 /forecasts
。当 API 调用在网址中包含其中某个资源时,条件计算结果为 true,并执行与条件流关联的逻辑。
应用开发者随后可以通过向以下形式的网址发出请求来访问您的资源:
http://myAPIs.myCo.com/weather/reports
或者:
http://myAPIs.myCo.com/weather/forecasts
在 API 代理中,您可以定义与特定资源对应的条件流:
<ProxyEndpoint name="default"> <PreFlow> <Request/> <Response/> </PreFlow> <Flows> <Flow name="Flow-1"> <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition> <Request/> <Response/> </Flow> <Flow name="Flow-2"> <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition> <Request/> <Response/> </Flow> </Flows> <PostFlow> <Request/> <Response/> </PostFlow> ... </ProxyEndpoint>
在此示例中,您可以引用 proxy.pathsuffix
流变量,其中包含用于访问 API 代理的网址的后缀部分。然后,您可以将不同的政策附加到每个资源的条件流中。
添加条件流
在这个简单的示例中,您将设置一个仅当请求消息为 HTTP GET 时才会执行的流。
如需添加条件流,请选择 API 代理构建器中的开发标签页。
点击所需端点中的 + 图标。
通过新建条件流表单,您可以为流命名并配置条件。在以下示例中,您将添加一个简单的条件,用来评估任何 URI 上位于基本路径之后的 GET
动词(与 PUT
、POST
等相反)的请求消息 HTTP。
(了解如何在流变量和条件中构建条件语句。)
新流(名为 Flow-1)现在显示在“导航器”菜单中。
现在观察 ProxyEndpoint 的 XML 配置。选择导航器菜单中的 Flow-1。
您会看到以下配置。
<PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <Flows> <Flow name="Flow-1"> <Request/> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition> </Flow> </Flows> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow>
后续步骤
以下主题详细介绍了如何构建条件和使用变量: