本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
学习内容
通过本教程,您将学会:
- 添加影响请求和响应的政策。
- 了解此政策的影响。
所需条件
- 安装 Apigee。请参阅概览和前提条件。
- 至少附加一个政策的有效 API 代理。请参阅构建第一个 API 代理概览。
- 您的计算机上安装的 HTTP API 客户端,以进行 API 调用。教程示例使用
curl
。
添加 SpinkeArrest 政策
在本教程中,您将添加并配置 SpikeArrest 政策,以防止目标服务因使用量、错误客户端或恶意攻击而出现突发流量高峰。请求数超过速率限制时,API 会返回 HTTP 429
错误。
新版代理编辑器
如需将 SpikeArrest 政策添加到 API 代理,请执行以下操作:
如果您使用的是 Cloud 控制台中的 Apigee 界面:请选择代理开发 > API 代理。
如果您使用的是经典版 Apigee 界面:请选择开发 > API 代理,然后在代理窗格中,选择代理的环境。
如果您按照使用入门教程进行操作,则可以将其添加到您在创建 API 代理中创建的 API 代理。
- 点击开发标签页。
- 在左侧窗格中,点击政策行中的 + 按钮。
在创建政策对话框中,点击选择政策类型字段,然后向下滚动到流量管理并选择 SpikeArrest。
您可以视需要更改政策的名称和显示名。 默认情况下,Apigee 会为政策名称提供一个简短的前缀(在本例中为 SA-)。您可以在该前缀后添加一系列由短划线分隔的描述性字词。请参阅命名规则。
完成后,点击创建以创建政策。
现在您已经创建了 SpikeArrest 政策,接下来可以将其添加到 PreFlow 中的一个步骤。
- 在左侧窗格中,依次选择代理端点 > 默认 > PreFlow:
注意:您可能需要展开右侧窗格中的可视化编辑器以查看所有元素。为此,请点击可视化编辑器和文本编辑器之间的分隔线并向下拖动一点。
- 点击可视化编辑器右下角响应窗格中 PreFlow 旁边的 + 按钮:
- 在添加政策步骤对话框中,选择 SpikeArrest 政策。
点击添加以附加政策。
SpikeArrest 政策现在显示在响应窗格中:
现在,您已将 SpikeArrest 政策附加到 PreFlow,接下来可以尝试更改政策的代码:
在响应窗格中,选择 SA-。
- 文本编辑器将显示代理的 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>
-
在政策的 XML 中,将
<Rate>
元素的值更改为1pm
1pm(在云端会转换为每 60 秒允许 2 次请求左右)。您可以将速率指定为每分钟 (
pm
) 或每秒 (ps
) 整数值。这是一个非常高的限额,仅在本教程中用于演示政策。通常,您可以将其设置为更高的限额。请注意,属性检查器中的
Rate
值也会更改为1pm
。或者,您也可以在属性检查器中更改速率值,该值会反映在 XML 视图中。 - 点击保存,保存当前修订版本以及您所做的更改。
经典版代理编辑器
如需将 SpikeArrest 政策添加到 API 代理,请执行以下操作:
- 登录 Apigee 界面。
- 在左侧导航栏中,选择开发 > API 代理。
- 选择要添加 SkekeArrest 政策的 API 代理。
如果您按照使用入门教程进行操作,则可以将其添加到您在创建 API 代理中创建的 API 代理。
- 在新 API 代理的编辑器中,点击开发标签页:
API 代理编辑器让您可查看 API 代理的结构并配置其流。编辑器将显示代理的请求和响应消息流的直观表示,以及定义代理的底层 XML 的可修改显示。
- 在左侧导航窗格中,点击代理端点 > 默认下的 PreFlow。(其他教程将介绍 流 的概念。)
- 点击与请求 PreFlow 相对应的 +步骤按钮。此时会显示您可以创建的所有政策的分类列表。
- 在“流量管理”类别中选择 SpkeArrest。此时会显示新建政策对话框:
- 保留默认名称,然后点击添加。新政策将附加到请求的 PreFlow 流。
- 在导航器中,确保代理端点 > 默认下的 PreFlow 仍处于选中状态,并在 API 代理编辑器中注意以下内容:
- 在 API 代理编辑器左侧的导航器的政策下添加了新的 SpokeArrest-1 政策。
- 将 SpinkeArrest-1 图标添加到了 API 代理编辑器顶部中心的设计师视图,此视图是代理消息流的直观表示。
- 政策的 XML 显示在 API 代理编辑器底部中心的代码视图中。
- 在导航器的“政策”下选择 SpkeArrest-1,并在 API 代理编辑器中注意以下内容:
- 政策详细信息显示在 API 代理编辑器顶部中心的设计师视图中。
- 政策的 XML 显示在 API 代理编辑器底部中心的代码视图中。
- 政策的 XML 元素和属性值显示在 API 代理编辑器右侧的属性检查器中。
-
在政策的 XML 中,将
<Rate>
元素的值更改为1pm
1pm(在云端会转换为每 60 秒允许 2 次请求左右)。您可以将速率指定为每分钟 (
pm
) 或每秒 (ps
) 整数值。这是一个非常高的限额,仅在本教程中用于演示政策。通常,您可以将其设置为更高的限额。请注意,属性检查器中的
Rate
值也会更改为1pm
。或者,您也可以在属性检查器中更改速率值,该值会反映在 XML 视图中。 - 点击保存,保存当前修订版本以及您所做的更改。
- 使用部署到:按钮部署您的更改。
-
使用您网域的网址,通过
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
)。