创建高级策略
本单元提供了以下 API 管理策略的参考信息:
- 控制流 - 根据布尔表达式的求值结果,有条件地应用策略语句。
- 转发请求 - 将请求转发到后端服务。
- 限制并发 - 阻止括住的策略一次执行超过指定数量的请求。
- 记录到事件中心 - 将指定格式的消息发送到记录器实体定义的事件中心。
- 模拟响应 - 中止管道执行,将模拟的响应直接返回给调用方。
- 重试 - 重试执行括住的策略语句,直到符合条件为止。 系统会按指定的时间间隔重复执行,直到达到指定的重试计数为止。
控制流
choose
策略根据布尔表达式的计算结果来应用所包括的策略语句,类似于编程语言中的 if-then-else 或开关构造。
<choose>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<otherwise>
<!— one or more policy statements to be applied if none of the above conditions are true -->
</otherwise>
</choose>
控制流策略必须包含至少一个 <when/>
元素。 <otherwise/>
元素是可选的。 <when/>
元素中的条件根据其在策略中的出现顺序求值。 将应用包含在第一个 <when/>
元素中且条件属性等于 true 的策略语句。 如果 <when/>
元素的所有条件属性都为 false,将应用包含在 <otherwise/>
元素中的策略(如果存在)。
转发请求
forward-request
策略将传入请求转发到请求上下文中指定的后端服务。 后端服务 URL 在 API 设置中指定,可以使用设置后端服务策略进行更改。
删除此策略之后,请求就不会转发到后端服务。一旦成功完成入站节中的策略,就会立即对出站节中的策略求值。
<forward-request timeout="time in seconds" follow-redirects="true | false"/>
限制并发
limit-concurrency
策略阻止括住的策略在任意时间执行超过指定数量的请求。 一旦超过指定数量,新请求将立即失败,并出现“429 请求过多”状态代码。
<limit-concurrency key="expression" max-count="number">
<!— nested policy statements -->
</limit-concurrency>
记录到事件中心
log-to-eventhub
策略将指定格式的消息发送到记录器实体定义的事件中心。 从名称可以看出,此策略用于保存所选请求或响应上下文信息,以便进行联机或脱机分析。
<log-to-eventhub logger-id="id of the logger entity" partition-id="index of the partition where messages are sent" partition-key="value used for partition assignment">
Expression returning a string to be logged
</log-to-eventhub>
模拟响应
正如其名所示,mock-response
用于模拟 API 和操作。 它会中止正常的管道执行,并将模拟的响应返回给调用方。 该策略始终尝试返回保真度最高的响应。 它首选响应内容示例(若可用)。 若提供架构而不提供示例,它将从架构生成示例响应。 如果既找不到示例又找不到架构,则返回无内容的响应。
<mock-response status-code="code" content-type="media type"/>
重试
retry
策略会执行其子策略一次,并重新尝试执行,直至重试 condition
变为 false
,或者重试 count
为零。
<retry
condition="boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions -->
</retry>
返回响应
return-response
策略会中止管道执行,为调用方返回默认响应或自定义响应。 默认响应为200 OK
,无正文。 可以通过上下文变量或策略语句指定自定义响应。 二者都提供时,会通过策略语句对上下文变量中包含的响应进行修改,然后再将其返回给调用方。
<return-response response-variable-name="existing context variable">
<set-header/>
<set-body/>
<set-status/>
</return-response>
其他资源
- 有关更多策略示例,请访问 API 管理策略。
- API 管理策略中的错误处理