

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

# 延伸模組
<a name="extensions-js"></a>

`extensions` 包含一組方法，可在解析程式中執行其他動作。

## 快取擴充功能
<a name="caching-extensions-js-list"></a>

**`extensions.evictFromApiCache(typeName: string, fieldName: string, keyValuePair: Record<string, any>) : Object`**  
從 AWS AppSync 伺服器端快取中移出項目。第一個引數是類型名稱。第二個引數是欄位名稱。第三個引數是包含金鑰值對項目的物件，可指定快取金鑰值。您必須在快取解析程式的 中，以與快取金鑰相同的順序放置物件中的項目`cachingKey`。如需快取的詳細資訊，請參閱[快取行為](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html#caching-behavior)。  
**範例 1：**  
此範例會移出針對已呼叫 的解析程式快取的項目`Query.allClasses`，而該解析程式`context.arguments.semester`會使用呼叫 的快取金鑰。當呼叫變動且解析程式執行時，如果項目已成功清除，則回應會在延伸項目物件中包含一個`apiCacheEntriesDeleted`值，顯示已刪除多少項目。  

```
import { util, extensions } from '@aws-appsync/utils';

export const request = (ctx) => ({ payload: null });

export function response(ctx) {
	extensions.evictFromApiCache('Query', 'allClasses', {
		'context.arguments.semester': ctx.args.semester,
	});
	return null;
}
```
此函數**僅適用於**變動，不適用於查詢。

## 訂閱擴充功能
<a name="subscription-extensions-js-list"></a>

**`extensions.setSubscriptionFilter(filterJsonObject)`**  
定義增強型訂閱篩選條件。每個訂閱通知事件都會根據提供的訂閱篩選條件進行評估，並在所有篩選條件評估為 時傳送通知給用戶端`true`。引數為 `filterJsonObject`（如需此引數的詳細資訊，請參閱以下*引數：filterJsonObject* 區段）。請參閱[增強型訂閱篩選](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-enhanced-filtering.html)。  
您只能在訂閱解析程式的回應處理常式中使用此延伸函數。此外，我們建議您使用 `util.transform.toSubscriptionFilter` 來建立篩選條件。

**`extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
定義訂閱失效篩選條件。系統會針對失效承載評估訂閱篩選條件，如果篩選條件評估為 ，則會使指定的訂閱失效`true`。引數為 `filterJsonObject`（如需此引數的詳細資訊，請參閱以下*引數：filterJsonObject* 區段）。請參閱[增強型訂閱篩選](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-enhanced-filtering.html)。  
您只能在訂閱解析程式的回應處理常式中使用此延伸函數。此外，我們建議您使用 `util.transform.toSubscriptionFilter` 來建立篩選條件。

**`extensions.invalidateSubscriptions(invalidationJsonObject)`**  
用來從變動啟動訂閱失效。引數為 `invalidationJsonObject`（如需此引數的詳細資訊，請參閱以下*引數： invalidationJsonObject* 區段）。  
此延伸模組只能用於變動解析程式的回應映射範本。  
在任何單一請求中，您最多只能使用五個唯一的`extensions.invalidateSubscriptions()`方法呼叫。如果您超過此限制，您將會收到 GraphQL 錯誤。

## 引數：filterJsonObject
<a name="extensions-filterJsonObject-js"></a>

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
}
```

## 引數： invalidationJsonObject
<a name="extensions-invalidationJsonObject-js"></a>

`invalidationJsonObject` 定義下列項目：
+ `subscriptionField` – 要失效的 GraphQL 結構描述訂閱。定義為 中字串的單一訂閱`subscriptionField`會被視為失效。
+ `payload` – 金鑰/值對清單，當失效篩選條件`true`根據其值評估為 時，此清單會做為使訂閱失效的輸入。

  當訂閱解析程式中定義的失效篩選條件`true`針對 `payload`值評估為 時，下列範例會使用`onUserDelete`訂閱使已訂閱和已連線的用戶端失效。

  ```
  export const request = (ctx) => ({ payload: null });
  
  export function response(ctx) {
  	extensions.invalidateSubscriptions({
  		subscriptionField: 'onUserDelete',
  		payload: { group: 'Developer', type: 'Full-Time' },
  	});
  	return ctx.result;
  }
  ```