解析程序映射模板实用程序参考 - AWS AppSync
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

解析程序映射模板实用程序参考

AWS AppSync 定义了一组实用程序,可在 GraphQL 解析程序中用于简化与数据源的交互。其中一些实用程序通常用于任意数据源,例如 ID 的生成或者时间戳,而其他实用程序则特定于数据源本身。

$util 中的实用程序帮助程序

$util 变量包含的通用实用程序方法可以更方便地处理数据。

除非另行指定,否则所有实用程序均使用 UTF-8 字符集。

$util.qr()$util.quiet()

执行 VTL 语句,同时禁止执行的返回值。这在您希望运行方法而不使用临时占位符(例如添加项目到映射等)时非常有用。例如:

#set ($myMap = {}) #set($discard = $myMap.put("id", "first value"))

变为:

#set ($myMap = {}) $util.qr($myMap.put("id", "first value"))
$util.escapeJavaScript(String) : String

将输入字符串作为 JavasScript 转义字符串返回。

$util.urlEncode(String) : String

将输入字符串作为 application/x-www-form-urlencoded 编码字符串返回。

$util.urlDecode(String) : String

application/x-www-form-urlencoded 编码的字符串解码回未编码的形式。

$util.base64Encode( byte[] ) : String

将输入编码为 base64 编码字符串。

$util.base64Decode(String) : byte[]

对 base64 编码字符串中的数据进行解码。

$util.parseJson(String) : Object

获取“字符串化的”JSON 并返回结果的对象表示形式。

$util.toJson(Object) : String

获取对象并返回该对象“字符串化的”JSON 表示形式。

$util.autoId() : String

返回 128 位随机生成的 UUID。

$util.unauthorized()

针对被解析的字段引发 Unauthorized。可用于请求或响应映射模板中,确定是否允许调用者解析该字段。

$util.error(String)

引发自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。

$util.error(String, String)

引发自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorType

$util.error(String, String, Object)

引发自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorTypedata 字段。将在 GraphQL 响应中 data 内部对应的 error 块中添加 errors 值。注意:将根据查询选择集筛选 data

$util.error(String, String, Object, Object)

引发自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorTypedataerrorInfo 字段。将在 GraphQL 响应中 data 内部对应的 error 块中添加 errors 值。注意:将根据查询选择集筛选 data。将在 GraphQL 响应中 errorInfo 内部对应的 error 块中添加 errors 值。注意不会根据查询选择集筛选 errorInfo

$util.appendError(String)

追加自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。与 $util.error(String) 不同,不会中断模板评估,所以数据可以返回调用者。

$util.appendError(String, String)

追加自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorType。与 $util.error(String, String) 不同,不会中断模板评估,所以数据可以返回调用者。

$util.appendError(String, String, Object)

追加自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorTypedata 字段。与 $util.error(String, String, Object) 不同,不会中断模板评估,所以数据可以返回调用者。将在 GraphQL 响应中 data 内部对应的 error 块中添加 errors 值。注意:将根据查询选择集筛选 data

$util.appendError(String, String, Object, Object)

追加自定义错误。如果模板检测到请求或调用结果的错误,可用于请求或响应映射模板中。此外,还可指定 errorTypedataerrorInfo 字段。与 $util.error(String, String, Object, Object) 不同,不会中断模板评估,所以数据可以返回调用者。将在 GraphQL 响应中 data 内部对应的 error 块中添加 errors 值。注意:将根据查询选择集筛选 data。将在 GraphQL 响应中 errorInfo 内部对应的 error 块中添加 errors 值。注意不会根据查询选择集筛选 errorInfo

$util.validate(boolean, String) : void

如果条件为 false,引发具有指定消息的 CustomTemplateException。

$util.validate(boolean, String, String) : void

如果条件为 false,引发具有指定消息和错误类型的 CustomTemplateException。

$util.validate(boolean, String, String, Object) : void

如果条件为 false,引发具有指定消息和错误类型,以及响应中返回的数据的 CustomTemplateException。

$util.isNull(Object) : boolean

如果提供的对象为 null 则返回 true。

$util.isNullOrEmpty(String) : boolean

如果提供的数据为 null 或空字符串,则返回 true。否则返回 false。

$util.isNullOrBlank(String) : boolean

如果提供的数据为 null 或空白字符串,则返回 true。否则返回 false。

$util.defaultIfNull(Object, Object) : Object

如果首个对象非 null,则返回它。否则返回第二个对象,作为“默认对象”。

$util.defaultIfNullOrEmpty(String, String) : String

如果首个字符串非 null 也非空,则返回它。否则返回第二个字符串,作为“默认字符串”。

$util.defaultIfNullOrBlank(String, String) : String

如果首个字符串非 null 也非空白,则返回它。否则返回第二个字符串,作为“默认字符串”。

$util.isString(Object) : boolean

如果对象是字符串,则返回 true。

$util.isNumber(Object) : boolean

如果对象是数字,则返回 true。

$util.isBoolean(Object) : boolean

如果对象是布尔值,则返回 true。

$util.isList(Object) : boolean

如果对象是列表,则返回 true。

$util.isMap(Object) : boolean

如果对象是映射,则返回 true。

$util.typeOf(Object) : String

返回字符串,描述对象的类型。支持的类型标识为:"Null"、"Number"、"String"、"Map"、"List"、"Boolean"。如果无法识别类型,则返回 "Object" 类型。

$util.matches(String, String) : Boolean

如果在第一个参数中指定的模式与第二个参数中提供的数据匹配,则返回 true。模式必须为正则表达式,例如 $util.matches("a*b", "aaaaab")。此功能以模式为基础,您可参考其他文档,进一步了解此内容。

AWS AppSync 指令

AppSync 公开指令以便在编写 Velocity 时提高开发人员的工作效率。

#return(Object) 如果您需要从任何映射模板提前返回,#return 指令会很有用。#return 类似于编程语言中的 return 关键字,因为它将从最近的逻辑范围块返回。这意味着在解析程序映射模板中使用 #return 将从解析程序返回。此外,在函数映射模板中使用 #return 将从函数返回,并将继续执行到管道或解析程序响应映射模板中的下一个函数。

#return#return(Object) 相同,但将返回 null

$util.time 中的时间帮助程序

$util.time 变量包含的日期时间方法有助于生成时间截,在不同的日期时间格式之间进行转换,并解析日期时间字符串。日期时间格式的语法基于 DateTimeFormatter,您可参考其他文档,进一步了解此内容。我们在以下提供了一些示例,以及可用方法和描述的列表。

独立函数的示例

$util.time.nowISO8601() : 2018-02-06T19:01:35.749Z $util.time.nowEpochSeconds() : 1517943695 $util.time.nowEpochMilliSeconds() : 1517943695750 $util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ") : 2018-02-06 19:01:35+0000 $util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "+08:00") : 2018-02-07 03:01:35+0800 $util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "Australia/Perth") : 2018-02-07 03:01:35+0800

转换示例

#set( $nowEpochMillis = 1517943695758 ) $util.time.epochMilliSecondsToSeconds($nowEpochMillis) : 1517943695 $util.time.epochMilliSecondsToISO8601($nowEpochMillis) : 2018-02-06T19:01:35.758Z $util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ") : 2018-02-06 19:01:35+0000 $util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ", "+08:00") : 2018-02-07 03:01:35+0800

解析示例

$util.time.parseISO8601ToEpochMilliSeconds("2018-02-01T17:21:05.180+08:00") : 1517476865180 $util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22+0800", "yyyy-MM-dd HH:mm:ssZ") : 1517505562000 $util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22", "yyyy-MM-dd HH:mm:ss", "+08:00") : 1517505562000

随 AWS 标量的用法

以下格式与 AWSDateAWSDateTimeAWSTime 兼容。

$util.time.nowFormatted("yyyy-MM-dd[XXX]", "-07:00:30") : 2018-07-11-07:00 $util.time.nowFormatted("yyyy-MM-dd'T'HH:mm:ss[XXXXX]", "-07:00:30") : 2018-07-11T15:14:15-07:00:30
$util.time.nowISO8601() : String

返回 UTC 的 ISO8601 格式字符串表示形式。

$util.time.nowEpochSeconds() : long

返回从 1970-01-01T00:00:00Z 纪元到现在的秒数。

$util.time.nowEpochMilliSeconds() : long

返回从 1970-01-01T00:00:00Z 纪元到现在的毫秒数。

$util.time.nowFormatted(String) : String

使用字符串输入类型指定的格式返回当前 UTC 时间戳的字符串。

$util.time.nowFormatted(String, String) : String

使用字符串输入类型指定的格式和时区返回该时区当前时间戳的字符串。

$util.time.parseFormattedToEpochMilliSeconds(String, String) : Long

解析作为字符串传递的时间戳以及格式,并将时间戳作为从纪元到现在的毫秒数返回。

$util.time.parseFormattedToEpochMilliSeconds(String, String, String) : Long

解析作为字符串传递的时间戳,以及格式和时区,并将时间戳作为从纪元到现在的毫秒数返回。

$util.time.parseISO8601ToEpochMilliSeconds(String) : Long

解析 ISO8601 时间戳,作为字符串传递,并将时间戳作为从纪元到现在的毫秒数返回。

$util.time.epochMilliSecondsToSeconds(long) : long

将纪元毫秒数时间戳转换为纪元秒数时间戳。

$util.time.epochMilliSecondsToISO8601(long) : String

将纪元毫秒数时间戳转换为 ISO8601 时间戳。

$util.time.epochMilliSecondsToFormatted(long, String) : String

将纪元毫秒数时间戳(以长型传递)转换为根据提供的 UTC 格式确定的时间戳。

$util.time.epochMilliSecondsToFormatted(long, String, String) : String

将纪元毫秒数时间戳(以长型传递)转换为根据提供的时区和格式确定的时间戳。

$util.list 中的列表帮助程序

$util.list 包含的方法有助于进行通用的列表操作,例如适用于筛选使用案例的从列表中移除或保留项目。

$util.list.copyAndRetainAll(List, List) : List

在第一个参数中生成所提供列表的阴影副本,仅保留在第二个参数中指定的项目(如有)。所有其他项目将从副本中移除。

$util.list.copyAndRemoveAll(List, List) : List

在第一个参数中生成所提供列表的阴影副本,移除在第二个参数中指定的项目(如有)。所有其他项目将保留在副本中。

$util.map 中的映射帮助程序

$util.map 包含的方法有助于进行通用的映射操作,例如适用于筛选使用案例的从映射中移除或保留项目。

$util.map.copyAndRetainAllKeys(Map, List) : Map

生成第一个映射的阴影副本,仅保留在列表中指定的键(如有)。所有其他键将从副本中移除。

$util.map.copyAndRemoveAllKeys(Map, List) : Map

生成第一个映射的阴影副本,移除在列表中指定键的所有条目(如有)。所有其他键将保留在副本中。

$util.dynamodb 中的 DynamoDB 帮助程序

$util.dynamodb 包含的帮助程序方法可轻松地在 Amazon DynamoDB 中读写数据,例如自动类型映射和格式化。这些方法旨在自动将基元类型和列表映射到适当的 DynamoDB 输入格式,即 { "TYPE" : VALUE } 格式的 Map

例如,在 DynamoDB 中创建新项目的请求映射模板过去可能是下面的样子:

{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "id" : { "S" : "$util.autoId()" } }, "attributeValues" : { "title" : { "S" : $util.toJson($ctx.args.title) }, "author" : { "S" : $util.toJson($ctx.args.author) }, "version" : { "N", $util.toJson($ctx.args.version) } } }

如果我们想为对象添加字段,则必须在架构中更新 GraphQL 查询,还要更新请求映射模板。但现在,我们可以调整请求映射模板,这样它可以自动提取架构中添加的新字段,并将正确类型添加到 DynamoDB:

{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "id" : $util.dynamodb.toDynamoDBJson($util.autoId()) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

在上一示例中,我们使用 $util.dynamodb.toDynamoDBJson(...) 帮助程序自动获取生成的 ID,并转换为字符串属性的 DynamoDB 表示形式。然后,我们可以获取所有参数,并转换为它们的 DynamoDB 表示形式,并输出到模板的 attributeValues 字段。

每个帮助程序均有两个版本:一个版本返回对象(例如 $util.dynamodb.toString(...));一个版本将对象返回为 JSON 字符串(例如 $util.dynamodb.toStringJson(...))。在上一示例中,我们使用了将数据返回为 JSON 字符串的版本。如果您希望在模板中使用对象之前处理对象,可以选择返回对象,如下所示:

{ "version" : "2017-02-28", "operation" : "PutItem", "key": { "id" : $util.dynamodb.toDynamoDBJson($util.autoId()) }, #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) ) #set( $myFoo.version = $util.dynamodb.toNumber(1) ) #set( $myFoo.timestamp = $util.dynamodb.toString($util.time.nowISO8601())) "attributeValues" : $util.toJson($myFoo) }

在上一示例中,我们将转换的参数作为映射返回,而不是 JSON 字符串;并在使用 version 最终输出到模板中的 timestamp 字段之前添加了 attributeValues$util.toJson(...) 字段。

每个帮助程序的 JSON 版本等效于在 $util.toJson(...) 中包装非 JSON 版本。例如,以下语句是完全相同的:

$util.toStringJson("Hello, World!") $util.toJson($util.toString("Hello, World!"))
$util.dynamodb.toDynamoDB(Object) : Map

DynamoDB 的通用对象转换工具,可将输入对象转换为适当的 DynamoDB 表示形式。关于它如何表示某些类型,人们有固定的看法,例如,它将使用列表 ("L") 而不使用集 ("SS", "NS", "BS")。它可返回描述 DynamoDB 属性值的对象。

字符串示例:

Input: $util.dynamodb.toDynamoDB("foo") Output: { "S" : "foo" }

数字示例:

Input: $util.dynamodb.toDynamoDB(12345) Output: { "N" : 12345 }

布尔值示例:

Input: $util.dynamodb.toDynamoDB(true) Output: { "BOOL" : true }

列表示例:

Input: $util.dynamodb.toDynamoDB([ "foo", 123, { "bar" : "baz" } ]) Output: { "L" : [ { "S" : "foo" }, { "N" : 123 }, { "M" : { "bar" : { "S" : "baz" } } } ] }

映射示例:

Input: $util.dynamodb.toDynamoDB({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] }) Output: { "M" : { "foo" : { "S" : "bar" }, "baz" : { "N" : 1234 }, "beep" : { "L" : [ { "S" : "boop" } ] } } }
$util.dynamodb.toDynamoDBJson(Object) : String

$util.dynamodb.toDynamoDB(Object) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toString(String) : String

将输入字符串转换为 DynamoDB 字符串格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toString("foo") Output: { "S" : "foo" }
$util.dynamodb.toStringJson(String) : Map

$util.dynamodb.toString(String) : String 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toStringSet(List<String>) : Map

将包含字符串的列表转换为 DynamoDB 字符串集的格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toStringSet([ "foo", "bar", "baz" ]) Output: { "SS" : [ "foo", "bar", "baz" ] }
$util.dynamodb.toStringSetJson(List<String>) : String

$util.dynamodb.toStringSet(List<String>) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toNumber(Number) : Map

将数字转换为 DynamoDB 数字格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toNumber(12345) Output: { "N" : 12345 }
$util.dynamodb.toNumberJson(Number) : String

$util.dynamodb.toNumber(Number) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toNumberSet(List<Number>) : Map

将包含数字的列表转换为 DynamoDB 数字集格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toNumberSet([ 1, 23, 4.56 ]) Output: { "NS" : [ 1, 23, 4.56 ] }
$util.dynamodb.toNumberSetJson(List<Number>) : String

$util.dynamodb.toNumberSet(List<Number>) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toBinary(String) : Map

将作为 base64 字符串编码的二进制数据转换为 DynamoDB 二进制格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toBinary("foo") Output: { "B" : "foo" }
$util.dynamodb.toBinaryJson(String) : String

$util.dynamodb.toBinary(String) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toBinarySet(List<String>) : Map

将作为 base64 字符串编码的二进制数据列表转换为 DynamoDB 二进制集格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toBinarySet([ "foo", "bar", "baz" ]) Output: { "BS" : [ "foo", "bar", "baz" ] }
$util.dynamodb.toBinarySetJson(List<String>) : String

$util.dynamodb.toBinarySet(List<String>) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toBoolean(boolean) : Map

将布尔值转换为适当的 DynamoDB 布尔格式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toBoolean(true) Output: { "BOOL" : true }
$util.dynamodb.toBooleanJson(boolean) : String

$util.dynamodb.toBoolean(boolean) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toNull() : Map

返回 DynamoDB null 格式的 null。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toNull() Output: { "NULL" : null }
$util.dynamodb.toNullJson() : String

$util.dynamodb.toNull() : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toList(List) : Map

将对象列表转换为 DynamoDB 列表格式。列表中的每个项目也会转换为适当的 DynamoDB 格式。关于它如何表示某些嵌套对象,人们有固定的看法,例如,它将使用列表 ("L") 而不使用集 ("SS", "NS", "BS")。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toList([ "foo", 123, { "bar" : "baz" } ]) Output: { "L" : [ { "S" : "foo" }, { "N" : 123 }, { "M" : { "bar" : { "S" : "baz" } } } ] }
$util.dynamodb.toListJson(List) : String

$util.dynamodb.toList(List) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toMap(Map) : Map

将映射转换为 DynamoDB 映射格式。映射中的每个值也会转换为适当的 DynamoDB 格式。关于它如何表示某些嵌套对象,人们有固定的看法,例如,它将使用列表 ("L") 而不使用集 ("SS", "NS", "BS")。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toMap({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] }) Output: { "M" : { "foo" : { "S" : "bar" }, "baz" : { "N" : 1234 }, "beep" : { "L" : [ { "S" : "boop" } ] } } }
$util.dynamodb.toMapJson(Map) : String

$util.dynamodb.toMap(Map) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toMapValues(Map) : Map

创建映射副本,其中的每个值均已转换为适当的 DynamoDB 格式。关于它如何表示某些嵌套对象,人们有固定的看法,例如,它将使用列表 ("L") 而不使用集 ("SS", "NS", "BS")。

Input: $util.dynamodb.toMapValues({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] }) Output: { "foo" : { "S" : "bar" }, "baz" : { "N" : 1234 }, "beep" : { "L" : [ { "S" : "boop" } ] } }

请注意:它与 $util.dynamodb.toMap(Map) : Map 稍有不同,它只返回 DynamoDB 属性值的内容,但不返回整个属性值本身。例如,以下语句是完全相同的:

$util.dynamodb.toMapValues($map) $util.dynamodb.toMap($map).get("M")
$util.dynamodb.toMapValuesJson(Map) : String

$util.dynamodb.toMapValues(Map) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toS3Object(String key, String bucket, String region) : Map

将键、存储桶和区域转换为 DynamoDB S3 对象的表示形式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toS3Object("foo", "bar", region = "baz") Output: { "S" : "{ \"s3\" : { \"key\" : \"foo", \"bucket\" : \"bar", \"region\" : \"baz" } }" }
$util.dynamodb.toS3ObjectJson(String key, String bucket, String region) : String

$util.dynamodb.toS3Object(String key, String bucket, String region) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map

将键、存储桶、区域和可选版本转换为 DynamoDB S3 对象的表示形式。它可返回描述 DynamoDB 属性值的对象。

Input: $util.dynamodb.toS3Object("foo", "bar", "baz", "beep") Output: { "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" }
$util.dynamodb.toS3ObjectJson(String key, String bucket, String region, String version) : String

$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map 相同,但将 DynamoDB 属性值作为 JSON 编码的字符串返回。

$util.dynamodb.fromS3ObjectJson(String) : Map

接受 DynamoDB S3 对象的字符串值,并返回包含键、存储桶、区域和可选版本的映射。

Input: $util.dynamodb.fromS3ObjectJson({ "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" }) Output: { "key" : "foo", "bucket" : "bar", "region" : "baz", "version" : "beep" }

$util.rds 中的 RDS 帮助程序

$util.rds.toJsonString(String serializedSQLResult): String

通过将 stringified 原始 RDS 数据 API 结果格式转换为更简洁的字符串来返回 String。返回字符串是结果集的 SQL 记录列表的序列化列表。每条记录均表示为一个键-值对集合。键是对应的列名称。

如果输入中的相应语句是将导致更改的 SQL 查询(例如,INSERT、UPDATE、DELETE),则将返回空列表。例如,查询 select * from Books limit 2 提供来自 RDS 数据 API 的原始结果:

{ "sqlStatementResults": [ { "numberOfRecordsUpdated": 0, "records": [ [ { "stringValue": "Mark Twain" }, { "stringValue": "Adventures of Huckleberry Finn" }, { "stringValue": "978-1948132817" } ], [ { "stringValue": "Jack London" }, { "stringValue": "The Call of the Wild" }, { "stringValue": "978-1948132275" } ] ], "columnMetadata": [ { "isSigned": false, "isCurrency": false, "label": "author", "precision": 200, "typeName": "VARCHAR", "scale": 0, "isAutoIncrement": false, "isCaseSensitive": false, "schemaName": "", "tableName": "Books", "type": 12, "nullable": 0, "arrayBaseColumnType": 0, "name": "author" }, { "isSigned": false, "isCurrency": false, "label": "title", "precision": 200, "typeName": "VARCHAR", "scale": 0, "isAutoIncrement": false, "isCaseSensitive": false, "schemaName": "", "tableName": "Books", "type": 12, "nullable": 0, "arrayBaseColumnType": 0, "name": "title" }, { "isSigned": false, "isCurrency": false, "label": "ISBN-13", "precision": 15, "typeName": "VARCHAR", "scale": 0, "isAutoIncrement": false, "isCaseSensitive": false, "schemaName": "", "tableName": "Books", "type": 12, "nullable": 0, "arrayBaseColumnType": 0, "name": "ISBN-13" } ] } ] }

utils.rds.toJsonString 将为:

[ { "author": "Mark Twain", "title": "Adventures of Huckleberry Finn", "ISBN-13": "978-1948132817" }, { "author": "Jack London", "title": "The Call of the Wild", "ISBN-13": "978-1948132275" }, ]

$util.rds.toJsonObject(String serializedSQLResult): Object

utils.rds.toJsonString 相同,但结果为 JSON Object

$utils.http 中的 HTTP 帮助程序

$utils.http 包含帮助程序方法,使用户可以更轻松地处理 http 请求参数。

$utils.http.copyHeaders(Map) : Map

从映射中复制标头,不包括限制的 HTTP 标头集。这对于将请求标头转发给下游 HTTP 终端节点非常有用。

{ ... "params": { ... "headers": $utils.http.copyHeaders($ctx.request.headers), ... }, ... }

$utils.xml 中的 XML 帮助程序

$utils.xml 包含帮助程序方法,使用户可以更轻松地将 XML 响应转换为 JSON 或词典。

$utils.xml.toMap(String) : Map

将 XML 字符串转换为词典。

Input: <?xml version="1.0" encoding="UTF-8"?> <posts> <post> <id>1</id> <title>Getting Started with GraphQL</title> </post> </posts> Output (JSON representation): { "posts":{ "post":{ "id":1, "title":"Getting Started with GraphQL" } } } Input: <?xml version="1.0" encoding="UTF-8"?> <posts> <post> <id>1</id> <title>Getting Started with GraphQL</title> </post> <post> <id>2</id> <title>Getting Started with AWS AppSync</title> </post> </posts> Output (JSON representation): { "posts":{ "post":[ { "id":1, "title":"Getting Started with GraphQL" }, { "id":2, "title":"Getting Started with AWS AppSync" } ] } }

$utils.xml.toJsonString(String) : String

将 XML 字符串转换为 JSON 字符串。这类似于 toMap,只不过输出是字符串。如果您要直接转换 XML 响应并将其从 HTTP 对象返回到 JSON,这非常有用。

$utils.xml.toJsonString(String, boolean) : String

将 XML 字符串转换为具有可选布尔值参数的 JSON 字符串可确定您是否希望将字符串编码为 JSON。

$utils.transform 中的转换帮助程序

$utils.transform 包含帮助程序方法,使其易于对数据源执行复杂的操作,例如 Amazon DynamoDB 筛选操作。

$util.transform.toDynamoDBFilterExpression(Map) : Map

将输入字符串转换为筛选表达式,以用于 Amazon DynamoDB。

Input: $util.transform.toDynamoDBFilterExpression({ "title":{ "contains":"Hello World" } }) Output: { "expression" : "contains(#title, :title_contains)" "expressionNames" : { "#title" : "title", }, "expressionValues" : { ":title_contains" : { "S" : "Hello World" } }, }

$util.transform.toElasticsearchQueryDSL(Map) : Map

将给定的输入转换为其等效的 Elasticsearch 查询 DSL 表达式,同时将其作为 JSON 字符串返回。

Input: $util.transform.toElasticsearchQueryDSL({ "upvotes":{ "ne":15, "range":[ 10, 20 ] }, "title":{ "eq":"hihihi", "wildcard":"h*i" } }) Output: { "bool":{ "must":[ { "bool":{ "must":[ { "bool":{ "must_not":{ "term":{ "upvotes":15 } } } }, { "range":{ "upvotes":{ "gte":10, "lte":20 } } } ] } }, { "bool":{ "must":[ { "term":{ "title":"hihihi" } }, { "wildcard":{ "title":"h*i" } } ] } } ] } }

默认运算符假定为 AND。