

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à.

# Richiedi la convalida per WebSocket APIs in API Gateway
<a name="websocket-api-request-validation"></a>

Puoi configurare API Gateway per eseguire la convalida su una route prima di passare alla richiesta di integrazione. Se la convalida fallisce, API Gateway fallisce la richiesta senza chiamare il backend, invia una risposta gateway «Bad request body» al client e pubblica i risultati della convalida in Logs. CloudWatch L'utilizzo della convalida in questo modo riduce le chiamate non necessarie al back-end dell'API.

## Espressioni di selezione del modello
<a name="apigateway-websocket-api-model-selection-expressions"></a>

Puoi utilizzare un'espressione di selezione del modello per convalidare dinamicamente le richieste all'interno della stessa route. La convalida del modello si verifica se si fornisce un'espressione di selezione del modello per integrazioni proxy o non proxy. Potrebbe essere necessario definire il modello `$default` come un fallback quando non viene trovato alcun modello corrispondente. Se non esiste un modello corrispondente e `$default` non è definito, la convalida non va a buon fine. L'aspetto dell'espressione di selezione è simile a `Route.ModelSelectionExpression` e valuta la chiave per `Route.RequestModels`.

*Quando definisci un percorso per un' WebSocket API, puoi facoltativamente specificare un'espressione di selezione del modello.* Questa espressione viene valutata per selezionare il modello da utilizzare per la convalida del corpo quando si riceve una richiesta. L'espressione restituisce una delle voci presenti nel di una route [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels).

Un modello viene espresso come [schema JSON](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) e descrive la struttura dati del corpo della richiesta. La natura di queste espressioni di selezione consente di scegliere in modo dinamico il modello in base al quale eseguire la convalida in fase di runtime per una determinata route. Per informazioni su come creare un modello, consulta [Modelli di dati per REST APIs](models-mappings-models.md). 

## Configurazione della convalida delle richieste tramite la console Gateway Amazon API
<a name="apigateway-websocket-api-model-selection-expression-example"></a>

L'esempio seguente mostra come configurare la convalida delle richieste per un instradamento.

 Innanzitutto, si crea un modello e quindi un instradamento. Successivamente, si configura la convalida delle richieste sull'instradamento appena creato. Infine, si implementa e si esegue il test dell'API. Per completare questo tutorial, è necessaria un' WebSocket API `$request.body.action` come espressione di selezione del percorso e un endpoint di integrazione per la nuova rotta.

Per la connessione all'API è inoltre necessario `wscat`. Per ulteriori informazioni, consulta [Utilizzalo `wscat` per connetterti a un' WebSocket API e inviarle messaggi](apigateway-how-to-call-websocket-api-wscat.md).

**Creazione di un modello**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegli un'API. WebSocket 

1. Nel riquadro di navigazione principale seleziona **Modelli**.

1. Scegli **Crea modello**.

1. In **Nome**, inserisci **emailModel**.

1. Per **Tipo di contenuto** inserisci **application/json**.

1. Per **Schema modello** immetti il seguente modello:

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type" : "object",
       "required" : [ "address"],
       "properties" : {
           "address": {
               "type": "string"
           }
       }
   }
   ```

   Per questo modello è necessario che la richiesta contenga un indirizzo e-mail.

1. Scegli **Save** (Salva).

In questo passaggio, crei un percorso per la tua WebSocket API.

**Come creare una route**

1. Nel pannello di navigazione principale scegli **Instradamenti**.

1. Selezionare **Create Route (Crea route)**.

1. Per **Chiave instradamento**, inserisci **sendMessage**.

1. Scegli un tipo di integrazione e specificare un endpoint di integrazione. Per ulteriori informazioni, consulta [Integrazioni per API WebSocket APIs Gateway](apigateway-websocket-api-integrations.md).

1. Selezionare **Create Route (Crea route)**.

In questo passaggio si imposta la convalida delle richieste per l'instradamento `sendMessage`.

**Per impostare la convalida delle richieste**

1. Nella scheda **Richiesta di instradamento**, scegli **Modifica** in **Impostazioni della richiesta di instradamento**.

1. Per **Espressione di selezione del modello** immetti **\$1\$1request.body.messageType\$1**.

   Gateway API utilizza la proprietà `messageType` per convalidare la richiesta in arrivo.

1. Scegli **Aggiungi modello di richiesta**.

1. Per **Chiave modello** inserisci **email**.

1. Per **Modello** scegli **emailModel**.

   Gateway API convalida i messaggi in arrivo con la proprietà `messageType` impostata su `email` per questo modello.
**Nota**  
Se Gateway API non riesce ad abbinare l'espressione di selezione del modello a una chiave del modello, viene selezionato il modello `$default`. Se non esiste un modello `$default`, la convalida non va a buon fine. Per la produzione APIs, ti consigliamo di creare un `$default` modello.

1. Scegli **Save changes** (Salva modifiche).

In questo passaggio si implementa e si testa l'API.

**Per distribuire e testare l'API**

1. Seleziona **Deploy API (Distribuisci API)**.

1. Scegliere la fase desiderata dall'elenco a discesa oppure immettere il nome di una nuova fase.

1. Seleziona **Implementa**.

1. Nel riquadro di navigazione principale scegli **Fasi**.

1. Copia l' WebSocket URL della tua API. L'URL dovrebbe essere del tipo `wss://abcdef123.execute-api.us-east-2.amazonaws.com/production`.

1. Apri un nuovo terminale ed eseguire il comando **wscat** con i parametri seguenti.

   ```
   wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
   ```

   ```
   Connected (press CTRL+C to quit)
   ```

1. Utilizza il seguente comando per testare l'API.

   ```
   {"action": "sendMessage", "messageType": "email"}
   ```

   ```
   {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}
   ```

   Gateway API non riuscirà a completare la richiesta.

   Utilizza il seguente comando per inviare una richiesta valida all'API.

   ```
   {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}
   ```