

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Estensioni
<a name="extensions"></a>

**Nota**  
Ora supportiamo principalmente il runtime APPSYNC\$1JS e la relativa documentazione. [Prendi in considerazione l'utilizzo del runtime APPSYNC\$1JS e delle relative guide qui.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$extensions`contiene una serie di metodi per eseguire azioni aggiuntive all'interno dei resolver.

## Estensioni di memorizzazione nella cache
<a name="caching-extensions-list"></a>

**`$extensions.evictFromApiCache(String, String, Object) : Object`**  
Rimuove un elemento dalla cache lato server. AWS AppSync Il primo argomento è il nome del tipo. Il secondo argomento è il nome del campo. Il terzo argomento è un oggetto contenente elementi della coppia chiave-valore che specificano il valore della chiave di memorizzazione nella cache. È necessario inserire gli elementi nell'oggetto nello stesso ordine delle chiavi di memorizzazione nella cache del resolver memorizzato nella cache. `cachingKey`  
Questa utilità funziona solo per le mutazioni, non per le interrogazioni.

## Estensioni di abbonamento
<a name="subscription-extensions-list"></a>

**`$extensions.setSubscriptionFilter(filterJsonObject)`**  
Definisce filtri di abbonamento avanzati. Ogni evento di notifica di sottoscrizione viene valutato sulla base dei filtri di sottoscrizione forniti e invia notifiche ai clienti se tutti i filtri rispondono`true`. L'argomento è `filterJsonObject` descritto nella sezione seguente.  
È possibile utilizzare questo metodo di estensione solo nei modelli di mappatura delle risposte di un resolver di sottoscrizioni.

**`$extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
Definisce i filtri di invalidazione dell'abbonamento. I filtri di sottoscrizione vengono valutati in base al payload di invalidazione, quindi invalidano un determinato abbonamento se i filtri restituiscono lo stesso risultato. `true` L'argomento è descritto nella sezione `filterJsonObject` seguente.  
È possibile utilizzare questo metodo di estensione solo nei modelli di mappatura delle risposte di un resolver di sottoscrizioni.

**`$extensions.invalidateSubscriptions(invalidationJsonObject)`**  
Utilizzato per avviare l'invalidazione dell'abbonamento a seguito di una mutazione. L'argomento è `invalidationJsonObject` descritto nella sezione seguente.  
Questa estensione può essere utilizzata solo nei modelli di mappatura delle risposte dei risolutori di mutazioni.  
È possibile utilizzare al massimo cinque chiamate di `$extensions.invalidateSubscriptions()` metodo uniche in ogni singola richiesta. Se superi questo limite, riceverai un errore GraphQL.

## Argomento: filterJsonObject
<a name="extensions-setSubscriptionInvalidationFilter"></a>

L'oggetto JSON definisce i filtri di sottoscrizione o di invalidazione. È una serie di filtri in un. `filterGroup` Ogni filtro è una raccolta di filtri individuali.

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

Ogni filtro ha tre attributi: 
+ `fieldName`— Il campo dello schema GraphQL.
+ `operator`— Il tipo di operatore.
+ `value`— I valori da confrontare con il `fieldName` valore di notifica dell'abbonamento.

Di seguito è riportato un esempio di assegnazione di questi attributi:

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

### Campo: FieldName
<a name="extensions-fieldName"></a>

Il tipo di stringa `fieldName` si riferisce a un campo definito nello schema GraphQL che corrisponde al `fieldName` payload di notifica della sottoscrizione. Quando viene trovata una corrispondenza, il `value` campo dello schema GraphQL viene confrontato con quello del filtro di notifica `value` della sottoscrizione. Nell'esempio seguente, il `fieldName` filtro corrisponde al `service` campo definito in un determinato tipo GraphQL. Se il payload di notifica contiene un `service` campo con un `value` equivalente a`AWS AppSync`, il filtro restituisce: `true`

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

### Campo: valore
<a name="extensions-value"></a>

Il valore può essere di tipo diverso in base all'operatore:
+ Un numero singolo o booleano
  + Esempi di stringhe:, `"test"` `"service"`
  + Esempi di numeri: `1``2`, `45.75`
  + Esempi booleani:, `true` `false`
+ Coppie di numeri o stringhe
  + Esempio di coppia di stringhe:`["test1","test2"]`, `["start","end"]`
  + Esempio di coppia numerica:`[1,4]`,`[67,89]`, `[12.45, 95.45]`
+ Matrici di numeri o stringhe
  + Esempio di array di stringhe: `["test1","test2","test3","test4","test5"]`
  + Esempio di array numerico:`[1,2,3,4,5]`, `[12.11,46.13,45.09,12.54,13.89]`

### Campo: operatore
<a name="extensions-operator"></a>

Una stringa con distinzione tra maiuscole e minuscole con i seguenti valori possibili: 


| 
| 
| Operatore | Description | Tipi di valori possibili | 
| --- |--- |--- |
| eq | Uguale | intero, float, stringa, booleano | 
| uno | Non uguale | intero, float, stringa, booleano | 
| leu | Minore di o uguale a | intero, float, stringa | 
| lt | Less than | intero, float, stringa | 
| età | Maggiore di o uguale a | intero, float, stringa | 
| gt | Greater than | intero, float, stringa | 
| contiene | Verifica la presenza di una sottosequenza o di un valore nel set. | numero intero, float, stringa | 
| Non contiene | Verifica l'assenza di una sottosequenza o l'assenza di un valore nell'insieme. | numero intero, float, stringa | 
| Inizia con | Verifica la presenza di un prefisso. | stringa | 
| in | Verifica la presenza di elementi corrispondenti presenti nell'elenco. | Matrice di numeri interi, float o stringhe | 
| notIn | Verifica la presenza di elementi corrispondenti che non sono presenti nell'elenco. | Matrice di numeri interi, float o stringhe | 
| tra | Tra due valori | numero intero, float, stringa | 
| Contiene Any | Contiene elementi comuni | numero intero, float, stringa | 

La tabella seguente descrive come ogni operatore viene utilizzato nella notifica di sottoscrizione.

------
#### [ eq (equal) ]

L'`eq`operatore valuta `true` se il valore del campo di notifica della sottoscrizione corrisponde ed è strettamente uguale al valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `service` campo con il valore equivalente a. `AWS AppSync`

**Tipi di valori possibili:** integer, float, string, boolean

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

------
#### [ ne (not equal) ]

L'`ne`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è diverso dal valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `service` campo con un valore diverso da. `AWS AppSync`

**Tipi di valori possibili:** integer, float, string, boolean

```
{
 "fieldName" : "service",
 "operator" : "ne",
 "value" : "AWS AppSync"
}
```

------
#### [ le (less or equal) ]

L'`le`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è inferiore o uguale al valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `size` campo con un valore inferiore o uguale a. `5`

**Tipi di valori possibili:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "le",
 "value" : 5
}
```

------
#### [ lt (less than) ]

L'`lt`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è inferiore al valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `size` campo con un valore inferiore a. `5`

**Tipi di valori possibili:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "lt",
 "value" : 5
}
```

------
#### [ ge (greater or equal) ]

L'`ge`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è maggiore o uguale al valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `size` campo con un valore maggiore o uguale a. `5`

**Tipi di valori possibili:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "ge",
 "value" : 5
}
```

------
#### [ gt (greater than) ]

L'`gt`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è maggiore del valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `size` campo con un valore maggiore di. `5`

**Tipi di valori possibili:** integer, float, string

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

------
#### [ contains ]

L'`contains`operatore verifica la presenza di una sottostringa, di una sottosequenza o di un valore in un set o in un singolo elemento. Un filtro con l'`contains`operatore valuta `true` se il valore del campo di notifica della sottoscrizione contiene il valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `seats` campo con il valore dell'array contenente il valore. `10`

**Tipi di valori possibili:** integer, float, string

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

In un altro esempio, il filtro valuta `true` se la notifica di sottoscrizione ha un `event` campo con `launch` come sottostringa.

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

------
#### [ notContains ]

L'`notContains`operatore verifica l'assenza di una sottostringa, di una sottosequenza o di un valore in un set o in un singolo elemento. Il filtro con l'`notContains`operatore determina `true` se il valore del campo di notifica della sottoscrizione non contiene il valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `seats` campo il cui valore dell'array non contiene il valore. `10`

**Tipi di valori possibili:** integer, float, string

```
{
 "fieldName" : "seats",
 "operator" : "notContains",
 "value" : 10
}
```

In un altro esempio, il filtro valuta `true` se la notifica di sottoscrizione ha un valore di `event` campo senza `launch` come sottofondo.

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

------
#### [ beginsWith ]

L'`beginsWith`operatore verifica la presenza di un prefisso in una stringa. Il filtro contenente l'`beginsWith`operatore valuta `true` se il valore del campo di notifica della sottoscrizione inizia con il valore del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `service` campo con un valore che inizia con. `AWS`

**Tipo di valore possibile: stringa**

```
{
 "fieldName" : "service",
 "operator" : "beginsWith",
 "value" : "AWS"
}
```

------
#### [ in ]

L'`in`operatore verifica la presenza di elementi corrispondenti in un array. Il filtro contenente l'`in`operatore valuta `true` se il valore del campo di notifica della sottoscrizione esiste in un array. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `severity` campo con uno dei valori presenti nell'array:. `[1,2,3]`

**Tipo di valore possibile:** Array of integer, float o string

```
{
 "fieldName" : "severity",
 "operator" : "in",
 "value" : [1,2,3]
}
```

------
#### [ notIn ]

L'`notIn`operatore verifica la presenza di elementi mancanti in un array. Il filtro contenente l'`notIn`operatore valuta `true` se il valore del campo di notifica della sottoscrizione non esiste nell'array. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `severity` campo con uno dei valori non presenti nell'array:. `[1,2,3]`

**Tipo di valore possibile:** Array di numeri interi, float o string

```
{
 "fieldName" : "severity",
 "operator" : "notIn",
 "value" : [1,2,3]
}
```

------
#### [ between ]

L'`between`operatore verifica la presenza di valori tra due numeri o stringhe. Il filtro contenente l'`between`operatore valuta `true` se il valore del campo di notifica della sottoscrizione è compreso tra la coppia di valori del filtro. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione ha un `severity` campo con valori`2`,,`3`. `4`

**Tipi di valori possibili:** coppia di numeri interi, float o string

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

------
#### [ containsAny ]

L'`containsAny`operatore verifica la presenza di elementi comuni negli array. Un filtro con l'`containsAny`operatore valuta `true` se l'intersezione tra il valore del set del campo di notifica della sottoscrizione e il valore del set di filtri non è vuota. Nell'esempio seguente, il filtro valuta `true` se la notifica di sottoscrizione contiene un `seats` campo con un valore di matrice contenente o. `10` `15` Ciò significa che il filtro valuterebbe `true` se la notifica di sottoscrizione avesse un valore di `seats` campo pari `[10,11]` o`[15,20,30]`.

**Tipi di valori possibili:** integer, float o string

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

------

### Logica AND
<a name="extensions-AND-logic"></a>

È possibile combinare più filtri utilizzando la logica AND definendo più voci all'interno dell'`filters`oggetto dell'`filterGroup`array. Nell'esempio seguente, i filtri valutano `true` se la notifica di sottoscrizione ha un `userId` campo con un valore equivalente a `1` AND un valore di `group` campo pari `Admin` o uguale a`Developer`.

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

### Logica OR
<a name="extensions-OR-logic"></a>

È possibile combinare più filtri utilizzando la logica OR definendo più oggetti di filtro all'interno dell'`filterGroup`array. Nell'esempio seguente, i filtri valutano `true` se la notifica di sottoscrizione ha un `userId` campo con un valore equivalente a `1` OR un valore di `group` campo uguale a `Admin` o`Developer`.

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

### Eccezioni
<a name="extensions-exceptions"></a>

Tieni presente che esistono diverse restrizioni per l'utilizzo dei filtri:
+ Nell'`filters`oggetto, possono esserci un massimo di cinque `fieldName` elementi unici per filtro. Ciò significa che è possibile combinare un massimo di cinque `fieldName` oggetti singoli utilizzando la logica AND.
+ L'`containsAny`operatore può disporre di un massimo di venti valori.
+ Possono esserci un massimo di cinque valori per gli `notIn` operatori `in` and.
+ Ogni stringa può contenere un massimo di 256 caratteri.
+ Ogni confronto tra stringhe distingue tra maiuscole e minuscole.
+ Il filtraggio degli oggetti annidati consente fino a cinque livelli di filtraggio annidati.
+ Ciascuno `filterGroup` può avere un massimo di 10. `filters` Ciò significa che è possibile combinarne un massimo di 10 `filters` utilizzando la logica OR.
  + L'`in`operatore è un caso speciale della logica OR. Nell'esempio seguente, ce ne sono due`filters`:

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

    Il gruppo di filtri precedente viene valutato come segue e conta ai fini del limite massimo di filtri:

    ```
    {
        "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"
                    }
               ]  
            }
        ]
    }
    ```

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

`invalidationJsonObject`Definisce quanto segue:
+ `subscriptionField`— L'abbonamento allo schema GraphQL da invalidare. Un singolo abbonamento, definito come una stringa in`subscriptionField`, viene considerato invalidato.
+ `payload`— Un elenco di coppie chiave-valore che viene utilizzato come input per invalidare le sottoscrizioni se il filtro di invalidazione valuta in base ai relativi valori. `true`

  L'esempio seguente invalida i client sottoscritti e connessi che utilizzano l'abbonamento quando il filtro di invalidazione definito nel resolver di `onUserDelete` sottoscrizione restituisce un risultato conforme al valore. `true` `payload`

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