

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Extensiones
<a name="extensions-js"></a>

`extensions` contiene un conjunto de métodos para realizar acciones adicionales en sus solucionadores.

## Almacenamiento en caché de extensiones
<a name="caching-extensions-js-list"></a>

**`extensions.evictFromApiCache(typeName: string, fieldName: string, keyValuePair: Record<string, any>) : Object`**  
Expulsa un elemento de la memoria caché del AWS AppSync servidor. El primer argumento es el nombre de tipo. El segundo argumento es el nombre de campo. El tercer argumento es un objeto que contiene elementos de pares clave-valor que especifican el valor clave de almacenamiento en caché. Debe colocar los elementos del objeto en el mismo orden que las claves de almacenamiento en caché del elemento `cachingKey` del solucionador almacenado en caché. Para obtener más información acerca del almacenamiento en caché, consulte la sección sobre el [comportamiento de almacenamiento en caché](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html#caching-behavior).  
**Ejemplo 1:**  
En este ejemplo, se expulsan los elementos que se almacenaron en caché para un solucionador llamado `Query.allClasses` en el que se usó una clave de almacenamiento en caché denominada `context.arguments.semester`. Cuando se llama a la mutación y se ejecuta el solucionador, si una entrada se borra correctamente, la respuesta contiene un valor `apiCacheEntriesDeleted` en el objeto de extensiones que muestra cuántas entradas se eliminaron.  

```
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;
}
```
Esta función **solo** funciona para mutaciones, no para consultas.

## Extensiones de suscripción
<a name="subscription-extensions-js-list"></a>

**`extensions.setSubscriptionFilter(filterJsonObject)`**  
Define filtros de suscripción mejorados. Cada evento de notificación de suscripción se evalúa con respecto a los filtros de suscripción proporcionados y envía notificaciones a los clientes si todos los filtros se evalúan como `true`. El argumento es `filterJsonObject` (puede encontrar más información sobre este argumento a continuación, en la filterJsonObject sección *Argumento:*). Consulte el artículo sobre [filtrado de suscripciones mejorado](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-enhanced-filtering.html).  
Puede usar esta función de extensión solo en el controlador de respuestas de un solucionador de suscripción. Además, recomendamos usar `util.transform.toSubscriptionFilter` para crear su filtro.

**`extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
Define los filtros de invalidación de suscripciones. Los filtros de suscripción se evalúan con respecto a la carga de invalidación y, a continuación, invalidan una suscripción determinada si los filtros se evalúan como `true`. El argumento es `filterJsonObject` (puede encontrar más información sobre este argumento a continuación, en la filterJsonObject sección *Argumento:*). Consulte el artículo sobre [filtrado de suscripciones mejorado](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-enhanced-filtering.html).  
Puede usar esta función de extensión solo en el controlador de respuestas de un solucionador de suscripción. Además, recomendamos usar `util.transform.toSubscriptionFilter` para crear su filtro.

**`extensions.invalidateSubscriptions(invalidationJsonObject)`**  
Se utiliza para iniciar la invalidación de una suscripción a partir de una mutación. El argumento es `invalidationJsonObject` (puede encontrar más información sobre este argumento a continuación, en la invalidationJsonObject sección *Argumento:*).  
Esta extensión solo se puede usar en las plantillas de mapeo de respuestas de los solucionadores de mutaciones.  
Solo puede usar como máximo cinco llamadas al método `extensions.invalidateSubscriptions()` únicas en una sola solicitud. Si supera este límite, recibirá un error de GraphQL.

## Argumento: filterJsonObject
<a name="extensions-filterJsonObject-js"></a>

El objeto JSON define los filtros de suscripción o invalidación. Es una matriz de filtros en un `filterGroup`. Cada filtro es una colección de filtros individuales.

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

Cada filtro tiene tres atributos: 
+ `fieldName`: campo de esquema de GraphQL.
+ `operator`: tipo de operador.
+ `value`: valores que se van a comparar con el valor `fieldName` de notificación de suscripción.

A continuación se muestra un ejemplo de asignación de estos atributos:

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

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

El `invalidationJsonObject` define lo siguiente:
+ `subscriptionField`: suscripción del esquema de GraphQL a invalidar. Se baraja la posibilidad de invalidar una suscripción única, definida como cadena en el `subscriptionField`.
+ `payload`: lista de pares clave-valor que se utiliza como entrada para la invalidación de suscripciones si el filtro de invalidación se evalúa como `true` en comparación con sus valores.

  En el siguiente ejemplo se invalida a los clientes suscritos y conectados que utilizan la suscripción `onUserDelete` cuando el filtro de invalidación definido en el solucionador de suscripción se evalúa como `true` en comparación con el valor `payload`.

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