扩展程序
注意
我们现在主要支持 APPSYNC_JS 运行时系统及其文档。请考虑使用 APPSYNC_JS 运行时系统和此处的指南。
$extensions
包含一组在解析器中执行额外操作的方法。
$extensions.evictFromApiCache(String, String, Object) : Object
-
从 Amazon AppSync 服务器端缓存中逐出项目。第一个参数是类型名称。第二个参数是字段名称。第三个参数是一个对象,其中包含指定缓存键值的键值对项目。您必须按照与缓存解析器的
cachingKey
中的缓存键相同的顺序,将项目放入对象中。注意
该实用程序仅适用于变更,而不适用于查询。
$extensions.setSubscriptionFilter(filterJsonObject)
-
定义增强的订阅筛选条件。每个订阅通知事件都会根据提供的订阅筛选条件进行评估,如果所有筛选条件的评估结果均为
true
,则向客户端发送通知。参数是filterJsonObject
,如下一节所述。注意
您只能在订阅解析器的响应映射模板中使用该扩展方法。
$extensions.setSubscriptionInvalidationFilter(filterJsonObject)
-
定义订阅失效筛选条件。根据失效负载评估订阅筛选条件,如果筛选条件的评估结果为
true
,则使给定订阅失效。参数是filterJsonObject
,如下一节所述。注意
您只能在订阅解析器的响应映射模板中使用该扩展方法。
$extensions.invalidateSubscriptions(invalidationJsonObject)
-
用于启动变更导致的订阅失效。参数是
invalidationJsonObject
,如下一节所述。注意
只能在变更解析器的响应映射模板中使用该扩展。
您最多只能在任何单个请求中使用 5 个唯一的
$extensions.invalidateSubscriptions()
方法调用。如果超过该限制,您将收到 GraphQL 错误。
参数:filterJsonObject
JSON 对象定义订阅或失效筛选条件。它是 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
匹配。在找到匹配项时,GraphQL 架构字段的 value
与订阅通知筛选条件的 value
进行比较。在以下示例中,fieldName
筛选条件与给定 GraphQL 类型中定义的 service
字段匹配。如果通知负载包含 service
字段,并且 value
等于 AWS
AppSync
,则筛选条件的评估结果为 true
:
{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }
字段:value
根据运算符,该值可能具有不同的类型:
-
单个数字或布尔值
-
字符串示例:
"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]
-
字段:operator
一个区分大小写的字符串,可能具有以下值:
运算符 | 描述 | 可能的值类型 |
---|---|---|
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
字段值等于 1
并且 group
字段的值为 Admin
或 Developer
,则筛选条件的评估结果为 true
。
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
OR 逻辑
您可以在 filterGroup
数组中定义多个筛选条件对象,以使用 OR 逻辑组合多个筛选条件。在以下示例中,如果订阅通知的 userId
字段值等于 1
或者 group
字段的值为 Admin
或 Developer
,则筛选条件的评估结果为 true
。
{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }
异常
请注意,使用筛选条件存在一些限制:
-
在
filters
对象中,每个筛选条件最多可以具有 5 个唯一的fieldName
项目。这意味着,您可以使用 AND 逻辑组合最多 5 个单独的fieldName
对象。 -
containsAny
运算符最多可以具有 20 个值。 -
in
和notIn
运算符最多可以具有 5 个值。 -
每个字符串最多可以包含 256 个字符。
-
每个字符串比较都区分大小写。
-
嵌套对象筛选最多允许 5 个嵌套筛选级别。
-
每个
filterGroup
最多可以具有 10 个filters
。这意味着,您可以使用 OR 逻辑最多组合 10 个filters
。-
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" } ] } ] }
-
参数:invalidationJsonObject
invalidationJsonObject
定义以下内容:
-
subscriptionField
- 要失效的 GraphQL 架构订阅。单个订阅(在subscriptionField
中定义为字符串)被视为失效。 -
payload
- 一个键值对列表,如果失效筛选条件根据其值评估的结果为true
,则将该列表作为使订阅失效的输入。在订阅解析器中定义的失效筛选条件根据
payload
值评估的结果为true
时,以下示例导致使用onUserDelete
订阅的订阅和连接的客户端失效。$extensions.invalidateSubscriptions({ "subscriptionField": "onUserDelete", "payload": { "group": "Developer" "type" : "Full-Time" } })