

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 拡張子
<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 サーバー側のキャッシュから項目を削除します。最初の引数は型名です。2 番目の引数はフィールド名です。3 番目の引数は、キャッシュキー値を指定するキーと値のペア項目を含むオブジェクトです。オブジェクト内の項目は、キャッシュされたリゾルバーの `cachingKey` のキャッシュキーと同じ順序で配置する必要があります。キャッシュの詳細については、「[キャッシング動作](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html#caching-behavior)」を参照してください。  
**例 1:**  
この例では、呼び出されたキャッシュキー `context.arguments.semester` が使用されたリゾルバー `Query.allClasses` に対してキャッシュされた項目がエビクションされています。ミューテーションが呼び出されてリゾルバーが実行され、エントリが正常にクリアされると、レスポンスには拡張子オブジェクトに、削除されたエントリの数を示す `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*」セクションを参照してください)。  
この拡張関数はミューテーションリゾルバーのレスポンスマッピングテンプレートでのみ使用できます。  
1 つのリクエストで使用できるユニークな `extensions.invalidateSubscriptions()` メソッド呼び出しは 5 つまでです。この制限を超えた場合、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"]
                }
           ]
           
        }
    ]
}
```

各フィルターには次の 3 つの属性があります。
+ `fieldName` – GraphQL スキーマフィールド。
+ `operator` – オペレータータイプ。
+ `value` – サブスクリプション通知 `fieldName` 値と比較する値。

以下は、これらの属性の割り当ての例です。

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

## 引数: invalidationJsonObject
<a name="extensions-invalidationJsonObject-js"></a>

`invalidationJsonObject` では以下が定義されます。
+ `subscriptionField` – 無効にする GraphQL スキーマのサブスクリプション。`subscriptionField`で文字列として定義されている 1 つのサブスクリプションは無効とみなされます。
+ `payload` — 無効化フィルターがその値に対して `true` と評価された場合に、サブスクリプションを無効化するための入力として使用されるキーと値のペアリスト。

  以下の例では、サブスクリプションリゾルバーで定義された無効化フィルターが `payload` 値に対して `true` と評価されたとき、`onUserDelete` サブスクリプションを使用してサブスクライブして接続しているクライアントを無効にします。

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