扩展 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

扩展

$extensions包含一组在解决者中执行额外操作的方法。

$extensions.evictFromApiCache(String, String, Object) : Object

将项目从Amazon AppSync 服务器端缓存。第一个参数是类型名称。第二个参数是字段名称。第三个参数是包含键值的对象对指定缓存密钥值的项目。您必须按照缓存解析器中的缓存键的顺序将项目放入对象中的顺序cachingKey.

注意

此实用程序仅适用于突变,不适用于查询。

$extensions.setSubscriptionFilter(filterJsonObject)

定义增强订阅筛选条件。每个订阅通知事件都会根据提供的订阅筛选条件进行评估,如果所有筛选器评估为true. 参数是filterJsonObject如描述以下.

注意

您可以使用t他的扩展方法仅限在订阅解析器的响应映射模板中。

$extensions.setSubscriptionInvalidationFilter(filterJsonObject)

定义订阅失效过滤器。根据失效有效负载评估订阅筛选器、然后如果过滤器评估为,则使给定的订阅失效true. 参数是filterJsonObject如描述以下.

注意

您可以使用t他的扩展方法仅限在订阅解析器的响应映射模板中。

参数:FilterjsonObject

这些区域有:定义 JSON 对象或者订阅或失效过滤器。这是一个中的一组过滤器filterGroup. 每个过滤器都是单个过滤器的集合。

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

每个过滤器都有三属性:

  • fieldName –这些区域有:GraphQL 架构字段。

  • operator –运算符类型。

  • value –值s与订阅通知进行比较fieldName值。

以下是这些属性的示例分配:

{ "fieldName" : "severity", "operator" : "le", "value" : $context.result.severity }

字段:fieldName

字符串类型fieldName是指 GraphQL 架构中定义的与fieldName在订阅通知有效负载中。何时找到匹配,valueGraphQL 模式字段与value的订阅通知筛选器。在下例中,fieldName过滤器匹配service在给定 GraphQL 类型中定义的字段。如果通知有效负载包含service字段中包含value等效于AWS AppSync,过滤器的计算结果为true

{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }

字段:值

v根据运算符,值可以是不同的类型:

  • 单个号码或布尔值

    • 字符串示例:"test""service"

    • 数字示例:1245.75

    • 布尔值示例:truefalse

  • 对数字或字符串

    • 字符串对示例:["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]

字段:运算符

区分大小写的字符串,其中包含以下可能值:

操作符 描述 可能的值类型s
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

这些区域有:以下桌子描述了订阅通知中如何使用每个运算符。

eq (equal)

这些区域有:eq运营商的评估结果为true如果订阅通知字段值匹配且严格等于筛选器的值。在下例中,筛选条件的计算结果为true订阅通知是否有service值等于的字段AWS AppSync.

可能的值类型s:整数、浮点数、字符串、 布尔值

{ "fieldName" : "service", "operator" : "eq", "value" : "AWS AppSync" }
ne (not equal)

这些区域有:ne运营商的评估结果为true是否订阅通知字段值与筛选器的值不同。在下例中,筛选条件的计算结果为true订阅通知是否有service字段的值不同于AWS AppSync.

可能的值类型s:整数、浮点数、字符串、 布尔值

{ "fieldName" : "service", "operator" : "ne", "value" : "AWS AppSync" }
le (less or equal)

这些区域有:le运营商的评估结果为true如果订阅通知字段值小于或等于筛选条件的值。在下例中,筛选条件的计算结果为true订阅通知是否有size值小于或等于的字段5.

可能的值类型s:整数,浮点数、 串

{ "fieldName" : "size", "operator" : "le", "value" : 5 }
lt (less than)

这些区域有:lt运营商的评估结果为true如果订阅通知字段值低于筛选器的值。在下例中,筛选条件的计算结果为true订阅通知是否有size值小于的字段5.

可能的值类型s:整数,浮点数、 串

{ "fieldName" : "size", "operator" : "lt", "value" : 5 }
ge (greater or equal)

这些区域有:ge运营商的评估结果为true如果订阅通知字段值大于或等于筛选条件的值。在下例中,筛选条件的计算结果为true订阅通知是否有size值大于或等于的字段5.

可能的值类型s:整数,浮点数、 串

{ "fieldName" : "size", "operator" : "ge", "value" : 5 }
gt (greater than)

这些区域有:gt运营商的评估结果为true如果订阅通知字段值大于筛选器的值。在下例中,筛选条件的计算结果为true订阅通知是否有size值大于的字段5.

可能的值类型s:整数,浮点数、 串

{ "fieldName" : "size", "operator" : "gt", "value" : 5 }
contains

这些区域有:contains运算符检查子字符串、子序列或集合或单个项目中的值。带有contains运营商的评估结果为true订阅通知字段值是否包含筛选器值。在下例中,筛选条件的计算结果为true订阅通知是否有seats字段中包含该值的数组值10.

可能的值类型s:整数,浮点数、 串

{ "fieldName" : "seats", "operator" : "contains", "value" : 10 }

在另一个示例中,过滤器的计算结果为true订阅通知是否有event与字段launch作为子字符串。

{ "fieldName" : "event", "operator" : "contains", "value" : "launch" }
notContains

这些区域有:notContains运算符检查集合或单个项目中是否不存在子字符串、子序列或值。带有notContains运营商的评估结果为true如果订阅通知字段值不包含筛选器值。在下例中,筛选条件的计算结果为true订阅通知是否有seats数组值不包含该值的字段10.

可能的值类型s:整数、浮点数、串

{ "fieldName" : "seats", "operator" : "notContains", "value" : 10 }

在另一个示例中,过滤器的计算结果true订阅通知是否有event没有字段值launch作为它的子序列。

{ "fieldName" : "event", "operator" : "notContains", "value" : "launch" }
beginsWith

这些区域有:beginsWith运算符会检查字符串中是否有前缀。包含beginsWith运营商的评估结果为true订阅通知字段值是否以筛选器的值开头。在下例中,筛选条件的计算结果为true订阅通知是否有service具有以开头的值的字段AWS.

可能的值类型:

{ "fieldName" : "service", "operator" : "beginsWith", "value" : "AWS" }
in

这些区域有:in运算符检查数组中是否匹配元素。包含in运营商的评估结果为true如果数组中存在订阅通知字段值。在下例中,筛选条件的计算结果为true订阅通知是否有severity字段中包含数组中存在其中一个值:[1,2,3].

可能的值类型:整数数组,浮点数、或字符串

{ "fieldName" : "severity", "operator" : "in", "value" : [1,2,3] }
notIn

这些区域有:notIn运算符检查数组中是否缺少元素。包含notIn运营商的评估结果为true如果数组中不存在订阅通知字段值。在下例中,筛选条件的计算结果为true订阅通知是否有severity字段中包含数组中不存在的值之一:[1,2,3].

可能的值类型:整数数组,浮点数、或字符串

{ "fieldName" : "severity", "operator" : "notIn", "value" : [1,2,3] }
between

这些区域有:between运算符检查两个数字或字符串之间的值。包含between运营商的评估结果为true如果订阅通知字段值在筛选器的值对之间。在下面的示例中,筛选条件的计算结果为true订阅通知是否有severity包含值的字段234.

可能的值类型s:对整数,浮点数、或字符串

{ "fieldName" : "severity", "operator" : "between", "value" : [1,5] }

AND 逻辑

您可以使用 AND 逻辑组合多个筛选条目,方法是在filters中的对象filterGroup数组。在下例中,筛选条件计算为true订阅通知是否有userId值等于的字段1还有group任一字段值Admin要么Developer.

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 }, { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

OR 逻辑

您可以使用 OR 逻辑组合多个筛选条件,方法是在filterGroup数组。在下例中,筛选条件计算为true订阅通知是否有userId值等于的字段1或者group任一字段值Admin要么Developer.

{ "filterGroup": [ { "filters" : [ { "fieldName" : "userId", "operator" : "eq", "value" : 1 } ] }, { "filters" : [ { "fieldName" : "group", "operator" : "in", "value" : ["Admin", "Developer"] } ] } ] }

请注意,有几个限制为了使用筛选条件:

  • filters对象,t此处可以最多五个独一无二fieldName每个筛选条件. 该意味着你可以组合最多五个人fieldName对象使用 AND 逻辑。

  • 可以的最多为 5 个值innotIn运算符。

  • 每个字符串都能是最大值为256 个字符.

  • 每个字符串比较区分大小写。

  • EACHfilterGroup可以有一个最大值为10 filters. 该意味着你可以组合最大值为10 filters使用 OR 逻辑。

    • T他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.invalidateSubscriptions(invalidationJsonObject)

用于从突变中启动订阅失效。参数是invalidationJsonObject如描述以下.

注意

这个扩展可以被使用仅限在变异解析程序的响应映射模板中。

参数:失效 JsonObject

这些区域有:invalidationJsonObject定义以下内容:

  • subscriptionField –这些区域有:GRaphQL 模式订阅到作废. 单个订阅,定义为subscriptionField,被考虑为无效。

  • payload –键值对列表,如果失效筛选器的计算结果为,则用作使订阅失效的输入true违背他们的价值观。

    以下示例作废s已订阅和连接的客户端使用onUserDelete当订阅解决程序中定义的失效过滤器的评估结果为true反对payload值。

    $extensions.invalidateSubscriptions({ "subscriptionField": "onUserDelete", "payload": { "group": "Developer" "type" : "Full-Time" } })