本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
延伸模組
注意
我們現在主要支援 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
-
布林值範例:
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 | 等於 | 整數,浮點數,字符串,布爾 |
氖 | 不等於 | 整數,浮點數,字符串,布爾 |
樂 | 小於或等於 | 整數,浮點數,字符串 |
lt | 小於 | 整數,浮點數,字符串 |
GE | 大於或等於 | 整數,浮點數,字符串 |
gt | 大於 | 整數,浮點數,字符串 |
contains | 檢查集合中的子序列或值。 | 整數,浮點數,字符串 |
不包含 | 檢查集合中是否存在子序列或不存在值。 | 整數,浮點數,字符串 |
開始與 | 檢查前置詞。 | string |
in | 檢查是否符合清單中的元素。 | 整數,浮點數或字符串的數組 |
notIn | 檢查不在列表中的匹配元素。 | 整數,浮點數或字符串的數組 |
介於 | 兩個值之間 | 整數,浮點數,字符串 |
包含任何 | 包含共同元素 | 整數,浮點數,字符串 |
下表說明如何在訂閱通知中使用每個運算子。
AND 邏輯
透過在filterGroup
陣列中的filters
物件內定義多個項目,您可以使用 AND 邏輯合併多個濾鏡。在下列範例中,篩選器會評估訂閱通知是true
userId
否具有相當於 1
AND group
欄位值的欄位值為Admin
或Developer
。
{ "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
值。 -
in
和notIn
運算子最多可以有五個值。 -
每個字串最多可以有 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" } })