在用户界面中配置 Map 策略
API Designer 中的组合视图提供 映射 策略的输入和输出之间关系的直观表示。
过程
要配置 Map 策略,请完成以下步骤:
- 在 "组合" 视图的画布中单击 映射 策略。这将打开属性工作表。
- 点击 “输入 ”列中的 “编辑
输入”图标。 - 添加输入变量。
- 单击 + 输入。
- 在输入的 上下文变量 字段中,提供输入变量在组合件上下文中的位置。 有关上下文变量的列表,请参阅 API Connect context variables。
- 在输入的 名称 字段中,提供输入的名称,以便仅在 映射 策略中使用。注:
您必须确保所提供的名称与上下文变量字段的值不完全匹配,否则结果可能不可预测。
- 可选: 在 “内容类型 ”字段中,指定输入的类型。 如果选择无,那么内容类型将视为 JSON。
- 在输入的 定义 字段中,提供变量的类型。 类型可以是标准类型集中的某一种或是为 API 创建的某个定义;也可以选择内联模式以提供模式作为以下某一选项:
- YAML
- JSON
- 从样本 JSON 生成
- 从样本 XML 生成
如果选择对象或数组,那么可在单击完成并返回到属性表的主视图后,通过用户界面创建模式。
- 可选: 要删除一个变量,请点击相应的 “删除 ”图标
。 - 添加所有输入变量后,单击 完成。
- 点击 “输出 ”列中的 “编辑
输出”图标。 - 添加输出变量。
- 单击 + 输出。
- 在输出的 上下文变量 字段中,提供输出的位置。 此位置可以是新上下文,或者是组合期间已建立的上下文。 有关上下文变量的列表,请参阅 API Connect context variables。
- 在输出的 名称 字段中,提供要在 映射 策略中使用的变量的名称,以及在输出时包含在其上下文中的变量的名称。注:
您必须确保所提供的名称与上下文变量字段的值不完全匹配,否则结果可能不可预测。
- 可选: 在 “内容类型 ”字段中,指定输入的类型。 如果选择无,那么内容类型将视为 JSON。
- 在输出的 定义 字段中,提供变量的类型。 类型可以是标准类型集中的某一种或是为 API 创建的某个定义;也可以选择内联模式以提供模式作为以下某一选项:
- YAML
- JSON
- 从样本 JSON 生成
- 从样本 XML 生成
如果选择对象或数组,那么可在单击完成并返回到属性表的主视图后,通过用户界面创建模式。
- 可选: 要删除一个变量,请点击相应的 “删除输出 ”图标
。 - 添加所有输出变量后,单击 完成。
- 可选: 如果为输入或输出的类型选择了 “对象 ”或 “数组 ”,请通过用户界面完成以下步骤,创建内联模式定义:
- 对于 数组,单击 添加项。 为该项目指定类型,然后点击 “添加 ”图标
。 - 对于 对象,单击 添加属性。 为该属性输入名称和类型,然后单击 “添加 ”图标
。
对于以这种方式创建的对象和数组,您可以继续向其中添加元素和属性,而这些元素和属性本身也可以是对象或数组。 - 对于 数组,单击 添加项。 为该项目指定类型,然后点击 “添加 ”图标
- 要将输入变量连接到输出变量,请单击输入变量前面的圆圈,然后单击输出变量前面的圆圈。此时将绘制一根绿色线,将两个变量链接在一起。 您可以将多个输入连接到单个输出,并且单个输入可连接到多个输出。
- 要配置一个输出,无论其是否有连接的输入,请直接点击输出变量前面的圆圈,而无需先点击输入变量的圆圈。此时将打开 " 配置映射 " 窗口。
- 可选: 在窗口的 “映射自 ”部分,您可以查看哪些输入已被映射到您正在编辑的输出上。 要删除一个输入项,请点击该输入项旁边的 “删除输入
”图标。如果输出是数组的一部分,可使用进一步的配置选项。 可通过在映射输入端进行数组迭代来创建数组或数组级别(存在多维数组时)。 对于每一级别的数组,请选择对输入端上的哪一个数组进行迭代。 在值字段中,可使用 $(this) 来引用数组中未命名的数组元素。
- 可选: 在 “值 ”字段中,使用 GatewayScript 来配置如何转换输入以生成输出。
- 可选: 在 “默认值”字段中,输入一个静态值或内联变量引用,当未提供输入值时,该值将应用于输出结果。 有关内联变量引用的信息,请参阅 “内联引用 ”。
- 可选: 若要删除所有指向该输出的映射,请单击 “删除”。
- 配置输出后,单击 确定。
- 可选: 点击 “地图 ”列中的 “设置 ”图标。
- 可选: 为您的地图策略提供标题和描述。
- 要控制 map 策略的 XML 输出,请根据需要选择以下选项:
- 包含空元素
- 如果选中此复选框(缺省选项),那么将在映射策略的输出中包含空的 XML 元素。 如果不想在映射策略的输出中包含空的 XML 元素,那么请清除此复选框。
- 名称空间继承
- 如果选中此复选框(缺省选项),那么将继承父元素的 XML 名称空间。 如果想要映射策略使用显式名称空间,请清除此复选框。
- 名称空间内联
- 如果选中此复选框(缺省选项),那么会将 XML 名称空间插入到第一个使用这些名称空间的文档中。 如果希望在根元素上定义所有名称空间,请取消选中此复选框。
解析 XML 输入数据类型- 如果选中此复选框,那么会将模式配置为布尔或数字类型的 XML 元素转换为该数据类型。 如果希望以字符串形式返回所有 XML 元素值,请清除此复选框(缺省选项)。
解析 XML 输出- 如果选中此复选框,那么 map 策略会采用已解析的 XML 文档形式,将 XML 输出写至
message.body。 缺省情况下,XML 将采用 XML 字符串形式输出。 写入到任何其他变量的 XML 输出都始终采用 XML 字符串形式。
注: 这些选项仅影响 XML 输出,而不会影响 JSON 数据。
在“空 XML 元素处理 ”列表中,选择以下选项之一,以控制映射策略如何处理空 XML 元素的输出:- 字符串(缺省选项):将空 XML 元素作为空字符串处理。
- 空:将空 XML 元素作为空值处理。
- 无: 将忽略数据。
字符串獾鱼 :空XML元素的值被视为空字符串。 空字符串值将放置到 JSON badgerfish 值属性中。
空獾鱼 :空XML元素的值被视为null。 空值将放置到 JSON badgerfish 值属性中。 除非选择允许空值选项,否则不会将此元素映射到 JSON 输出属性。
请根据需要选择以下常规配置选项:- 仅使用第一个数组元素
- 如果选中此复选框,并且在遍历输入的过程中遇到数组,那么仅使用第一个元素。 如果您希望 map 策略使用所有数组元素,请清除此复选框(缺省选项)。
- 解析 API Connect 变量引用
- 如果未选中该复选框(默认选项),映射策略将忽略映射策略 API Connect 中的变量引用。 如果想要解析在 map 属性中找到的 API Connect 变量引用,请选择复选框。
- 允许空值
- 如果选中此复选框(缺省选项),那么含空值的输入属性值将映射到输出文档。 如果您希望 map 策略忽略所有空输入值,请清除此复选框(缺省选项)。
- 优化模式定义
- 如果选中此复选框,那么复杂模式类型评估会按经过优化的方式来处理循环类型引用。 请清除此复选框(缺省选项)以按标准方式对这些模式类型进行评估。
启用 JSON 后处理- 如果此复选框被选中,那么系统会启用已映射的 JSON 输出的后处理。 JSON 输出的后处理将使用输出模式以确保属性值的数据类型与模式中定义的数据类型相同。 它还将规范化具有 Badgerfish JSON 语法的输出属性值(这些值是 XML 输入的对象映射的结果)。 缺省情况下清除此复选框,意味着不对映射的 JSON 输出执行后处理。
为失败的映射创建空的父对象
使用此设置以控制由于映射输入不存在且没有配置缺省映射而导致映射失败时的行为。缺省行为是不更改输出,但如果选中此复选框,那么将为目标映射的父代创建空对象,从而模拟 IBM API Management Version 4.0的行为。
- 示例
- map 策略将定义到
output.a.b.c的映射。如果存在输入数据,那么输出如下所示:{ "a": { "b": { "c": "inputvalue" } } }如果无输入数据,并且选择为失败的映射创建空的父对象选项,那么输出如下所示:
将创建属性{ "a": { "b": { } } }a和b,但是b的值是空对象。缺省情况下未选中此复选框。
- 为数组对象和映射的可选对象创建必需的子属性
- 如果选中此复选框,那么在下列特定情况下,将在输出中为未映射的必需属性或不存在输入数据的必需属性生成缺省值:
- 数组由包含一个或多个必需属性的对象组成。
- 可选的对象具有一个或多个必需的子属性。
缺省情况下,输出中不存在这些必需属性。 如果选择此选项,那么这些必需属性将显示在输出中。 如果输出模式定义了输出属性的default属性,那么将使用指定的缺省值,否则将根据数据类型来分配缺省值,如下所示:- 字符串:空字符串 ("")
- 数字:0
- 布尔:false
- 对象:空对象
- 数组:空数组
- 示例 1
- 输入数据具有以下对象数组:
[{“a”: “value1”}, {“a”: “value2", "b": “value3”}]输出模式将输出对象定义为具有两个属性
a和b,其中b是必需的。 map 策略定义以下映射:input.array.a到output.array.ainput.array.b到output.array.b
如果选中此复选框,
b未映射或者不存在输入数据,那么会为b分配空字符串作为缺省值,并且输出如下所示:[{“a”: “value1", "b": ""}, {"a": "value2", "b": "value3"}] - 示例 2
- 输出模式定义以下结构:
{"a" : {"b" : {"c" : "value1", "d" : "value2"} } }属性
b是可选的,但b中的属性d是必需的。map 策略将定义到
output.a.b.c的映射。如果选中此复选框,并且
d未映射,那么会为d分配空字符串作为缺省值,并且输出如下所示:{"a" : {"b" : {"c" : "value1", "d" : ""} } }
如果未选中此复选框,那么不会在输出中使用其缺省值来创建这些必需属性。
从“空 JSON 数组处理 ”列表中,选择以下选项之一,以控制映射策略如何处理空数组的输出:- 全部(缺省选项):输出所有空数组,包括空的子数组。
- 父代:仅输出当前属性的空数组值。 不会尝试此属性的子代映射操作。
- 无:防止生成任何空输出数组值。
- 从 输入数据日志消息的严重性级别 列表中,选择下列其中一个选项以指定与输入数据相关的日志消息的严重性级别:
- 错误
- 警告
- 信息
将“模式定义循环引用限制 ”字段设置为一个整数值,该数值指定了模式定义允许的最大迭代次数。 缺省值为 1,这意味着不遵循循环模式定义。 最大可能值为 5。- 完成后单击 保存 。