本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
扩展
$extensions
包含一组用于在解析器中进行其他操作的方法。
$扩展。 evictFromApi缓存(字符串、字符串、对象):对象
从Amazon AppSync 服务器端缓存中逐出项目。第一个参数是类型名称。第二个参数是字段名称。第三个参数是一个包含指定缓存键值的键值对项的对象。必须按照与缓存解析器中的缓存键相同的顺序将项目放入对象中cachingKey
。
此实用程序仅适用于突变,不适用于查询。
$扩展。 setSubscriptionFilter(filterJsonObject)
定义增强的订阅筛选条件。每个订阅通知事件都会根据提供的订阅过滤器进行评估,如果所有筛选器的评估结果均为,则向客户端发送通知true
。该参数filterJsonObject
如下所述。
您只能在订阅解析器的响应映射模板中使用此扩展方法。
$扩展。 setSubscriptionInvalidation过滤器 (filterJsonObject)
定义订阅失效过滤器。订阅筛选器根据失效负载进行评估,如果过滤器的计算结果为,则使给定订阅失效true
。该参数filterJsonObject
如下所述。
您只能在订阅解析器的响应映射模板中使用此扩展方法。
争论: filterJsonObject
JSON 对象定义了订阅过滤器或失效过滤器。它是 a 中的一个过滤器数组filterGroup
。每个过滤器都是单个过滤器的集合。
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
每个过滤器都有三个属性:
-
fieldName
— GraphQL 架构字段。 -
operator
— 运算符类型。 -
value
— 要与订阅通知fieldName
值比较的值。
以下是这些属性的赋值示例:
{ "fieldName" : "severity", "operator" : "le", "value" : $context.result.severity }
字段:fieldName
字符串类型fieldName
是指在 GraphQL 架构中定义的字段,该字段与订阅通知负载fieldName
中的相匹配。找到匹配项后,会将value
GraphQL 架构字段value
的字段与订阅通知过滤器的字段进行比较。在以下示例中,fieldName
过滤器与给定 GraphQL 类型中定义的service
字段相匹配。如果通知负载包含value
等效于的service
字段AWS AppSync
,则过滤器的计算结果为true
:
{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }
字段:值
根据运算符,该值可以是不同的类型:
-
单个数字或布尔值
-
字符串示例:
"test"
,"service"
-
数字示例:
1
、2
、45.75
-
布尔值示例:
true
,false
-
-
成对的数字或字符串
-
字符串对示例:
["test1","test2"]
,["start","end"]
-
数字对示例:
[1,4]
、[67,89]
、[12.45, 95.45]
-
-
数字或字符串数组
-
字符串数组示例:
["test1","test2","test3","test4","test5"]
-
数字数组示例:
[1,2,3,4,5]
,[12.11,46.13,45.09,12.54,13.89]
-
字段:操作员
区分大小写的字符串,具有以下可能的值:
操作符 | 描述 | 可能的值类型 |
---|---|---|
eq | Equal | integer, float, string, Boolean |
ne | Not equal | integer, float, string, Boolean |
le | Less than or equal | integer, float, string |
lt | Less than | integer, float, string |
ge | Greater than or equal | integer, float, string |
gt | Greater than | integer, float, string |
contains | Checks for a subsequence or value in the set. | integer, float, string |
notContains | Checks for the absence of a subsequence or absence of a value in the set. | integer, float, string |
beginsWith | Checks for a prefix. | string |
in | Checks for matching elements that are in the list. | Array of integer, float, or string |
notIn | Checks for matching elements that aren't in the list. | Array of integer, float, or string |
between | Between two values | integer, float, string |
containsAny | Contains common elements | integer, float, string |
下表描述了在订阅通知中如何使用每个运算符。
AND 逻辑
通过在filterGroup
数组中的filters
对象内定义多个条目,可以使用 AND 逻辑组合多个过滤器。在以下示例中,筛选器的计算结果是订阅通知的userId
字段的值true
是否1
等于,group
字段值是否为Admin
或Developer
。
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
OR 逻辑
您可以通过在filterGroup
数组中定义多个过滤器对象,使用 OR 逻辑组合多个过滤器。在以下示例中,筛选器的计算结果是订阅通知的userId
字段的值等于1
OR 的group
字段值true
是否为Admin
或Developer
。
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
异常
请注意,使用过滤器有几个限制:
-
在
filters
对象中,每个过滤器最多可以有五个唯一fieldName
项目。这意味着您可以使用 AND 逻辑组合最多五个单独的fieldName
对象。 -
containsAny
运算符最多可以有二十个值。 -
in
和notIn
运算符最多可以有五个值。 -
每个字符串最大长度为 256 个字符。
-
每个字符串比较区分大小写。
-
每个
filterGroup
最大长度为 10filters
。这意味着filters
使用 OR 逻辑最多可以合并 10 个。-
运
in
算符是 OR 逻辑的特殊情况。在以下示例中,有两个filters
:{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
前面的过滤器组按如下方式进行评估,并计入最大过滤器限制:
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "eq", "value" : "Admin" } ] }, { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "eq", "value" : "Developer" } ] } ] }
-
$extensions.invalidateSinvalidationJsonObject
用于启动因突变而导致订阅失效。该参数invalidationJsonObject
如下所述。
此扩展只能在突变解析器的响应映射模板中使用。
在任何单个请求中,您最多只能使用五个唯一的$extensions.invalidateSubscriptions()
方法调用。如果超过此限制,则您将收到 GraphQL 错误。
争论: invalidationJsonObject
invalidationJsonObject
定义了以下内容:
-
subscriptionField
— GraphQL 架构订阅将失效。在中定义为字符串的单个订阅被视为失效。subscriptionField
-
payload
— 一个键值对列表,如果失效筛选器的计算结果是true
针对订阅的值,则该列表用作使订阅失效的输入。以下示例在订阅解析器中定义的失效筛选器的计算结果与该
payload
值true
相比时,使用订阅的已订阅和连接的客户端失效。onUserDelete
$extensions.invalidateSubscriptions({ "subscriptionField": "onUserDelete", "payload": { "group": "Developer" "type" : "Full-Time" } })