使用 switch 策略条件编辑器
switch 策略条件编辑器提供了一个用户界面,可帮助您在 switch 策略中为 case 子句构建条件。
可使用添加组和添加条件选项以及运算符选择和预提供的函数选择来构建条件脚本。 输出字段显示所生成的条件脚本,并在您构建条件时动态更新。
添加条件
打开策略条件编辑器时,已预提供初始条件,可供您随时进行配置。
使用下拉列表选择用于开始构建条件的函数。
API Connect 中的 JSONata 支持
API Connect 支持 JSONata 规范的 v2.0 ,但存在以下限制:
- 如果使用 JSONata 表达式来抽取或编辑字段,那么该字段的软链接副本也会受 "抽取" 或 "编辑" 策略影响,即使这些字段存在于不同位置也是如此。
- API Connect 不支持高阶 JSONata 函数 (处理其他函数的函数)。
- 如果 API Connect 支持的 JSONata 函数调用高阶函数作为自变量,那么该自变量不受支持 (因为缺少对高阶函数的支持)。
- 不支持以下 JSONata v2.0 函数:
$eval()$sift()$each()$error()$assert()- 支持
$fromMillis(),但存在以下限制:$fromMillis()参数支持的数字范围为-5364662400000 - 2903299199000。- 小于-5364662400000的值使用-5364662400000。 换句话说,将时间戳报告为 1800-01-01T00:00:00Z。
- 大于2903299199000的值使用2903299199000。 换句话说,将时间戳报告为 2261-12-31T23:59:59Z。
- 支持
$now(),但存在以下限制:- 不支持以下组件说明符:
W= 一年中的周w= 每月的周X= ISO 周编号年份x= ISO 周编号月份
- 不支持将数字表示为单词,因此不支持以下演示文稿修饰符:
W= 大写单词 (例如: [YW] => 两千和二十四)w= 小写单词 (例如: [Yw] => 2 000 和 24)Ww= 标题大小写单词 (例如: [YWw] => 2 千和 24)
- 错误消息是通用的。
- 不支持以下组件说明符:
表 1 列出了可用于标准 JSONata 表示法的功能扩展。 每个扩展对应于 API 上下文的一部分。
| 扩展 | 变量 | 描述 |
|---|---|---|
$apiCtx() |
对 API 上下文的通用访问权 | $apiCtx() 扩展提供对 API 上下文的通用访问权。
|
$header(name) |
message.headers.name |
消息头 |
$httpVerb() |
request.verb |
请求的 HTTP 方法 |
$operationID() |
api.operation.id |
操作标识 |
$operationPath() |
api.operation.path |
操作路径 |
$queryParameter('name') |
|
在 request.parameters.name.locations 中搜索 query 的索引,并返回 request.parameters.name.values[index],其中 [index] 是位置中 query 的值。 参数值不是解码的 URL。 |
$statusCode() |
message.status.code |
状态码 |
$storageType([arg]) |
variable.body您可在 API 上下文中指定任意变量。 如果未指定任何变量,那么将使用缺省变量 |
消息的存储类型。 受支持的值为 binary, empty, graphql, json, stream或 xml。 |
$urlParameter('name') |
|
在 request.parameters.name.locations 中搜索 path 和 query 的索引,并从 request.parameters.name.values 返回同时包含 path 和 query 值的单个数组。 在 URL 包含 path 和 query 参数值时,数组先包含 path 值,后跟 query 值。 按照接收顺序添加每个参数类型的值。 参数值为解码的 URL。例如,以下 URL 包含 path 和 query 参数值。
$urlParameter('breed') URL 将返回以下值数组。在此示例中,该 URL 包含配置为 |
$xpath(path, xpathExpression) |
您可在 API 上下文中指定任意可写变量。 xpathExpression 必须是文字字符串。 |
允许使用 XPath 表达式。 以下示例指定来源中的所有 price 元素。 |
表 2 列出了可用于 GraphQL API 的功能扩展。
| 扩展 | 变量 | 描述 |
|---|---|---|
$gqlActiveOperation([graphql_message]) |
message.body |
获取在指定 GraphQL 消息中找到的活动操作。 operationName 必须与处于活动状态的操作的名称相同。 |
$gqlAlias(graphql_field_node) |
message.body |
用于获取 GraphQL 字段节点的别名。 |
$gqlFragments([graphql_message]) |
message.body |
获取在指定 GraphQL 消息中找到的片段。 |
$gqlName([graphql_node]) |
message.body |
获取节点名。 对于操作,节点名称为 operationName。 对于字段、片段定义、参数和其他元素,节点名是该元素的名称。 缺省情况下,将检索 message.body 的 operationName。 |
$gqlOperations([graphql_message]) |
message.body |
获取在指定 GraphQL 消息中找到的操作。 |
$gqlType([graphql_node]) |
message.body |
对“查询”、“突变”和“预订”查询类型检索活动操作的操作类型。 |
- 可使用
&(连接)导航运算符。
您可以使用以下 JSONata 数字运算符:
+(加法)-(减)*(乘法)- /(除)
- %(取模)
您可以对数字值或字符串使用以下 JSONata 比较运算符:
=!=<><=>=
- 括号用于将序列转换为数组,指定运算符优先顺序或对上下文值计算复杂表达式。
- 数组范围和谓词表达式。
- 单星号 (
*) 和双星号 (**) 通配符。
query整个 GraphQL 查询,包括操作和片段。
operationName对于匿名操作,
operationName可以为空。~fragmentSpreadNameon~typeCondition- ~~
fragmentDefinitionName
在选择函数后,将根据所选函数来显示其他字段,以便您完成条件。 例如,如果选择函数 $httpVerb(),那么将显示一个比较运算符选择列表(= 或 !=),并在表达式右侧显示可供选择的 HTTP 动词列表(GET、PUT、POST、DELETE、HEAD、OPTIONS 或 PATCH)。
如果选择 NOT,那么将使用 $not 函数来否定条件。
要添加其他条件,请单击添加条件;然后可选择在此条件与前一个条件之间插入 and 还是 or 运算符。
要将括号内的两个或更多个条件分组,请单击添加组,然后将条件添加到组中;然后可选择在此组与前一个条件或组之间插入 and 还是 or 运算符。
要从头开始编写自己的条件,请选择定制,然后在提供的字段中输入脚本。
示例
($statusCode() != 200 and ($httpVerb() = 'GET' or $httpVerb() = 'PUT'))在条件编辑器中完成以下步骤:简单条件语句
以下示例显示使用单个函数的条件。
$httpVerb() 扩展来指定请求的 HTTP 方法。$httpVerb()="GET"$operationPath() 扩展来指定操作路径。$operationPath()="/base/path-2"$operationID() 扩展来指定操作标识。$operationID()="test-gatewayscript-GET"$statusCode() 扩展来指定消息状态码。$statusCode()=200$header(name) 扩展来指定消息头的 Content-Type。$header("Content-Type")="application/json"使用逻辑运算符组合条件
可以使用 and 和 or 运算符在单个条件中组合多个函数。
test-gatewayscript-GET。$httpVerb()="GET" and $operationPath()="test-gatewayscript-GET"POST 或 PUT 请求。$httpVerb()="POST" or $httpVerb()="PUT"test-gatewayscript_POST 并且消息状态码等于 200,或者 API 操作标识等于 test-gatewayscript-GET 并且消息状态码等于 500。($operationID()="test-gatewayscript-POST" and $statusCode()=200) or ($operationID()="test-gatewayscript-GET" and $statusCode()=500)test-gatewayscript-POST,消息状态码等于 200 并且 API 操作路径等于 /base/path-2。($operationID()="test-gatewayscript-POST" and $statusCode()=200) and $operationPath()="/base/path-2"text/plain 并且消息头长度等于 300 或消息状态码等于 200。($header("Content-Type")="text/plain" and $header("Content-Length")=300) or $statusCode()= 200?from=TOOLKIT 的 URL )登录时,生成的 API 密钥的固定存活时间(TTL)为 5 分钟。