条件流

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

在条件流中,仅当流条件的求值结果为 true 时才会执行政策(这与附加到 PreFlow 或 PostFlow 的政策不同,后者会始终执行)。本部分介绍如何创建条件流。

条件流简介

在处理请求和响应的过程中,每个细分只执行一个条件流,即条件求值结果为 true 的第一个流。

以下示例说明了使用条件流的一些方法。

示例 1

以下 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 流变量。流变量是命名的引用,其中包含与 Apigee 处理的 API 事务关联的状态信息。Apigee 定义了许多您可以引用的状态变量。

示例 2

如果您的服务后端提供天气报告和天气预报,则您的 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 时执行的条件流。
  • 向该新流添加一个政策。

添加条件流

新版代理编辑器

如需添加条件流,请执行以下操作:

  1. 选择代理编辑器中的开发标签页。
  2. 在左侧窗格中,选择代理端点 > 默认

    “默认”。" class="l10n-absolute-url-src screenshot" l10n-attrs-original-order="class,width,alt,src" src="https://cloud.google.com/static/apigee/docs/api-platform/fundamentals/images/proxy-endpoints-default.png" width="35%" />

    注意:您可能需要展开右侧窗格中的可视化编辑器以查看所有元素。为此,请点击可视化编辑器和文本编辑器之间的分隔线并向下拖动一点。

  3. 点击响应窗格上方的 + 按钮。

    “添加条件流”按钮

  4. 添加条件流对话框中,选择路径和谓词,然后在路径字段中输入要显示在请求路径中的路径后缀,以便执行条件流。请参见上面的示例 2

    “添加条件流”按钮

    条件流仅在请求是 GET 请求(而不是 PUTPOST 等)时执行。

    新流(名为 Flow-1)现在显示在代理端点窗格中。

    代理端点中显示的条件流。

  5. 新条件流的 XML 代码显示在文本编辑器中。

    代理端点中显示的条件流。

您可以根据需要修改条件元素。请参阅向流添加逻辑

将政策附加到流

现在您已经创建了条件流,接下来可以向其附加政策。下一个示例会添加一个配额政策,用于限制在一段时间内允许 API 代理向流发送的请求消息的数量:

  1. 在左侧窗格中,点击政策右侧的 + 按钮。
  2. 创建政策对话框中,点击选择政策类型字段,然后向下滚动到流量管理并选择配额
  3. 点击创建以创建政策。
  4. 请求窗格中,点击 Flow-1 旁边的 + 按钮。

    在“请求”窗格中点击 Flow-1 旁边的加号按钮。

  5. 添加政策步骤对话框中,点击选择现有政策字段,然后选择 Quota-1
  6. 点击添加

现在,请求窗格中会显示流以及附加的政策 Quota-1

显示新流和配额政策的“请求”窗格。

文本编辑器现在在 XML 的 Flow-1 元素中显示一个包含 Quota-1 政策的步骤:

XML 中显示的条件流和配额政策

使用此配置时,系统会对 GET 请求强制执行该配额政策。其他类型的请求不计入该配额政策中的请求数上限。

经典版代理编辑器

如需添加条件流,请选择 API 代理构建器中的开发标签页。

代理构建器的“开发”标签页

点击所需端点中的

“添加条件流”按钮

通过新建条件流表单,您可以为流命名并配置条件。在以下示例中,您将添加一个简单的条件,用来评估任何 URI 上位于基本路径之后的 GET 动词(与 PUTPOST 等相反)的请求消息 HTTP。

在“新建条件流”窗格中,流名为 Flow-1,并且会配置条件类型、路径和动词。

(如需了解如何构建条件语句,请参阅包含流变量的条件。)

新流(名为 Flow-1)现在显示在“导航器”菜单中。

突出显示了 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>

创建条件流后,便可以附加到政策。选择流后,点击请求或响应图表中的 + 步骤图标,以向流添加新政策或现有政策。

在“导航器”菜单中突出显示了名为 issue 的条件流示例,在“流”窗格中显示了“步骤”按钮。

在“添加步骤”窗格中,创建了新的政策实例,其政策类型为“配额”且显示名为 Quota-2。

通过将政策附加到选定的流,您正在配置 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 调用强制执行配额约束。

后续步骤

以下主题详细介绍了如何构建条件和使用变量: