向您的 API 添加 SpinkeArrest 政策

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

学习内容

通过本教程,您将学会:

  • 添加影响请求和响应的政策。
  • 了解此政策的影响。

所需条件

添加 SpinkeArrest 政策

在本教程中,您将添加并配置 SpikeArrest 政策,以防止目标服务因使用量、错误客户端或恶意攻击而出现突发流量高峰。请求数超过速率限制时,API 会返回 HTTP 429 错误。

新版代理编辑器

如需将 SpikeArrest 政策添加到 API 代理,请执行以下操作:

  1. 如果您使用的是 Cloud 控制台中的 Apigee 界面:请选择代理开发 > API 代理

    如果您使用的是经典版 Apigee 界面:请选择开发 > API 代理,然后在代理窗格中,选择代理的环境。

    如果您按照使用入门教程进行操作,则可以将其添加到您在创建 API 代理中创建的 API 代理。

  2. 点击开发标签页。
  3. 在左侧窗格中,点击政策行中的 + 按钮。
  4. 创建政策对话框中,点击选择政策类型字段,然后向下滚动到流量管理并选择 SpikeArrest

  5. 您可以视需要更改政策的名称显示名。 默认情况下,Apigee 会为政策名称提供一个简短的前缀(在本例中为 SA-)。您可以在该前缀后添加一系列由短划线分隔的描述性字词。请参阅命名规则

    “创建政策”对话框。

    完成后,点击创建以创建政策。

现在您已经创建了 SpikeArrest 政策,接下来可以将其添加到 PreFlow 中的一个步骤。

  1. 在左侧窗格中,依次选择代理端点 > 默认 > PreFlow

    在 Proxy Explorer 中选择的 PreFlow 的目标端点。

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

  2. 点击可视化编辑器右下角PreFlow窗格中 PreFlow 旁边的 + 按钮:

    点击“响应”窗格中 PreFlow 旁边的 + 按钮。

  3. 添加政策步骤对话框中,选择 SpikeArrest 政策。
  4. 点击添加以附加政策。

    SpikeArrest 政策现在显示在响应窗格中:

    “响应”窗格中显示的 SpikeArrest 政策。

现在,您已将 SpikeArrest 政策附加到 PreFlow,接下来可以尝试更改政策的代码:

  1. 响应窗格中,选择 SA-

    “政策”标签页中显示的 SpikeArrest 政策。

  2. 文本编辑器将显示代理的 XML 代码,包括 PreFlow 的响应元素中的 SpikeArrest 政策步骤。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SpikeArrest continueOnError="false" enabled="true" name="SA-">
        <DisplayName>SA-</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <MessageWeight ref="request.header.weight"/>
        <Rate>30ps</Rate>
    </SpikeArrest>
  3. 在政策的 XML 中,将 <Rate> 元素的值更改为 1pm1pm(在云端会转换为每 60 秒允许 2 次请求左右)。

    您可以将速率指定为每分钟 (pm) 或每秒 (ps) 整数值。这是一个非常高的限额,仅在本教程中用于演示政策。通常,您可以将其设置为更高的限额。

    请注意,属性检查器中的 Rate 值也会更改为 1pm。或者,您也可以在属性检查器中更改速率值,该值会反映在 XML 视图中。

  4. 点击保存,保存当前修订版本以及您所做的更改。

经典版代理编辑器

如需将 SpikeArrest 政策添加到 API 代理,请执行以下操作:

  1. 登录 Apigee 界面
  2. 在左侧导航栏中,选择开发 > API 代理
  3. 选择要添加 SkekeArrest 政策的 API 代理。

    如果您按照使用入门教程进行操作,则可以将其添加到您在创建 API 代理中创建的 API 代理。

  4. 在新 API 代理的编辑器中,点击开发标签页:

    “开发”标签页位于“概览”标签页和“Trace”标签页之间。

    API 代理编辑器让您可查看 API 代理的结构并配置其流。编辑器将显示代理的请求和响应消息流的直观表示,以及定义代理的底层 XML 的可修改显示。

  5. 在左侧导航窗格中,点击PreFlow下的 PreFlow。(其他教程将介绍 的概念。)
  6. 点击与请求 PreFlow 相对应的 +步骤按钮。此时会显示您可以创建的所有政策的分类列表。

    点击“请求 PreFlow”中的“步骤”。

  7. 在“流量管理”类别中选择 SpikeArrest。此时会显示新建政策对话框:

    创建 SpinkeArrest 政策。

  8. 保留默认名称,然后点击添加。新政策将附加到请求的 PreFlow 流。
  9. 在导航器中,确保PreFlow下的 PreFlow 仍处于选中状态,并在 API 代理编辑器中注意以下内容:
    • 在 API 代理编辑器左侧的导航器的政策下添加了新的 SpokeArrest-1 政策。
    • 将 SpinkeArrest-1 图标添加到了 API 代理编辑器顶部中心的设计师视图,此视图是代理消息流的直观表示。
    • 政策的 XML 显示在 API 代理编辑器底部中心的代码视图中。

    使用 SpiekeArrest 政策查看 PreFlow。

  10. 在导航器的“政策”下选择 SpikeArrest-1,并在 API 代理编辑器中注意以下内容:
    • 政策详细信息显示在 API 代理编辑器顶部中心的设计师视图中。
    • 政策的 XML 显示在 API 代理编辑器底部中心的代码视图中。
    • 政策的 XML 元素和属性值显示在 API 代理编辑器右侧的属性检查器中。

    “属性检查器”窗格会显示 SparkeArrest-1 政策的值。

  11. 在政策的 XML 中,将 <Rate> 元素的值更改为 1pm1pm(在云端会转换为每 60 秒允许 2 次请求左右)。

    您可以将速率指定为每分钟 (pm) 或每秒 (ps) 整数值。这是一个非常高的限额,仅在本教程中用于演示政策。通常,您可以将其设置为更高的限额。

    请注意,属性检查器中的 Rate 值也会更改为 1pm。或者,您也可以在属性检查器中更改速率值,该值会反映在 XML 视图中。

  12. 点击保存,保存当前修订版本以及您所做的更改。
  13. 使用部署到:按钮部署您的更改
  14. 使用您网域的网址,通过 curl 调用 API:

    curl "http://YOUR_DOMAIN/myproxy"

    其中:

    • ENV_GROUP_HOSTNAME 是您在预配期间设置的环境组主机名
    • DOMAIN_HOSTNAME 是您的网域主机名。

    如需了解详情,请参阅测试 API 代理

    确保请求成功,并且您看到的 XML 响应与以前相同。(您也可以在网络浏览器中输入网址。)

    接下来,请尝试以不同的方式测试 Rate 设置:

    • 在一分钟内再执行 curl 命令(或刷新浏览器窗口)两次或三次,并注意您会收到以下消息是因为超出该政策的速率限制:
      {
      "fault": {
        "faultstring":"Spike arrest violation. Allowed rate : 1pm",
        "detail": {
          "errorcode":"policies.ratelimit.SpikeArrestViolation"}
        }
      }

      如果您尝试在一分钟内进行更多调用,则会继续收到故障消息。

    • 修改政策,将 <Rate> 限额设置为 15pm(在云端会转换为每 4 秒允许 2 次调用左右),然后保存并部署 API 代理。
    • 执行 curl 命令或反复刷新浏览器(curl 更快)。请注意,如果您在 4 秒的间隔内进行一次或两次致电,调用将成功。如果您快速进行调用,并在 4 秒内超过 2 次调用,则您应该会收到故障错误。但每 4 秒间隔之后,就可以继续进行调用,而不是在一分钟内都被阻止(设置为 1pm)。