延伸模組 - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

延伸模組

注意

我們現在主要支援 APPSYNC_JS 執行階段及其說明文件。請考慮在此處使用 APPSYNC_JS 執行階段及其指南。

$extensions包含一組在解析器中執行其他動作的方法。

$ 擴展。 evictFromApi緩存(字符串,字符串,對象):對象

從 AWS AppSync 伺服器端快取中收回項目。第一個參數是類型名稱。第二個引數是欄位名稱。第三個參數是包含指定緩存鍵值的鍵-值對項目的對象。您必須按照與緩存解析器中的緩存密鑰相同的順序放置對象中的項目。cachingKey

注意

此實用程序僅適用於突變,而不適用於查詢。

$ 擴展。 setSubscriptionFilter(filterJsonObject)

定義增強的訂閱篩選器。系統會根據提供的訂閱篩選器評估每個訂閱通知事件,並在所有篩選器評估為時向true用戶端傳送通知 引數filterJsonObject如下所述。

注意

您只能在訂閱解析器的回應對應範本中使用此延伸方法。

$ 擴展。 setSubscriptionInvalidation過濾器 (filterJsonObject)

定義訂閱失效篩選器。會根據無效承載評估訂閱篩選器,然後如果篩選器評估為,則會使指定的訂閱失效。true引數filterJsonObject如下所述。

注意

您只能在訂閱解析器的回應對應範本中使用此延伸方法。

引數: 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欄位相符。如果通知有效負載包含value相當於的service欄位AWS AppSync,則篩選器評估為true

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

欄位:值

該值可以是基於運算符的不同類型:

  • 單個數字或布爾

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

    • 數字示例:1,2, 45.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]

欄位:運算子

具有以下可能值的區分大小寫的字符串:

運算子 描述 可能的值類型
eq 等於 整數,浮點數,字符串,布爾
不等於 整數,浮點數,字符串,布爾
小於或等於 整數,浮點數,字符串
lt 小於 整數,浮點數,字符串
GE 大於或等於 整數,浮點數,字符串
gt 大於 整數,浮點數,字符串
contains 檢查集合中的子序列或值。 整數,浮點數,字符串
不包含 檢查集合中是否存在子序列或不存在值。 整數,浮點數,字符串
開始與 檢查前置詞。 string
in 檢查是否符合清單中的元素。 整數,浮點數或字符串的數組
notIn 檢查不在列表中的匹配元素。 整數,浮點數或字符串的數組
介於 兩個值之間 整數,浮點數,字符串
包含任何 包含共同元素 整數,浮點數,字符串

下表說明如何在訂閱通知中使用每個運算子。

eq (equal)

eq運算子會評估訂閱通知欄位值是true否符合且嚴格等於篩選器的值。在下列範例中,篩選器會評估訂閱通知是true否具有等於值的service欄位AWS AppSync

可能的值類型:整數,浮點數,字符串,布爾

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

ne運算子會評估訂閱通知欄位值是true否與篩選器的值不同。在下列範例中,篩選器會評估訂閱通知是true否具有與值不同的service欄位AWS AppSync

可能的值類型:整數,浮點數,字符串,布爾

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

le運算子會評估訂閱通知欄位值是true否小於或等於篩選器的值。在下列範例中,篩選器會評估訂閱通知是true否具有小於或等於值的size欄位5

可能的值類型:整數,浮點數,字符串

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

lt運算子會評估訂閱通知欄位值是true否低於篩選器的值。在下列範例中,篩選器會評估訂閱通知是true否有值小於的size欄位5

可能的值類型:整數,浮點數,字符串

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

ge運算子會評估訂閱通知欄位值是true否大於或等於篩選器的值。在下列範例中,篩選器會評估訂閱通知是true否具有大於或等於值的size欄位5

可能的值類型:整數,浮點數,字符串

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

gt運算子會評估訂閱通知欄位值是true否大於篩選器的值。在下列範例中,篩選器會評估訂閱通知是true否具有大於值的size欄位5

可能的值類型:整數,浮點數,字符串

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

contains運算子會檢查集合或單一項目中的子字串、子序列或值。含有contains運算子的篩選器會評估訂閱通知欄位值是true否包含篩選器值。在下列範例中,篩選器會評估訂閱通知是true否具有包含該值之陣列值的seats欄位10

可能的值類型:整數,浮點數,字符串

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

在另一個範例中,篩選器會評估訂閱通知是true否具有launch作為子字串的event欄位。

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

notContains運算子會檢查集合或單一項目中是否存在子字串、子序列或值。含有notContains運算子的篩選器會評估訂閱通知欄位值是true否不包含篩選器值。在下列範例中,篩選器會評估訂閱通知是true否具有不包含值的陣列值的seats欄位10

可能的值類型:整數,浮點數,字符串

{ "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否有值為23、的severity欄位4

可能的值類型:一對整數,浮點數或字符串

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

containsAny運算子會檢查陣列中的共同元素。含有containsAny運算子的篩選器會評估訂閱通知欄位設定值與篩選器集值的交集是true否非空白。在下列範例中,篩選器會評估訂閱通知是true否具有包含10或之陣列值的seats欄位15。這表示篩選器會評估訂閱通知的seats欄位值是true否為[10,11][15,20,30]

可能的值類型:整數,浮點數或字符串

{ "fieldName" : "seats", "operator" : "containsAny", "value" : [10, 15] }

AND 邏輯

透過在filterGroup陣列中的filters物件內定義多個項目,您可以使用 AND 邏輯合併多個濾鏡。在下列範例中,篩選器會評估訂閱通知是trueuserId否具有相當於 1 AND group 欄位值的欄位值為AdminDeveloper

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

OR 邏輯

您可以透過在filterGroup陣列中定義多個濾鏡物件,使用 OR 邏輯合併多個濾鏡。在下列範例中,篩選器會評估訂閱通知的userId欄位是true否具有等於 1 OR group 欄位值Admin或的欄位值Developer

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

例外狀況

請注意,使用篩選器有幾種限制:

  • filters物件中,每個篩選器最多可有五個唯一fieldName項目。這意味著您最多可以使用 AND 邏輯合併五個單獨的fieldName對象。

  • 運算子最多可以有二十個containsAny值。

  • innotIn運算子最多可以有五個值。

  • 每個字串最多可以有 256 個字元。

  • 每個字符串比較都區分大小寫。

  • 巢狀物件篩選允許最多五個巢狀層級的篩選。

  • 每個最多filterGroup可以有 10 個filters。這意味著您可以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" } ] } ] }

$ 擴展無效訂閱()invalidationJsonObject

用於從突變啟動訂閱失效。引數invalidationJsonObject如下所述。

注意

此擴充功能只能用於突變解析器的回應對應範本。

您最多只能在任何單個請求中使用五個唯一的$extensions.invalidateSubscriptions()方法調用。如果超過此限制,您將收到 GraphQL 錯誤。

引數: invalidationJsonObject

invalidationJsonObject義以下內容:

  • subscriptionField— 要使用的 GraphQL 結構描述訂閱使其無效。單一訂閱 (在中定義為字串) 會subscriptionField被視為無效驗證。

  • payload— 鍵值配對清單,如果無效篩選器根據其值進行評估,則用作使訂閱無效的輸入。true

    下列範例會在onUserDelete訂閱解析程式中定義的無效驗證篩選器對值進行評估時,使用訂閱將已訂閱和連線的用戶端失效。true payload

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