

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

# REST API di Gateway API
<a name="apigateway-rest-api"></a>

Un'API REST in API Gateway è una raccolta di risorse e metodi integrati con endpoint HTTP di back-end, funzioni Lambda o altri AWS servizi. Puoi utilizzare le caratteristiche API Gateway per semplificare tutti gli aspetti del ciclo di vita dell'API, dalla creazione al monitoraggio delle API di produzione.

Le API REST di API Gateway utilizzano un modello di richiesta/risposta in cui un client invia una richiesta a un servizio e il servizio risponde in modo sincrono. Questo tipo di modello è adatto per molti diversi tipi di applicazioni che dipendono dalla comunicazione sincrona.

**Topics**
+ [Sviluppa REST APIs in API Gateway](rest-api-develop.md)
+ [Pubblica REST APIs per i clienti da richiamare](rest-api-publish.md)
+ [Ottimizzazione delle prestazioni di REST APIs](rest-api-optimize.md)
+ [Distribuisci il tuo REST APIs ai clienti in API Gateway](rest-api-distribute.md)
+ [Proteggi il tuo REST APIs in API Gateway](rest-api-protect.md)
+ [Monitoraggio delle REST API in Gateway API](rest-api-monitor.md)

# Sviluppa REST APIs in API Gateway
<a name="rest-api-develop"></a>

 In Amazon API Gateway è possibile creare un'API REST come una raccolta di entità programmabili note come [risorse](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) di API Gateway. Ad esempio, si utilizza una [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa per rappresentare un'API che può contenere una raccolta di entità [Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html). 

Ciascuna entità `Resource` può presentare una o più risorse [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html). `Method` è una richiesta in entrata inviata dal client che può contenere un parametro di percorso, un’intestazione o un parametro della stringa di query. Inoltre, a seconda del metodo HTTP, la richiesta può contenere un corpo. Il metodo definisce in che modo il client accede alla `Resource` esposta. Per integrare `Method` con un endpoint di backend, noto anche come endpoint di integrazione, devi creare una risorsa [Integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html). In questo modo la richiesta in arrivo viene inoltrata all'URI dell'endpoint di integrazione specificato. Se necessario, è possibile trasformare i parametri o il corpo della richiesta per soddisfare i requisiti del backend oppure creare un’integrazione proxy, in cui Gateway API invia l’intera richiesta in un formato standardizzato all’URI dell’endpoint di integrazione e quindi invia la risposta direttamente al client.

Per le risposte, è possibile creare una [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html)risorsa per rappresentare una risposta ricevuta dal client e creare una [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)risorsa per rappresentare la risposta restituita dal backend. Si utilizza la risposta di integrazione per trasformare i dati della risposta del backend prima di restituirli al client oppure si passa la risposta del backend al client senza modificarla.

## Risorsa di esempio per una REST API
<a name="rest-api-develop-example"></a>

Il diagramma seguente mostra come API Gateway implementa questo request/response modello per un proxy HTTP e un'integrazione HTTP non proxy per la risorsa. `GET /pets` Il client invia l’intestazione `x-version:beta` a Gateway API che quindi invia il codice di stato `204` al client.

Nell’integrazione non proxy, Gateway API esegue le trasformazioni di dati per soddisfare i requisiti del backend, modificando la richiesta e la risposta di integrazione. In un’integrazione non proxy, è possibile accedere al corpo nella richiesta di metodo ma è necessario trasformarlo nella richiesta di integrazione. Quando l’endpoint di integrazione restituisce una risposta con un corpo, è necessario accedere e trasformarlo nella risposta di integrazione. Non è possibile modificare il corpo nella risposta di metodo.

Nell’integrazione proxy, l’endpoint di integrazione modifica la richiesta e la risposta. Gateway API non modifica la richiesta o la risposta di integrazione e invia la richiesta in entrata al backend così com’è.

Indipendentemente dal tipo di integrazione, il client ha inviato una richiesta a Gateway API che ha risposto in modo sincrono.

------
#### [ Non-proxy integration ]

![\[Diagramma dell’integrazione non proxy di Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/develop-non-proxy.png)


------
#### [ Proxy integration ]

![\[Diagramma dell’integrazione proxy di Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/develop-proxy.png)


------

I log di esecuzione seguenti mostrano cosa dell’esempio precedente Gateway API registra nei log. Per maggiore chiarezza, alcuni valori e log iniziali sono stati rimossi:

------
#### [ Non-proxy integration ]

```
Wed Feb 12 23:56:44 UTC 2025 : Starting execution for request: abcd-1234-5678
Wed Feb 12 23:56:44 UTC 2025 : HTTP Method: GET, Resource Path: /pets
Wed Feb 12 23:56:44 UTC 2025 : Method request path: {}
Wed Feb 12 23:56:44 UTC 2025 : Method request query string: {}
Wed Feb 12 23:56:44 UTC 2025 : Method request headers: {x-version=beta}
Wed Feb 12 23:56:44 UTC 2025 : Method request body before transformations: 
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request headers: {app-version=beta}
Wed Feb 12 23:56:44 UTC 2025 : Endpoint request body after transformations: 
Wed Feb 12 23:56:44 UTC 2025 : Sending request to http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:56:45 UTC 2025 : Received response. Status: 200, Integration latency: 123 ms
Wed Feb 12 23:56:45 UTC 2025 : Endpoint response headers: {Date=Wed, 12 Feb 2025 23:56:45 GMT}
Wed Feb 12 23:56:45 UTC 2025 : Endpoint response body before transformations:
Wed Feb 12 23:56:45 UTC 2025 : Method response body after transformations: (null)
Wed Feb 12 23:56:45 UTC 2025 : Method response headers: {X-Amzn-Trace-Id=Root=1-abcd-12345}
Wed Feb 12 23:56:45 UTC 2025 : Successfully completed execution
Wed Feb 12 23:56:45 UTC 2025 : Method completed with status: 204
```

------
#### [ Proxy integration ]

```
Wed Feb 12 23:59:42 UTC 2025 : Starting execution for request: abcd-1234-5678
Wed Feb 12 23:59:42 UTC 2025 : HTTP Method: GET, Resource Path: /pets
Wed Feb 12 23:59:42 UTC 2025 : Method request path: {}
Wed Feb 12 23:59:42 UTC 2025 : Method request query string: {}
Wed Feb 12 23:59:42 UTC 2025 : Method request headers: {x-version=beta}
Wed Feb 12 23:59:42 UTC 2025 : Method request body before transformations: 
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request headers: { x-version=beta}
Wed Feb 12 23:59:42 UTC 2025 : Endpoint request body after transformations: 
Wed Feb 12 23:59:42 UTC 2025 : Sending request to http://petstore-demo-endpoint.execute-api.com/petstore/pets
Wed Feb 12 23:59:43 UTC 2025 : Received response. Status: 204, Integration latency: 123 ms
Wed Feb 12 23:59:43 UTC 2025 : Endpoint response headers: {Date=Wed, 12 Feb 2025 23:59:43 GMT}
Wed Feb 12 23:59:43 UTC 2025 : Endpoint response body before transformations: 
Wed Feb 12 23:59:43 UTC 2025 : Method response body after transformations:
Wed Feb 12 23:59:43 UTC 2025 : Method response headers: {Date=Wed, 12 Feb 2025 23:59:43 GMT}
Wed Feb 12 23:59:43 UTC 2025 : Successfully completed execution
Wed Feb 12 23:59:43 UTC 2025 : Method completed with status: 204
```

------

[Per importare un'API simile e testarla in Console di gestione AWS, vedi l'API di esempio.](api-gateway-create-api-from-example.md)

## Funzionalità aggiuntive per lo sviluppo di REST API
<a name="rest-api-develop-details"></a>

Gateway API supporta funzionalità aggiuntive per lo sviluppo della REST API. Ad esempio, per aiutare i clienti a comprendere l’API, è possibile fornire la documentazione relativa all’API. A questo scopo, aggiungi una risorsa [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html) per un'entità API supportata.

Per controllare il modo in cui i client chiamano un'API, usa le [autorizzazioni IAM](permissions.md), un'[autorizzazione Lambda](apigateway-use-lambda-authorizer.md) o un [pool di utenti di Amazon Cognito](apigateway-integrate-with-cognito.md). Per misurare l'uso dell'API, configura [piani di utilizzo](api-gateway-api-usage-plans.md) per eseguire il throttling delle richieste API. Puoi abilitare queste impostazioni durante la creazione o l'aggiornamento dell'API.

Il diagramma seguente mostra le funzionalità disponibili per lo sviluppo di REST API e dove tali funzionalità sono configurate nel modello di richiesta/risposta.

![\[Diagramma delle funzionalità di Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/develop-features.png)


Per un'introduzione su come creare un'API, consulta [Tutorial: creazione di una REST API con un'integrazione proxy Lambda](api-gateway-create-api-as-simple-proxy-for-lambda.md). Per ulteriori informazioni sulle funzionalità di Gateway API che potresti utilizzare durante lo sviluppo di una REST API, consulta i seguenti argomenti. Questi argomenti contengono informazioni e procedure concettuali che è possibile eseguire utilizzando la console API Gateway, l'API REST API Gateway AWS CLI, o una delle AWS SDKs.

**Topics**
+ [Risorsa di esempio per una REST API](#rest-api-develop-example)
+ [Funzionalità aggiuntive per lo sviluppo di REST API](#rest-api-develop-details)
+ [Tipi di endpoint API per REST APIs in API Gateway](api-gateway-api-endpoint-types.md)
+ [Politiche di sicurezza per REST APIs in API Gateway](apigateway-security-policies.md)
+ [Tipi di indirizzo IP per REST API in Gateway API](api-gateway-ip-address-type.md)
+ [Metodi per REST APIs in API Gateway](how-to-method-settings.md)
+ [Controlla e gestisci l'accesso a REST APIs in API Gateway](apigateway-control-access-to-api.md)
+ [Integrazioni per REST APIs in API Gateway](how-to-integration-settings.md)
+ [Richiedi la convalida per REST APIs in API Gateway](api-gateway-method-request-validation.md)
+ [Trasformazioni dei dati per REST APIs in API Gateway](rest-api-data-transformations.md)
+ [Risposte gateway per REST APIs in API Gateway](api-gateway-gatewayResponse-definition.md)
+ [CORS per REST APIs in API Gateway](how-to-cors.md)
+ [Tipi di supporti binari per REST APIs in API Gateway](api-gateway-payload-encodings.md)
+ [Invocazione di REST API in Gateway API](how-to-call-api.md)
+ [Sviluppa REST APIs utilizzando OpenAPI in API Gateway](api-gateway-import-api.md)

# Tipi di endpoint API per REST APIs in API Gateway
<a name="api-gateway-api-endpoint-types"></a>

Per tipo di *[endpoint API](api-gateway-basic-concept.md#apigateway-definition-api-endpoints)* si intende il nome host dell'API. Il tipo di endpoint dell’API può essere *ottimizzato per l’edge*, *regionale* o *privato*, a seconda della provenienza della maggior parte del traffico dell’API.

## Endpoint API ottimizzati per edge
<a name="api-gateway-api-endpoint-types-edge-optimized"></a>

Un *[endpoint API ottimizzato per l'edge in genere indirizza le richieste al CloudFront Point of Presence (POP) più vicino, il che può essere utile nei casi in cui i clienti sono distribuiti geograficamente](api-gateway-basic-concept.md#apigateway-definition-edge-optimized-api-endpoint)*. Questo è il tipo di endpoint predefinito per API Gateway APIs REST.

Ottimizzato per Edge, usa APIs le maiuscole per i nomi delle [intestazioni HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) (ad esempio,). `Cookie`

CloudFront ordina i cookie HTTP in ordine naturale in base al nome del cookie prima di inoltrare la richiesta all'origine. Per ulteriori informazioni sul modo in cui CloudFront elabora i cookie, consulta [Memorizzazione nella cache dei contenuti](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html) basati sui cookie.

Qualsiasi nome di dominio utilizzato per un'API con edge ottimizzato si applica in tutte le regioni.

## Endpoint API regionali
<a name="api-gateway-api-endpoint-types-regional"></a>

Un *[endpoint API regionale](api-gateway-basic-concept.md#apigateway-definition-regional-api-endpoint)* è destinato a client inclusi nella stessa Regione. L’API regionale riduce il sovraccarico delle connessioni nei casi in cui un client in esecuzione su un’istanza EC2 chiama un’API nella stessa Regione o un’API è destinata all’utilizzo da parte di un numero limitato di client con domanda elevata.

Per un’API regionale, il nome di dominio personalizzato è specifico della Regione in cui viene implementata l’API. Se si distribuisce un’API regionale in più Regioni, questa può avere lo stesso nome di dominio personalizzato in tutte le Regioni. È possibile utilizzare domini personalizzati insieme ad Amazon Route 53 per eseguire attività come l'[instradamento basato su latenza](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency). Per ulteriori informazioni, consulta [Configurazione di un nome di dominio personalizzato regionale in Gateway API](apigateway-regional-api-custom-domain-create.md) e [Configurazione di un nome di dominio personalizzato ottimizzato per l'edge in Gateway API](how-to-edge-optimized-custom-domain-name.md).

Gli endpoint di API regionali passano tutti i nomi di intestazione senza alcuna modifica.

**Nota**  
Nei casi in cui i client API siano distribuiti geograficamente, può comunque essere opportuno utilizzare un endpoint API regionale, insieme alla propria CloudFront distribuzione Amazon per garantire che API Gateway non associ l'API a distribuzioni controllate dal servizio. CloudFront Per ulteriori informazioni su questo caso d'uso, vedi [Come posso configurare API Gateway con la mia CloudFront distribuzione?](https://repost.aws/knowledge-center/api-gateway-cloudfront-distribution) .

## Endpoint API privati
<a name="api-gateway-api-endpoint-types-private"></a>

Un *[endpoint di API privato](api-gateway-basic-concept.md#apigateway-definition-private-api-endpoint)* è un endpoint di API al quale è possibile accedere solo da Amazon Virtual Private Cloud (VPC) utilizzando un endpoint VPC di interfaccia, ovvero un'interfaccia di rete dell'endpoint creato nel VPC. Per ulteriori informazioni, consulta [REST privato APIs in API Gateway](apigateway-private-apis.md).

Gli endpoint API privati passano tutti i nomi delle intestazioni senza alcuna modifica.

# Modifica di un tipo di endpoint API pubblico o privato in API Gateway
<a name="apigateway-api-migration"></a>

La modifica di un tipo di endpoint API richiede l'aggiornamento della configurazione dell'API. Puoi modificare un tipo di API esistente utilizzando la console API Gateway AWS CLI, o un AWS SDK per API Gateway. Il tipo di endpoint non potrà essere modificato fino a quando non viene completata la modifica corrente ma, durante tale periodo, l’API sarà disponibile. 

Sono supportate le seguenti modifiche ai tipi di endpoint:
+ Da ottimizzato per l'edge a regionale o privato
+ Da regionale a ottimizzato per l'edge o privato
+ Da privato a regionale

Non è possibile modificare un'API privata in un'API ottimizzata per i confini.

Se si intende modificare un'API pubblica da ottimizzata per l'edge a regionale o viceversa, è importante notare che un'API ottimizzata per l'edge può avere comportamenti diversi rispetto a un'API regionale. Ad esempio, un'API ottimizzata per i confini rimuove l'intestazione `Content-MD5`. Qualsiasi valore MD5 hash passato al backend può essere espresso in un parametro della stringa di richiesta o in una proprietà body. Tuttavia, l'API regionale passa questa intestazione, ma può rimappare il nome di intestazione a un altro nome. La comprensione delle differenze può aiutare a scegliere come aggiornare un'API ottimizzata per l'edge in una regionale o un'API regionale in una ottimizzata per l'edge. 

**Topics**
+ [Uso della console API Gateway per modificare un tipo di endpoint API](#migrate-api-using-console)
+ [Utilizza il per modificare il tipo AWS CLI di endpoint dell'API](#migrate-api-using-aws-cli)

## Uso della console API Gateway per modificare un tipo di endpoint API
<a name="migrate-api-using-console"></a>

Per modificare il tipo di endpoint API della tua API, esegui uno dei seguenti insiemi di passaggi:

**Conversione di un endpoint pubblico da regionale o ottimizzato per l'edge e viceversa**

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

1. Scegliere una REST API.

1. Scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. In **Tipo di endpoint API**, seleziona **Ottimizzato per l'edge** o **Regionale**.

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

1. Ridistribuisci la tua API in modo che le modifiche diventino effettive.

**Per convertire un endpoint privato in un endpoint regionale**

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

1. Scegliere una REST API.

1. Modifica la politica delle risorse per la tua API per rimuovere qualsiasi menzione VPCs o endpoint VPC in modo che le chiamate API dall'esterno del tuo VPC e dall'interno del tuo VPC abbiano esito positivo.

1. Scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. In **Tipo di endpoint**, scegli**Regionale**.

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

1. Rimuovi la policy delle risorse dall'API.

1. Ridistribuisci la tua API in modo che le modifiche diventino effettive.

   Poiché stai migrando il tipo di endpoint da privato a regionale, API Gateway cambia il tipo di indirizzo IP in. IPv4 Per ulteriori informazioni, consulta [Tipi di indirizzo IP per REST API in Gateway API](api-gateway-ip-address-type.md).

**Per convertire un endpoint regionale in un endpoint privato**

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

1. Scegliere una REST API.

1. Crea una policy delle risorse che fornisca l'accesso al VPC o all'endpoint VPC. Per ulteriori informazioni, consulta [Passaggio 3: impostare una policy delle risorse per un'API privata.](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy).

1. Scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Per **Tipo di endpoint API** scegli **Privato**.

1. (Facoltativo) Per l'**endpoint VPC IDs**, seleziona l'endpoint VPC IDs che desideri associare alla tua API privata. 

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

1. Ridistribuisci la tua API in modo che le modifiche diventino effettive.

   Dal momento che si sta migrando il tipo di endpoint da regionale a privato, Gateway API modifica il tipo di indirizzo IP in dualstack. Per ulteriori informazioni, consulta [Tipi di indirizzo IP per REST API in Gateway API](api-gateway-ip-address-type.md).

## Utilizza il per modificare il tipo AWS CLI di endpoint dell'API
<a name="migrate-api-using-aws-cli"></a>

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente aggiorna un'API ottimizzata per l'edge in un'API regionale: 

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/EDGE,value=REGIONAL
```

La risposta di esito positivo ha il codice di stato `200 OK` e un payload simile al seguente:

```
{
    "createdDate": "2017-10-16T04:09:31Z",
    "description": "Your first API with Amazon API Gateway. This is a sample API that integrates via HTTP with our demo Pet Store endpoints",
    "endpointConfiguration": {
        "types": "REGIONAL"
    },
    "id": "a1b2c3",
    "name": "PetStore imported as edge-optimized"
}
```

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente aggiorna un'API regionale a un'API ottimizzata per l'edge:

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/REGIONAL,value=EDGE
```

Poiché [put-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-rest-api.html)serve per aggiornare le definizioni delle API, non è applicabile all'aggiornamento di un tipo di endpoint API.

# Politiche di sicurezza per REST APIs in API Gateway
<a name="apigateway-security-policies"></a>

Una *policy di sicurezza* è una combinazione predefinita di versione TLS minima e suite di crittografia offerta da Gateway API. Quando i client stabiliscono un handshake TLS sull’API o sul nome di dominio personalizzato, la policy di sicurezza applica la versione di TLS e il pacchetto di crittografia accettato da API Gateway. Le politiche di sicurezza proteggono i nomi di dominio dell'utente APIs e quelli personalizzati da problemi di sicurezza della rete, come la manomissione e l'intercettazione tra un client e un server.

API Gateway supporta policy di sicurezza legacy e policy di sicurezza avanzate. `TLS_1_0`e `TLS_1_2` sono politiche di sicurezza obsolete. Utilizza queste politiche di sicurezza per la compatibilità con le versioni precedenti. Qualsiasi politica che inizia con `SecurityPolicy_` è una politica di sicurezza avanzata. Utilizza queste policy per carichi di lavoro regolamentati, governance avanzata o per utilizzare la crittografia post-quantistica. Quando utilizzi una policy di sicurezza avanzata, devi anche impostare la modalità di accesso agli endpoint per una governance aggiuntiva. Per ulteriori informazioni, consulta [Modalità di accesso agli endpoint](#apigateway-security-policies-endpoint-access-mode).

## In che modo API Gateway applica le politiche di sicurezza
<a name="apigateway-security-policies-understanding"></a>

L'esempio seguente mostra come API Gateway applica le policy di `SecurityPolicy_TLS13_1_3_2025_09` sicurezza utilizzando la policy di sicurezza come esempio.

La politica `SecurityPolicy_TLS13_1_3_2025_09` di sicurezza accetta il traffico TLS 1.3 e rifiuta il traffico TLS 1.2 e TLS 1.0. Per il traffico TLS 1.3, la politica di sicurezza accetta le seguenti suite di crittografia:
+ `TLS_AES_128_GCM_SHA256`
+ `TLS_AES_256_GCM_SHA384`
+ `TLS_CHACHA20_POLY1305_SHA256`

API Gateway non accetta altre suite di crittografia. Ad esempio, la politica di sicurezza rifiuterebbe qualsiasi traffico TLS 1.3 che utilizza la suite di crittografia. `AES128-SHA` Per ulteriori informazioni sulle versioni e le crittografie TLS supportate, consulta. [Policy di sicurezza supportate](apigateway-security-policies-list.md)

Per monitorare il protocollo TLS e i client di crittografia utilizzati per accedere al tuo API Gateway, puoi utilizzare le variabili `$context.tlsVersion` e di `$context.cipherSuite` contesto nei tuoi log di accesso. Per ulteriori informazioni, consulta [Monitoraggio delle REST API in Gateway API](rest-api-monitor.md).

## Modalità di accesso agli endpoint
<a name="apigateway-security-policies-endpoint-access-mode"></a>

La modalità di accesso agli endpoint è un parametro aggiuntivo che è necessario specificare per qualsiasi REST API o nome di dominio personalizzato che utilizza una politica di sicurezza avanzata che inizia con `SecurityPolicy_`. Questa operazione viene eseguita quando si crea la risorsa o se si modifica la politica di sicurezza da una politica precedente a una politica avanzata.

Quando la modalità di accesso agli endpoint è impostata su`STRICT`, qualsiasi richiesta all'API REST o al nome di dominio personalizzato deve superare i seguenti controlli:
+ La richiesta deve provenire dallo stesso tipo di endpoint API Gateway della risorsa. Potrebbe provenire da un endpoint regionale, ottimizzato per l’edge o privato.
+ Se utilizzi un endpoint regionale o privato, API Gateway utilizza l'host matching SNI. Se utilizzi un endpoint ottimizzato per l'edge, API Gateway è conforme alla CloudFront protezione del fronting del dominio. [Per ulteriori informazioni, consulta Domain fronting.](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions)

Se una di queste condizioni non viene soddisfatta, API Gateway rifiuta la richiesta. Si consiglia di utilizzare la modalità di accesso agli `STRICT` endpoint quando possibile.

Per migrare un'API o un nome di dominio esistente per utilizzare la modalità di accesso agli endpoint rigorosa, aggiorna innanzitutto la policy di sicurezza con una policy di sicurezza avanzata e mantieni impostata la modalità di accesso agli endpoint. `BASIC` Dopo aver convalidato i registri del traffico e degli accessi, imposta la modalità di accesso agli endpoint su. `STRICT` Quando esegui la migrazione della modalità di accesso all'endpoint da `STRICT` a`BASIC`, l'endpoint non sarà disponibile per circa 15 minuti man mano che le modifiche si propagano.

Non è necessario impostare la modalità di accesso all'endpoint `STRICT` per determinate architetture applicative, ma impostare invece la modalità di accesso all'endpoint su. `BASIC` La tabella seguente mostra alcune architetture applicative e una raccomandazione per consentire all'API REST o al nome di dominio personalizzato di utilizzare la modalità di accesso agli endpoint. `STRICT`


| Architecture | Migrazione consigliata | 
| --- | --- | 
| Utilizzo di un endpoint VPC per accedere a un nome di dominio pubblico personalizzato. | Questa architettura utilizza traffico di tipo cross-endpoint. Ti consigliamo di effettuare la migrazione a. [Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md) | 
|  Utilizzo di qualsiasi metodo per richiamare un'API privata che non utilizzi un nome di dominio personalizzato o nomi DNS privati. | Questa architettura crea una mancata corrispondenza tra l'intestazione dell'host e l'SNI utilizzato nell'handshake TLS e non supera le restrizioni di fronting del dominio. CloudFront Ti consigliamo di migrare il tuo VPC per utilizzare un DNS privato. | 
| Utilizzo dello sharding del dominio per distribuire contenuti su più domini o sottodomini. | Questa architettura crea una discrepanza tra l'intestazione dell'host e l'SNI utilizzato nell'handshake TLS e non supera le restrizioni di fronting del dominio. CloudFront Ti consigliamo di utilizzare `HTTP/2` e migrare da questo anti-pattern. | 

Di seguito sono riportate alcune considerazioni sull'utilizzo della modalità di accesso agli endpoint:
+ Se la modalità di accesso all'endpoint di un'API o di un nome di dominio è`STRICT`, non puoi modificare il tipo di endpoint. Per modificare il tipo di endpoint, modifica innanzitutto la modalità di accesso all'endpoint in. `BASIC`
+ Dopo aver modificato la modalità di accesso agli endpoint da `BASIC` a`STRICT`, API Gateway impiega un ritardo di 15 minuti per applicare la modalità di accesso agli endpoint rigorosa.
+ Quando si modifica una policy di sicurezza da una policy iniziale `SecurityPolicy_` a una policy legacy, è necessario disattivare la modalità di accesso agli endpoint su. `""`

## Considerazioni
<a name="apigateway-security-policies-considerations"></a>

Di seguito sono riportate le considerazioni relative alle politiche di sicurezza per REST APIs in API Gateway:
+ È possibile importare la politica di sicurezza in un file di definizione OpenAPI. Per ulteriori informazioni, consulta [x-amazon-apigateway-endpoint-modalità di accessox-amazon-apigateway-security-politica](openapi-extensions-security-policy.md).
+ La tua API può essere mappata su un nome di dominio personalizzato con una politica di sicurezza diversa dalla tua API. Quando richiami quel nome di dominio personalizzato, API Gateway utilizza la politica di sicurezza dell'API per negoziare l'handshake TLS. Se si disabilita l’endpoint API predefinito, si potrebbe influire sul modo in cui i chiamanti possono invocare l’API.
+ Se si modifica la politica di sicurezza, il completamento dell'aggiornamento richiede circa 15 minuti. Puoi monitorare `apiStatus` la tua API. Man mano che la tua API si aggiorna, lo `apiStatus` è `UPDATING` e quando sarà completata, lo sarà`AVAILABLE`. Una volta raggiunto lo stato dell'API`UPDATING`, puoi comunque richiamarla.
+ API Gateway supporta le politiche di sicurezza su tutti APIs. Tuttavia, puoi scegliere solo una politica di sicurezza per REST APIs. API Gateway supporta solo la politica `TLS_1_2` di sicurezza per HTTP o WebSocket APIs.
+ Non è possibile aggiornare la politica di sicurezza per un'API da `TLS_1_0` a`TLS_1_2`.
+ Alcune politiche di sicurezza supportano sia le suite di crittografia ECDSA che RSA. Se si utilizza questo tipo di policy con un nome di dominio personalizzato, le suite di crittografia corrispondono al tipo di chiave di certificato fornito dal cliente, RSA o ECDSA. Se utilizzi questo tipo di policy con un'API REST, le suite di crittografia corrispondono alle suite di crittografia compatibili con i tipi di certificati RSA.

# Policy di sicurezza supportate
<a name="apigateway-security-policies-list"></a>

Le tabelle seguenti descrivono le [politiche di sicurezza](apigateway-security-policies.md) che possono essere specificate per ogni tipo di endpoint dell'API REST e tipo di nome di dominio personalizzato. Queste politiche consentono di controllare le connessioni in entrata. API Gateway supporta solo TLS 1.2 in uscita. Puoi aggiornare la politica di sicurezza per la tua API o il tuo nome di dominio personalizzato in qualsiasi momento.

Le politiche contenute `FIPS` nel titolo sono compatibili con il Federal Information Processing Standard (FIPS), uno standard governativo statunitense e canadese che specifica i requisiti di sicurezza per i moduli crittografici che proteggono le informazioni sensibili. Per ulteriori informazioni, consulta [Federal Information Processing Standard (FIPS) 140](https://aws.amazon.com/compliance/fips/) nella pagina *AWS Cloud* Security Compliance.

Tutte le politiche FIPS sfruttano il modulo crittografico convalidato FIPS AWS-LC. Per saperne di più, consulta la pagina del modulo crittografico [AWS-LC sul sito del *NIST Cryptographic* Module](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4631) Validation Program.

Le politiche contenute `PQ` nel titolo utilizzano la [crittografia post-quantistica (PQC)](https://aws.amazon.com/security/post-quantum-cryptography/) per implementare algoritmi ibridi di scambio di chiavi per TLS per garantire la riservatezza del traffico contro le future minacce informatiche quantistiche.

Le politiche contenute `PFS` nel titolo utilizzano [Perfect Forward Secrecy (PFS](https://en.wikipedia.org/wiki/Forward_secrecy)) per garantire che le chiavi di sessione non vengano compromesse.

Le politiche che le contengono entrambe `FIPS` e `PQ` nel loro titolo supportano entrambe queste funzionalità.

## Politiche di sicurezza predefinite
<a name="apigateway-security-policies-default"></a>

Quando crei una nuova API REST o un dominio personalizzato, alla risorsa viene assegnata una politica di sicurezza predefinita. La tabella seguente mostra la politica di sicurezza predefinita per queste risorse.


| **Risorsa** | **Nome della politica di sicurezza predefinita** | 
| --- | --- | 
| Regionale APIs | TLS\$11\$10 | 
| Ottimizzato per Edge APIs | TLS\$11\$10 | 
| Privato APIs | TLS\$11\$12 | 
| Dominio regionale | TLS\$11\$12 | 
| Dominio ottimizzato per Edge | TLS\$11\$12 | 
| Dominio privato | TLS\$11\$12 | 

## Politiche di sicurezza supportate per nomi di dominio regionali, privati e personalizzati APIs
<a name="apigateway-security-policies-non-edge"></a>

La tabella seguente descrive le politiche di sicurezza che possono essere specificate per i nomi di dominio regionali, privati APIs e personalizzati:


| **Policy di sicurezza** | **Versioni TLS supportate** | **Cifre supportate** | 
| --- | --- | --- | 
| SecurityPolicy\$1 \$11\$13\$12025\$109 TLS13 | TLS13. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 \$11\$13\$1FIPS\$12025\$109 TLS13 | TLS13. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 \$11\$12\$1FIPS\$1PFS\$1PQ\$12025\$109 TLS13 | TLS13. TLS12. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 TLS13 1\$12\$1PFS\$1PQ\$12025\$109 | TLS13. TLS12. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 TLS13 1\$12\$1PQ\$12025\$109 | TLS13. TLS12. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 \$11\$12\$12021\$106 TLS13 | TLS13. TLS12. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$12 | TLS13. TLS12. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$10 |  TLS13. TLS12. TLS11. TLS10.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 

## Politiche di sicurezza supportate per nomi di dominio personalizzati e ottimizzati per i dispositivi APIs periferici
<a name="apigateway-security-policies-edge-optimized"></a>

La tabella seguente descrive le politiche di sicurezza che possono essere specificate per i nomi di dominio personalizzati ottimizzati per i bordi e ottimizzati APIs per i bordi:


| **Nome della politica di sicurezza** | **Versioni TLS supportate** | **Cifre supportate** | 
| --- | --- | --- | 
| SecurityPolicy\$1 \$12025\$1EDGE TLS13 | TLS13. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 \$1PFS\$12025\$1EDGE TLS12 |  TLS13. TLS12.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1 2018 EDGE TLS12 |  TLS13. TLS12.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$10 |  TLS13. TLS12. TLS11. TLS10.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 

## OpenSSL e nomi crittografia RFC
<a name="apigateway-secure-connections-openssl-rfc-cipher-names"></a>

OpenSSL e IETF RFC 5246 utilizzano nomi diversi per le stesse crittografie. La tabella seguente mappa il nome OpenSSL al nome RFC per ogni crittografia. Per ulteriori informazioni, consultare [ciphers](https://docs.openssl.org/1.1.1/man1/ciphers/) nella documentazione OpenSSL.


| **Nome crittografia OpenSSL** | **Nome crittografia RFC** | 
| --- | --- | 
| TLS\$1AES\$1128\$1GCM\$1 SHA256 | TLS\$1AES\$1128\$1GCM\$1 SHA256 | 
| TLS\$1AES\$1256\$1GCM\$1 SHA384 | TLS\$1AES\$1256\$1GCM\$1 SHA384 | 
| TLS\$1 \$1 CHACHA20 POLY1305 SHA256 | CHACHA20TLS\$1 \$1 POLY1305 SHA256 | 
| ECDHE-RSA- -GCM- AES128 SHA256 | TLS\$1ECDHE\$1RSA\$1CON\$1AES\$1128\$1GCM\$1 SHA256 | 
| ECDHE-RSA- - AES128 SHA256 | TLS\$1ECDHE\$1RSA\$1CON\$1AES\$1128\$1CBC\$1 SHA256  | 
| ECDHE-RSA- -SHA AES128 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 
| ECDHE-RSA- AES256 -GCM- SHA384 | TLS\$1ECDHE\$1RSA\$1CON\$1AES\$1256\$1GCM\$1 SHA384  | 
| ECDHE-RSA- - AES256 SHA384 | TLS\$1ECDHE\$1RSA\$1CON\$1AES\$1256\$1CBC\$1 SHA384  | 
| ECDHE-RSA- -SHA AES256 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 
| AES128-GCM- SHA256 | TLS\$1RSA\$1CON\$1AES\$1128\$1GCM\$1 SHA256 | 
| AES256-GCM- SHA384 | TLS\$1RSA\$1CON\$1AES\$1256\$1GCM\$1 SHA384 | 
| AES128-SHA256 | TLS\$1RSA\$1CON\$1AES\$1128\$1CBC\$1 SHA256 | 
| AES256-SHA | TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 
| AES128-SHA | TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 
| DES- -SHA CBC3 | TLS\$1RSA\$1WITH\$13DES\$1EDE\$1CBC\$1SHA | 

# Come modificare una politica di sicurezza
<a name="apigateway-security-policies-update"></a>

Puoi modificare la politica di sicurezza per la tua API. Se invii traffico a te APIs tramite il tuo nome di dominio personalizzato, non è necessario che l'API e il nome di dominio personalizzato abbiano la stessa politica di sicurezza. Quando richiami quel nome di dominio personalizzato, API Gateway utilizza la politica di sicurezza dell'API per negoziare l'handshake TLS. Tuttavia, per motivi di coerenza, ti consigliamo di utilizzare la stessa politica di sicurezza per il nome di dominio e l'API personalizzati.

Se modifichi la politica di sicurezza, sono necessari circa 15 minuti per completare l'aggiornamento. Puoi monitorare `apiStatus` la tua API. Man mano che la tua API si aggiorna, lo `apiStatus` è `UPDATING` e quando sarà completata, lo sarà`AVAILABLE`. Quando la tua API viene aggiornata, puoi comunque richiamarla.

------
#### [ Console di gestione AWS ]

**Per modificare la politica di sicurezza di un'API**

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

1. Scegliere una REST API.

1. Scegliere **Impostazioni API**, quindi scegliere **Modifica**.

1. Per **Politica di sicurezza**, seleziona una nuova politica che inizi con. `SecurityPolicy_`

1. Per la **modalità di accesso agli endpoint**, scegli **Strict**.

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

   Implementa nuovamente l'API per rendere effettive le modifiche. Poiché hai modificato la modalità di accesso agli endpoint in Strict, occorreranno circa 15 minuti prima che le modifiche si propaghino completamente.

------
#### [ AWS CLI ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente aggiorna un'API per utilizzare la politica `SecurityPolicy_TLS13_1_3_2025_09` di sicurezza:

```
aws apigateway update-rest-api \
    --rest-api-id abcd1234 \
    --patch-operations '[
        {
            "op": "replace",
            "path": "/securityPolicy",
            "value": "SecurityPolicy_TLS13_1_3_2025_09"
        }, 
        {
            "op": "replace",
            "path": "/endpointAccessMode",
            "value": "STRICT"
        }
    ]'
```

L'output sarà simile al seguente:

```
{
    "id": "abcd1234",
    "name": "MyAPI",
    "description": "My API with a new security policy",
    "createdDate": "2025-02-04T11:47:06-08:00",
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "tags": {},
    "disableExecuteApiEndpoint": false,
    "securityPolicy": "SecurityPolicy_TLS13_1_3_2025_09",
    "endpointAccessMode": "STRICT"
    "rootResourceId": "efg456"
}
```

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente aggiorna un'API che utilizzava una politica di sicurezza avanzata per utilizzare la politica `TLS_1_0` di sicurezza.

```
aws apigateway update-rest-api \
    --rest-api-id abcd1234 \
    --patch-operations '[
        {
            "op": "replace",
            "path": "/securityPolicy",
            "value": "TLS_1_0"
        }, 
        {
            "op": "replace",
            "path": "/endpointAccessMode",
            "value": ""
        }
    ]'
```

L'output sarà simile al seguente:

```
{
    "id": "abcd1234",
    "name": "MyAPI",
    "description": "My API with a new security policy",
    "createdDate": "2025-02-04T11:47:06-08:00",
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "tags": {},
    "disableExecuteApiEndpoint": false,
    "securityPolicy": "TLS_1_0",
    "rootResourceId": "efg456"
}
```

------

# Tipi di indirizzo IP per REST API in Gateway API
<a name="api-gateway-ip-address-type"></a>

Quando si crea un’API, è possibile specificare il tipo di indirizzo IP che può invocarla. È possibile scegliere IPv4 per risolvere gli indirizzi IPv4 per invocare l’API oppure dualstack per consentire a entrambi gli indirizzi IPv4 e IPv6 di invocare l’API. È consigliabile impostare il tipo di indirizzo IP su dualstack per ridurre l’esaurimento dello spazio IP o per il livello di sicurezza. Per ulteriori informazioni sui vantaggi del tipo di indirizzo IP dualstack, consultare [IPv6 on AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html).

Per limitare l’API al solo traffico IPv6, è possibile creare una policy di risorse e limitare gli indirizzi IP di origine solo agli intervalli IPv6. È possibile modificare il tipo di indirizzo IP aggiornando la configurazione dell’API. Questa modifica ha effetto immediato e non è necessario implementare nuovamente l’API. Per ulteriori informazioni, consulta [Esempio: negare il traffico API in base all'indirizzo IP di origine o a un intervallo di indirizzi IP](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example)

## Considerazioni sui tipi di indirizzo IP
<a name="api-gateway-ip-address-type-considerations"></a>

Le seguenti considerazioni potrebbero influire sull’utilizzo dei tipi di indirizzo IP:
+ Il tipo di indirizzo IP predefinito per tutte le API regionali e ottimizzate l’edge è IPv4.
+ Le API private possono avere solo il tipo di indirizzo IP dualstack.
+ Se per un’API esistente si modifica il tipo di indirizzo IP da IPv4 a dualstack, è necessario verificare che tutte le policy che controllano l’accesso alle API siano aggiornate in modo da tenere conto delle chiamate IPv6. Quando si modifica il tipo di indirizzo IP, la modifica diventa immediatamente effettiva. 
+ Se si esegue la migrazione del tipo di endpoint di un’API da ottimizzato per l’edge o regionale a privato, Gateway API modifica il tipo di indirizzo IP in dualstack. Per ulteriori informazioni, consulta [Modifica di un tipo di endpoint API pubblico o privato in API Gateway](apigateway-api-migration.md).
+ Se si esegue la migrazione del tipo di endpoint di un’API da privato a regionale, è necessario impostare il tipo di indirizzo IP su dualstack. Una volta completata la migrazione dell’endpoint, è possibile modificare il tipo di indirizzo IP in IPv4. Per ulteriori informazioni, consulta [Modifica di un tipo di endpoint API pubblico o privato in API Gateway](apigateway-api-migration.md).
+ L’API può essere mappata su un nome di dominio personalizzato con un tipo di indirizzo IP diverso da quello dell’API. Se si disabilita l’endpoint API predefinito, si potrebbe influire sul modo in cui i chiamanti possono invocare l’API.
+ Non è possibile utilizzare un file di definizione esterno per configurare il tipo di indirizzo IP dell’API.

# Modifica del tipo di indirizzo IP di una REST API
<a name="api-gateway-ip-address-type-change"></a>

È possibile modificare il tipo di indirizzo IP aggiornando la configurazione dell’API. È possibile aggiornare la configurazione dell’API utilizzando la Console di gestione AWS, AWS CLI, CloudFormation o un AWS SDK. Se si modifica il tipo di indirizzo IP dell’API, non è necessario eseguire di nuovo l’implementazione dell’API per rendere effettive le modifiche. Prima di modificare il tipo di indirizzo IP, è necessario verificare che tutte le policy che controllano l’accesso alle API siano aggiornate in modo da tenere conto delle chiamate IPv6.

------
#### [ Console di gestione AWS ]

**Per modificare il tipo di indirizzo IP di una REST API**

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

1. Scegliere una REST API.

1. Scegliere **Impostazioni API**, quindi scegliere **Modifica**.

1. Per Tipo di indirizzo IP, selezionare **IPv4** o **Dualstack**.

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

   La modifica alla configurazione dell’API ha effetto immediato.

------
#### [ AWS CLI ]

Il comando [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) seguente aggiorna un’API in modo che abbia un tipo di indirizzo IP dualstack:

```
aws apigateway update-rest-api \
    --rest-api-id abcd1234 \
    --patch-operations "op='replace',path='/endpointConfiguration/ipAddressType',value='dualstack'"
```

L'output sarà simile al seguente:

```
{
    "id": "abcd1234",
    "name": "MyAPI",
    "description": "My API with a dualstack IP address type",
    "createdDate": "2025-02-04T11:47:06-08:00",
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "tags": {},
    "disableExecuteApiEndpoint": false,
    "rootResourceId": "efg456"
}
```

------

# Metodi per REST APIs in API Gateway
<a name="how-to-method-settings"></a>

 In API Gateway un metodo API include una [richiesta del metodo](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) e una [risposta del metodo](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html). È possibile configurare un metodo API per specificare le operazioni che un client deve eseguire per inviare una richiesta di accesso al servizio nel back-end e le risposte che dovrà ricevere. Per l'input puoi scegliere i parametri di richiesta del metodo o un payload applicabile per consentire al client di fornire i dati obbligatori o facoltativi al runtime. Per l'output si specifica il codice di stato della risposta del metodo, le intestazioni e il corpo applicabile come destinazioni a cui mappare i dati delle risposte di back-end prima che vengano restituite al client. Per aiutare lo sviluppatore del client a capire i comportamenti e i formati di input e output dell'API, puoi [documentare l'API](api-gateway-documenting-api.md) e [fornire messaggi di errore appropriati](api-gateway-gatewayResponse-definition.md#customize-gateway-responses) per le [richieste non valide](api-gateway-method-request-validation.md). 

Una richiesta del metodo API è una richiesta HTTP. Per configurare la richiesta del metodo, si configura un metodo (o verbo) HTTP, il percorso di una [risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) API, intestazioni e parametri di stringa di query applicabili. Se il metodo HTTP è `POST`, `PUT` o `PATCH`, devi configurare anche un payload. Ad esempio, per recuperare un animale domestico utilizzando l'[API di PetStore esempio](api-gateway-create-api-from-example.md), è necessario definire il metodo API request of`GET /pets/{petId}`, where `{petId}` è un parametro di percorso che può richiedere un numero in fase di esecuzione.

```
GET /pets/1
Host: apigateway.us-east-1.amazonaws.com
...
```

Se il client specifica un percorso non corretto, ad esempio `/pet/1` o `/pets/one` anziché `/pets/1`, viene generata un'eccezione.

Una risposta di metodo API è una risposta HTTP con un codice di stato specifico. Per un'integrazione non proxy, è necessario configurare le risposte di metodo per specificare le destinazioni obbligatorie o facoltative delle mappature. Queste trasformano il corpo o le intestazioni delle risposte di integrazione nel corpo o nelle intestazioni delle risposte del metodo associato. La mappatura può essere semplice come la [trasformazione di un'identità](https://en.wikipedia.org/wiki/Identity_transform) che trasferisce le intestazioni o il corpo tramite l'integrazione senza alcuna modifica. Ad esempio, la risposta del metodo `200` seguente mostra l'esempio di una risposta di integrazione riuscita che viene passata senza essere modificata.

```
200 OK 
Content-Type: application/json
...

{
    "id": "1",
    "type": "dog",
    "price": "$249.99"
}
```

Inizialmente puoi definire una risposta di metodo che corrisponde a una risposta specifica dal back-end. Generalmente vengono utilizzate le risposte 2XX, 4XX e 5XX. Tuttavia questo approccio potrebbe essere poco pratico perché non sempre si conoscono in anticipo le risposte che un back-end potrebbe restituire. In pratica, è possibile designare una sola risposta del metodo come predefinita per gestire le risposte non note o non mappate dal back-end. È buona norma designare la risposta 500 come predefinita. In ogni caso, devi configurare almeno una risposta del metodo per le integrazioni non proxy. In caso contrario API Gateway restituisce una risposta di errore 500 al client, anche quando la richiesta al back-end ha esito positivo.

 Per fare in modo che l'API supporti un SDK tipizzato in modo sicuro, come un SDK Java, è necessario definire il modello di dati per l'input per le richieste del metodo e il modello di dati per l'output della risposta del metodo. 

## Prerequisiti
<a name="method-setting-prerequisites"></a>

Prima di configurare un metodo API, verifica quanto segue:
+ Il metodo deve essere disponibile in API Gateway. Segui le istruzioni in [Tutorial: creazione di una REST API con un'integrazione non proxy HTTP](api-gateway-create-api-step-by-step.md).
+ Se desideri che il metodo comunichi con una funzione Lambda, devi avere già creato il ruolo di invocazione e il ruolo di esecuzione Lambda in IAM. Devi aver creato anche la funzione Lambda con cui il metodo comunicherà in AWS Lambda. Per creare ruoli e funzioni, usa le istruzioni disponibili nella sezione [Creazione di una funzione Lambda per l'integrazione non proxy Lambda](getting-started-lambda-non-proxy-integration.md#getting-started-new-lambda) dell'argomento [Scegli un tutorial di integrazione AWS Lambda](getting-started-with-lambda-integration.md). 
+ Se desideri che il metodo comunichi con un'integrazione HTTP o proxy HTTP, devi avere già creato l'URL dell'endpoint HTTP con cui il metodo comunicherà e disporre del relativo accesso.
+  Verifica che i certificati per gli endpoint HTTP e proxy HTTP siano supportati da API Gateway. Per dettagli, consulta [Autorità di certificazione supportate da Gateway API per le integrazioni HTTP e proxy HTTP in Gateway API](api-gateway-supported-certificate-authorities-for-http-endpoints.md). 

**Topics**
+ [Prerequisiti](#method-setting-prerequisites)
+ [Configurazione di una richiesta del metodo in API Gateway](api-gateway-method-settings-method-request.md)
+ [Configurazione di una risposta di metodo in Gateway API](api-gateway-method-settings-method-response.md)
+ [Configurazione di un metodo mediante la console API Gateway](how-to-set-up-method-using-console.md)

# Configurazione di una richiesta del metodo in API Gateway
<a name="api-gateway-method-settings-method-request"></a>

La configurazione di una richiesta di metodo implica l'esecuzione delle seguenti attività, dopo aver creato una [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa:

1.  Creazione di una nuova API o scelta di un'entità [Resource (Risorsa)](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) di un'API esistente. 

1.  Creazione di una risorsa [Method (Metodo)](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) dell'API rappresentata da un verbo HTTP specifico per l'entità `Resource` dell'API nuova o esistente. Puoi suddividere ulteriormente questa attività svolgendo le operazioni secondarie seguenti:
   +  Aggiungi un metodo HTTP alla richiesta del metodo
   +  Configura i parametri di richiesta
   +  Definisci un modello per il corpo della richiesta
   +  Attua uno schema di autorizzazione
   +  Abilita la convalida delle richieste 

Puoi eseguire queste attività utilizzando i metodi seguenti: 
+  [Console API Gateway](how-to-set-up-method-using-console.md#how-to-method-settings-callers-console)
+  AWS CLI [comandi ([create-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-resource.html) e put-method)](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html)
+  AWS [Funzioni SDK (ad esempio, in Node.js, [CreateResource](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html#createResource-property) e putMethod)](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html#putMethod-property)
+  API REST API Gateway ([resource:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateResource.html) e [method:put](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html)).

**Topics**
+ [Impostazione delle risorse API](#setup-method-resources)
+ [Impostazione di un metodo HTTP](#setup-method-add-http-method)
+ [Configurazione dei parametri di richiesta del metodo](#setup-method-request-parameters)
+ [Configurazione di un modello di richiesta del metodo](#setup-method-request-model)
+ [Configurazione dell'autorizzazione della richiesta del metodo](#setup-method-request-authorization)
+ [Configurazione della convalida della richiesta del metodo](#setup-method-request-validation)

## Impostazione delle risorse API
<a name="setup-method-resources"></a>

In un'API di API Gateway le risorse indirizzabili vengono esposte come una struttura di entità [Resources (Risorse)](https://docs.aws.amazon.com/apigateway/latest/api/API_GetResources.html) dell'API, con la risorsa root (`/`) nella parte più alta della gerarchia. La risorsa radice è relativa rispetto all'URL di base dell'API, costituito dall'endpoint dell'API e da un nome di fase. Nella console API Gateway questo URI di base, visualizzato nell'editor delle fasi dell'API dopo che l'API è stata distribuita, è **Invoke URI (URL chiamata)**. 

L'endpoint dell'API può essere un nome host predefinito o un nome di dominio personalizzato. Il formato del nome host predefinito è il seguente:

```
{api-id}.execute-api.{region}.amazonaws.com
```

In questo formato, *\$1api-id\$1* rappresenta l'identificatore API generato da API Gateway. La variabile `{region}` rappresenta la regione AWS (ad esempio, `us-east-1`) scelta durante la creazione dell'API. Un nome di dominio personalizzato è un nome intuitivo in un dominio Internet valido. Ad esempio se hai registrato un dominio Internet di `example.com`, qualsiasi `*.example.com` è un nome di dominio personalizzato valido. Per ulteriori informazioni, consulta l'argomento relativo alla [creazione di un nome di dominio personalizzato](how-to-custom-domains.md). 

Per l'[API PetStore di esempio](api-gateway-create-api-from-example.md), la risorsa root (`/`) espone il pet store. La risorsa `/pets` rappresenta l'insieme di animali domestici disponibili nel negozio. `/pets/{petId}` espone un singolo animale domestico di un identificatore specificato (`petId`). Il parametro di percorso di `{petId}` fa parte dei parametri di richiesta. 

Per configurare una risorsa API, scegli una risorsa esistente come padre e crea la rispettiva risorsa figlio. Inizia con la risorsa radice come padre, aggiungi una risorsa alla risorsa padre, aggiungi un'alta risorsa a questa risorsa figlio come nuovo padre e così via fino all'identificatore del padre. Quindi aggiungi la risorsa con nome alla risorsa padre. 

Il comando [get-resources](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-resources.html) seguente recupera tutte le risorse di un’API:

```
aws apigateway get-resources --rest-api-id apiId
```

Per l'API PetStore di esempio, l'output è simile al seguente:

```
{
    "items": [
        {
            "path": "/pets", 
            "resourceMethods": {
                "GET": {}
            }, 
            "id": "6sxz2j", 
            "pathPart": "pets", 
            "parentId": "svzr2028x8"
        }, 
        {
            "path": "/pets/{petId}", 
            "resourceMethods": {
                "GET": {}
            }, 
            "id": "rjkmth", 
            "pathPart": "{petId}", 
            "parentId": "6sxz2j"
        }, 
        {
            "path": "/", 
            "id": "svzr2028x8"
        }
    ]
}
```

Ogni voce elenca gli identificatori della risorsa (`id`) e, ad eccezione della risorsa radice, la rispettiva risorsa padre più prossima (`parentId`), nonché il nome della risorsa (`pathPart`). La risorsa radice ha la particolarità di non avere una risorsa padre. Dopo avere scelto una risorsa come padre, si utilizza il comando seguente per aggiungere una risorsa figlio: 

```
aws apigateway create-resource --rest-api-id apiId \
    --parent-id parentId \
    --path-part resourceName
```

Ad esempio, per aggiungere cibo per animali domestici in vendita sul PetStore sito Web, utilizza il seguente comando:

```
aws apigateway create-resource --rest-api-id a1b2c3 \
    --parent-id svzr2028x8 \
    --path-part food
```

L'output sarà simile al seguente:

```
{
    "path": "/food", 
    "pathPart": "food", 
    "id": "xdsvhp", 
    "parentId": "svzr2028x8"
}
```

### Uso di una risorsa proxy per semplificare l'impostazione dell'API
<a name="api-gateway-proxy-resource"></a>

Man mano che l'attività cresce, il PetStore proprietario può decidere di mettere in vendita cibo, giocattoli e altri articoli relativi agli animali domestici. A questo scopo, puoi aggiungere `/food`, `/toys` e altre risorse sotto la risorsa radice. Puoi anche aggiungere altre risorse sotto ogni categoria di vendita, ad esempio `/food/{type}/{item}`, `/toys/{type}/{item}` e così via. Questa operazione può risultare tediosa. Se decidi di aggiungere un livello intermedio `{subtype}` ai percorsi delle risorse per modificare la gerarchia delle risorse in `/food/{type}/{subtype}/{item}`, `/toys/{type}/{subtype}/{item}` e così via, la configurazione dell'API esistente verrà alterata. Per evitare che ciò accada, puoi usare una [risorsa proxy](api-gateway-set-up-simple-proxy.md) di API Gateway per esporre un set di risorse API tutte insieme.

API Gateway definisce una risorsa proxy come segnaposto per consentire di specificare una risorsa quando viene inviata una richiesta. È possibile esprimere una risorsa proxy mediante uno speciale parametro di percorso `{proxy+}`, spesso definito parametro di percorso greedy. Il segno `+` indica le risorse figlio aggiunte. Il segnaposto `/parent/{proxy+}` indica qualsiasi risorsa che corrisponda al modello di percorso di `/parent/*`. È possibile utilizzare qualsiasi stringa per il nome del parametro di percorso greedy.

Il comando [create-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-resource.html) seguente crea una risorsa proxy sotto la root (`/{proxy+}`):

```
aws apigateway create-resource --rest-api-id apiId \
    --parent-id rootResourceId \
    --path-part {proxy+}
```

L'output sarà simile al seguente: 

```
{
    "path": "/{proxy+}", 
    "pathPart": "{proxy+}", 
    "id": "234jdr", 
    "parentId": "svzr2028x8"
}
```

Per l'esempio API `PetStore`, puoi usare `/{proxy+}` per rappresentare sia `/pets`, sia `/pets/{petId}`. Questa risorsa proxy può anche fare riferimento a qualsiasi altra risorsa (esistente o to-be-added)`/food/{type}/{item}`, ad esempio`/toys/{type}/{item}`, ecc., oppure `/food/{type}/{subtype}/{item}``/toys/{type}/{subtype}/{item}`, ecc. Lo sviluppatore del back-end stabilisce la gerarchia delle risorse, mentre allo sviluppatore del client spetta il compito di comprenderla. API Gateway si limita a passare al back-end tutto ciò che il client ha inviato. 

Un'API può avere più di una risorsa proxy. Ad esempio, le seguenti risorse proxy sono consentite all'interno di un'API, presupponendo che `/parent/{proxy+}` non sia lo stesso elemento padre di `/parent/{child}/{proxy+}`.

```
/{proxy+}
/parent/{proxy+}
/parent/{child}/{proxy+}
```

Quando una risorsa proxy presenta elementi di pari livello non proxy, le risorse di tali elementi vengono escluse dalla rappresentazione della risorsa proxy. Per gli esempi precedenti, `/{proxy+}` si riferisce a qualsiasi risorsa al di sotto della risorsa radice, ad eccezione delle risorse `/parent[/*]`. In altri termini, una richiesta di metodo a una risorsa specifica ha la precedenza rispetto a una richiesta di metodo a una risorsa generica allo stesso livello della gerarchia di risorse.

La tabella seguente mostra come Gateway API instrada le richieste alle seguenti risorse per la fase `prod` di un’API.

```
ANY /{proxy+}
GET /pets/{proxy+}
GET /pets/dog
```


| Richiesta | Percorso selezionato | Spiegazione | 
| --- | --- | --- | 
|  `GET https://api-id.execute-api.region.amazonaws.com/prod/pets/dog`  |  `GET /pets/dog`  |  La richiesta corrisponde completamente alla risorsa.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/prod/pets/cats`  |  `GET /pets/{proxy+}`  |  La variabile di percorso greedy `/pets/{proxy+}` rileva questa richiesta.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/prod/animals`  |  `GET /{proxy+}`  |  La variabile di percorso greedy `/{proxy+}` rileva questa richiesta.  | 

Una risorsa proxy non può avere risorse figlio. Qualsiasi risorsa API dopo `{proxy+}` è ridondante e ambigua. Di seguito sono riportate risorse poxy non consentite in un'API.

```
/{proxy+}/child
/parent/{proxy+}/{child}
/parent/{child}/{proxy+}/{grandchild+}
```

## Impostazione di un metodo HTTP
<a name="setup-method-add-http-method"></a>

Una richiesta del metodo API viene incapsulata dalla risorsa [Method (Metodo)](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) di API Gateway. Per configurare la richiesta del metodo, è necessario prima creare un'istanza della risorsa `Method` impostando almeno un metodo HTTP e un tipo di autorizzazione per il metodo. 

Strettamente associato alla risorsa proxy, API Gateway supporta un metodo HTTP di `ANY`. Questo metodo `ANY` rappresenta qualsiasi metodo HTTP da fornire al runtime. Consente di utilizzare la configurazione di un solo metodo API per tutti i metodi HTTP supportati di `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST` e `PUT`. 

Puoi configurare il metodo `ANY` anche per una risorsa non proxy. Combinando il metodo `ANY` con una risorsa proxy, ottieni un'unica configurazione di un metodo API per tutti i metodi HTTP supportati con tutte le risorse di un'API. Inoltre il back-end può evolvere senza alterare la configurazione API esistente. 

 Prima di configurare un metodo API, valuta chi può chiamare il metodo. Imposta il tipo di autorizzazione in base al tuo piano. Per l'accesso aperto, impostalo su `NONE`. Per usare le autorizzazioni IAM, imposta il tipo di autorizzazione su `AWS_IAM`. Per usare una funzione di autorizzazione Lambda, imposta questa proprietà su `CUSTOM`. Per utilizzare un pool di utenti di Amazon Cognito, imposta il tipo di autorizzazione su `COGNITO_USER_POOLS`. 

Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea una richiesta di metodo per il verbo `ANY` utilizzando le autorizzazioni IAM per controllare l’accesso. 

```
aws apigateway put-method --rest-api-id vaz7da96z6 \
    --resource-id 6sxz2j \
    --http-method ANY \
    --authorization-type AWS_IAM
```

Per creare una richiesta del metodo API con un tipo di autorizzazione diverso, consulta [Configurazione dell'autorizzazione della richiesta del metodo](#setup-method-request-authorization).

## Configurazione dei parametri di richiesta del metodo
<a name="setup-method-request-parameters"></a>

I parametri di richiesta del metodo consentono a un client di fornire i dati di input o il contesto di esecuzione necessari per completare la richiesta del metodo. Un parametro di metodo può essere un parametro di percorso, un'intestazione o un parametro stringa di query. Nell'ambito della configurazione della richiesta del metodo, è necessario dichiarare i parametri di richiesta obbligatori per renderli disponibili per il client. Per l'integrazione non proxy, puoi convertire questi parametri di richiesta in un formato compatibile con i requisiti di back-end. 

Ad esempio, per la richiesta del metodo `GET /pets/{petId}`, la variabile di percorso `{petId}` è un parametro di richiesta obbligatorio. Puoi dichiarare questo parametro di percorso quando chiami il comando `put-method` di AWS CLI, Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea un metodo con un parametro di percorso obbligatorio:

```
aws apigateway put-method --rest-api-id vaz7da96z6 \
    --resource-id rjkmth \
    --http-method GET \
    --authorization-type "NONE" \
    --request-parameters method.request.path.petId=true
```

Se un parametro non è obbligatorio, puoi impostarlo su `false` in `request-parameters`. Ad esempio, se il metodo `GET /pets` usa un parametro della stringa di query `type` e un parametro dell’intestazione `age` facoltativi, è possibile dichiararli utilizzando il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente:

```
aws apigateway put-method --rest-api-id vaz7da96z6 \
    --resource-id 6sxz2j \
    --http-method GET \
    --authorization-type "NONE" \
    --request-parameters method.request.querystring.type=false,method.request.header.age=false
```

Per impostare il valore `request-parameters`, anziché questo formato abbreviato, puoi usare una stringa JSON:

```
'{"method.request.querystring.type":false,"method.request.header.age":false}'
```

Con questa configurazione, il client può eseguire query sugli animali domestici in base al tipo: 

```
GET /pets?type=dog
```

 Il client può eseguire la query sui cani cuccioli come segue:

```
GET /pets?type=dog
age:puppy
```

Per informazioni su come mappare i parametri di richiesta dei metodi ai parametri di richiesta di integrazione, consulta [Integrazioni per REST APIs in API Gateway](how-to-integration-settings.md).

## Configurazione di un modello di richiesta del metodo
<a name="setup-method-request-model"></a>

Per un metodo API che accetta dati di input in un payload, puoi usare un modello. Un modello viene espresso in una [bozza 4 dello schema JSON](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) e descrive la struttura dati del corpo della richiesta. Utilizzando un modello, un client può stabilire come costruire un payload di richiesta del metodo come input. Cosa ancora più importante è che API Gateway usa il modello per [convalidare una richiesta](api-gateway-method-request-validation.md), [generare un SDK](how-to-generate-sdk.md) e inizializzare un modello di mappatura per la configurazione dell'integrazione nella console API Gateway. Per informazioni su come creare un [modello](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html), consultare [Informazioni sui modelli di dati](models-mappings-models.md). 

A seconda del tipo di contenuto, un payload del metodo può avere formati diversi. Un modello viene indicizzato in base al tipo di supporto del payload applicato. API Gateway utilizza l'intestazione di richiesta `Content-Type` per determinare il tipo di contenuto. Per impostare i modelli di richiesta del metodo, aggiungi coppie chiave-valore del `"media-type":"model-name"` formato alla `requestModels` mappa quando chiami il AWS CLI `put-method` comando. 

Per utilizzare lo stesso modello indipendentemente dal tipo di contenuto, specifica `$default` come chiave.

[Ad esempio, per impostare un modello sul payload JSON della richiesta del `POST /pets` metodo dell'API di PetStore esempio, puoi utilizzare il seguente comando put-method:](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html)

```
aws apigateway put-method \
    --rest-api-id vaz7da96z6 \
    --resource-id 6sxz2j \
    --http-method POST \
    --authorization-type "NONE" \
    --request-models '{"application/json":"petModel"}'
```

In questo esempio `petModel` è il valore della proprietà `name` di una risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html) che descrive un animale domestico. La definizione effettiva dello schema viene espressa come valore di stringa JSON della proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html#schema](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html#schema) della risorsa `Model`. 

 In un SDK Java o in un altro SDK tipizzato in modo sicuro dell'API i dati di input vengono trasmessi come classe `petModel` derivata dalla definizione dello schema. Con il modello della richiesta i dati di input nell'SDK generato vengono trasmessi nella classe `Empty`, che è derivata dal modello `Empty` predefinito. In questo caso il client non può creare istanze della classe di dati corretta per fornire l'input richiesto. 



## Configurazione dell'autorizzazione della richiesta del metodo
<a name="setup-method-request-authorization"></a>



 Per controllare chi può chiamare il metodo API, puoi configurare il [tipo di autorizzazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizationType) per il metodo. Puoi utilizzare questo tipo per implementare una delle autorizzazioni supportate, inclusi i ruoli e le policy IAM (`AWS_IAM`), un pool di utenti di Amazon Cognito (`COGNITO_USER_POOLS`) o un'autorizzazione Lambda (`CUSTOM`).

Per utilizzare le autorizzazioni IAM per consentire l'accesso al metodo API, imposta la proprietà di input `authorization-type` su **AWS\$1IAM**. Se si imposta questa opzione, API Gateway verifica la firma del chiamante sulla richiesta in base alle credenziali del chiamante. Se l'utente verificato dispone dell'autorizzazione per chiamare il metodo, la richiesta viene accettata. In caso contrario, la richiesta viene rifiutata e il chiamante riceve una risposta di errore. La chiamata al metodo ha esito positivo solo se il chiamante dispone del permesso di richiamare il metodo API. La seguente policy IAM concede al chiamante l'autorizzazione a chiamare qualsiasi metodo API creato all'interno dello stesso Account AWS: 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": "arn:aws:execute-api:*:*:*"
        }
    ]
}
```

------

Per ulteriori informazioni, consulta [Controllo degli accessi a una REST API con le autorizzazioni IAM](permissions.md).

Attualmente, è possibile concedere questa policy solo agli utenti, ai gruppi e ai ruoli all'interno dell' Account AWS del proprietario dell'API. Gli utenti di un altro soggetto Account AWS possono chiamare i metodi dell'API solo se autorizzati ad assumere un ruolo all'interno del proprietario dell'API Account AWS con le autorizzazioni necessarie per richiamare l'azione. `execute-api:Invoke` Per informazioni sulle autorizzazioni tra account, consulta l'argomento relativo all'[uso dei ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html). 

Puoi utilizzare AWS CLI un AWS SDK o un client API REST, come [Postman](https://www.postman.com/), che implementa la [firma Signature Version 4 (SigV4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html). 

Per utilizzare un autorizzatore Lambda allo scopo di autorizzare l'accesso al metodo API, imposta la proprietà di input `authorization-type` su `CUSTOM` e la proprietà di input [https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizerId](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizerId) sul valore della proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html#id](https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html#id) di un autorizzatore Lambda esistente. L'autorizzazione Lambda di riferimento può essere di tipo `TOKEN` o `REQUEST`. Per informazioni su come creare un'autorizzazione Lambda, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).

Per usare un bacino d'utenza di Amazon Cognito per autorizzare l'accesso al metodo API, imposta la proprietà di input `authorization-type` su `COGNITO_USER_POOLS` e la proprietà di input [https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizerId](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizerId) sul valore della proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html#id](https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html#id) dell'autorizzatore `COGNITO_USER_POOLS` già creato. Per informazioni sulla creazione di un'autorizzazione per il bacino d’utenza di Amazon Cognito, consulta [Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore](apigateway-integrate-with-cognito.md).

## Configurazione della convalida della richiesta del metodo
<a name="setup-method-request-validation"></a>

Puoi abilitare la convalida della richiesta durante la configurazione di una richiesta del metodo API. È necessario creare prima un [validatore richiesta](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html): Il [create-request-validator](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-request-validator.html)comando seguente crea un validatore di richieste solo per il corpo. 

```
aws apigateway create-request-validator \
    --rest-api-id 7zw9uyk9kl \
    --name bodyOnlyValidator \
    --validate-request-body  \
    --no-validate-request-parameters
```

L'output sarà simile al seguente:

```
{
    "validateRequestParameters": false, 
    "validateRequestBody": true, 
    "id": "jgpyy6", 
    "name": "bodyOnlyValidator"
}
```

Con questo validatore richiesta è possibile utilizzare la convalida della richiesta nell’ambito della configurazione della richiesta di metodo: Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea una richiesta di metodo che richiede che il corpo della richiesta in entrata corrisponda a `PetModel` e include due parametri di richiesta non obbligatori: 

```
aws apigateway put-method \
    --rest-api-id 7zw9uyk9kl \
    --resource-id xdsvhp \
    --http-method PUT \
    --authorization-type "NONE" \
    --request-parameters '{"method.request.querystring.type": false, "method.request.querystring.page":false}' \ 
    --request-models '{"application/json":"petModel"}' \
    --request-validator-id jgpyy6
```

Per includere un parametro di richiesta nella convalida della richiesta, è necessario impostare `validateRequestParameters` su `true` per il validatore richiesta e impostare il parametro di richiesta specifico su `true` nel comando `put-method`.

# Configurazione di una risposta di metodo in Gateway API
<a name="api-gateway-method-settings-method-response"></a>

Una risposta del metodo API incapsula l'output di una richiesta del metodo API che verrà ricevuta dal client. I dati di output includono un codice di stato HTTP, alcune intestazioni ed eventualmente un corpo. 

Con le integrazioni non proxy, i parametri di risposta specificati e il corpo possono essere mappati dai dati della risposta di integrazione associati oppure possono essere assegnati determinati valori statici in base alle mappature. Queste mappature vengono specificate nella risposta di integrazione. La mappatura può essere una trasformazione identica che passa attraverso l'integrazione senza alcuna modifica.

Con un'integrazione, API Gateway passa automaticamente la risposta di back-end alla risposta del metodo. Non è necessario configurare la risposta del metodo API. Tuttavia, con l'integrazione proxy Lambda, la funzione Lambda deve restituire un risultato in [questo formato di output](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-output-format) per consentire ad API Gateway di mappare la risposta di integrazione a una risposta del metodo. 

[https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseParameters) 

Quando si impostano i codici di stato per un metodo API, è necessario sceglierne uno come predefinito per gestire le risposte di integrazione di un codice di stato non anticipato. È accettabile impostare `500` come valore predefinito perché equivale a trasmettere risposte non mappate come errore del server. Per fini dimostrativi, la console API Gateway imposta come predefinita la risposta `200`. Tuttavia puoi reimpostare il valore su `500`. 

Per configurare una risposta di metodo, devi aver creato la richiesta. 

## Configurazione dello stato del codice di una risposta di metodo
<a name="setup-method-response-status-code"></a>

Lo stato del codice di una risposta di metodo definisce un tipo di risposta. Ad esempio, le risposte 200, 400 e 500 indicano rispettivamente riposte completate, errore lato client ed errore lato server. 

Per configurare un codice di stato della risposta del metodo, imposta la proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#statusCode](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#statusCode) su un codice di stato HTTP. [put-method-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method-response.html)Il comando seguente crea la risposta del metodo`200`.

```
aws apigateway put-method-response \
    --rest-api-id vaz7da96z6 \ 
    --resource-id 6sxz2j \
    --http-method GET \
    --status-code 200
```

## Configurazione dei parametri di risposta del metodo
<a name="setup-method-response-parameters"></a>

I parametri di risposta del metodo definiscono le intestazioni che il client deve ricevere in risposta alla richiesta di metodo associata. Specificano inoltre una destinazione a cui API Gateway mappa un parametro di risposta di integrazione in base alle mappature prescritte nella risposta di integrazione del metodo API. 

Per configurare i parametri di risposta del metodo, aggiungi alla mappa [https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseParameters) di `MethodResponse` coppie chiave-valore nel formato `"{parameter-name}":"{boolean}"`. Il [put-method-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method-response.html)comando seguente imposta l'`my-header`intestazione.

```
aws apigateway put-method-response \
        --rest-api-id vaz7da96z6 \
        --resource-id 6sxz2j \
        --http-method GET \
        --status-code 200  \
        --response-parameters method.response.header.my-header=false
```

## Configurazione dei modelli di risposta del metodo
<a name="setup-method-response-models"></a>

 

 Un modello di risposta del metodo definisce un formato del corpo della risposta. La configurazione di un modello di risposta del metodo è necessaria quando si genera un SDK tipizzato in modo sicuro per l'API. Garantisce che l'output venga trasmesso in una classe appropriata in Java o Objective-C. In altri casi l'impostazione di un modello è facoltativa.

Prima di configurare il modello di risposta, è necessario creare il modello in API Gateway. A questo scopo, chiama il comando `[create-model](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-model.html)`. Il comando [create-model](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-model.html) seguente mostra come creare un modello `PetStorePet` per descrivere il corpo della risposta nella richiesta di metodo `GET /pets/{petId}`.

```
aws apigateway create-model \
    --rest-api-id vaz7da96z6 \
    --content-type application/json \
    --name PetStorePet \
    --schema '{ \
                  "$schema": "http://json-schema.org/draft-04/schema#", \
                  "title": "PetStorePet", \
                  "type": "object", \
                  "properties": { \
                    "id": { "type": "number" }, \
                    "type": { "type": "string" }, \
                    "price": { "type": "number" } \
                  } \
              }'
```

Il risultato viene creato come una risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html) di API Gateway.

Per configurare i modelli di risposta del metodo per definire il formato del payload, aggiungi la coppia chiave-valore «application/json»:» PetStorePet "alla mappa della risorsa. [https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseModels](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseModels) Il [put-method-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method-response.html)comando seguente crea un metodo di risposta che utilizza un modello di risposta per definire il formato del payload: 

```
aws apigateway put-method-response \
    --rest-api-id vaz7da96z6 \
    --resource-id 6sxz2j \
    --http-method GET \
    --status-code 200  \
    --response-parameters method.response.header.my-header=false \
    --response-models '{"application/json":"PetStorePet"}'
```

# Configurazione di un metodo mediante la console API Gateway
<a name="how-to-set-up-method-using-console"></a>

Quando si crea un metodo utilizzando la console REST API, si configura sia la richiesta di integrazione sia la richiesta del metodo. Per impostazione predefinita, Gateway API crea la risposta `200` per il metodo.

Le seguenti istruzioni mostrano come modificare le impostazioni di richiesta del metodo e come creare risposte aggiuntive per il metodo.

**Topics**
+ [Modifica di una richiesta del metodo di Gateway API nella console Gateway API](#how-to-method-settings-callers-console)
+ [Configurazione di una risposta del metodo di API Gateway tramite console API Gateway](#how-to-method-response-settings-console)

## Modifica di una richiesta del metodo di Gateway API nella console Gateway API
<a name="how-to-method-settings-callers-console"></a>

 Queste istruzioni presuppongono che la richiesta del metodo sia già stata creata. Per ulteriori informazioni su come creare un metodo, consulta [Configurazione di una richiesta di integrazione API tramite la console API Gateway](how-to-method-settings-console.md).

1. Seleziona il metodo nel riquadro **Risorse**, quindi scegli la scheda **Richiesta metodo**. 

1. Nella sezione **Impostazioni della richiesta del metodo** scegli **Modifica**.

1. Per **Autorizzazione** seleziona un sistema di autorizzazione disponibile. 

   1. Per abilitare l'accesso aperto al metodo per qualsiasi utente, scegli **Nessuno**. Questa fase può essere ignorata se l'impostazione predefinita non è stata modificata.

   1. Per utilizzare le autorizzazioni IAM per controllare l'accesso del client al metodo, scegli `AWS_IAM`. In questo modo il metodo potrà essere chiamato solo dagli utenti dei ruoli IAM a cui è collegata la policy IAM corretta. 

      Per creare il ruolo IAM, specifica una policy di accesso con un formato simile al seguente: 

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "execute-api:Invoke"
            ],
            "Resource": [
              "arn:aws:execute-api:us-east-1:111111111111:aaabbb/*/GET/"
            ]
          }
        ]
      }
      ```

------

      In questa policy di accesso, `arn:aws:execute-api:us-east-1:111111111111:aaabbb/*/GET/` è l’ARN del metodo. Per trovare l'ARN del metodo, seleziona il metodo nella pagina **Risorse**. Per ulteriori informazioni sull'impostazione delle autorizzazioni IAM, consulta [Controllo degli accessi a una REST API con le autorizzazioni IAM](permissions.md). 

      Per creare il ruolo IAM è possibile adattare le istruzioni disponibili nel tutorial [Creazione di una funzione Lambda per l'integrazione non proxy Lambda](getting-started-lambda-non-proxy-integration.md#getting-started-new-lambda). 

   1.  Per utilizzare un sistema di autorizzazione Lambda, seleziona un token o un sistema di autorizzazione di richiesta. Affinché questa scelta sia visualizzata nel menu a discesa, è necessario creare un sistema di autorizzazione Lambda. Per informazioni su come creare un'autorizzazione Lambda, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md). 

   1.  Per utilizzare un pool di utenti di Amazon Cognito, sceglierne uno disponibile in **Cognito user pool authorizers (Autorizzazioni pool di utenti Cognito)**. Affinché questa scelta sia visualizzata nel menu a discesa, è necessario creare un pool di utenti in Amazon Cognito e un'autorizzazione del pool di utenti di Amazon Cognito in API Gateway. Per informazioni su come creare un'autorizzazione del pool di utenti di Amazon Cognito, consulta [Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore](apigateway-integrate-with-cognito.md). 

1.  Per specificare la convalida della richiesta, seleziona un valore dal menu a discesa **Validatore richiesta**. Per disattivare la convalida della richiesta, seleziona **Nessuno**. Per ulteriori informazioni su ciascuna opzione, consulta [Richiedi la convalida per REST APIs in API Gateway](api-gateway-method-request-validation.md). 

1. Seleziona **Chiave API necessaria** per richiedere una chiave API. Quando sono abilitate, le chiavi API vengono utilizzate nei [piani di utilizzo](api-gateway-api-usage-plans.md) per limitare il traffico client. 

1. (Facoltativo) Per assegnare un nome di operazione in un SDK Java di questa API generata da Gateway API, immetti un nome in **Nome operazione**. Ad esempio, per la richiesta del metodo `GET /pets/{petId}`, il nome di operazione dell'SDK Java corrispondente è `GetPetsPetId` per impostazione predefinita. Questo nome viene costruito dal verbo HTTP del metodo (`GET`) e dai nomi delle variabili di percorso della risorsa (`Pets` e `PetId`). Se imposti il nome dell'operazione come `getPetById`, il nome di operazione dell'SDK diventa `GetPetById`.

1. Per aggiungere un parametro stringa di query al metodo, procedi come indicato di seguito:

   1. Scegli **Parametri della stringa di query URL**, quindi seleziona **Aggiungi stringa di query**.

   1. In **Nome** digita il nome del parametro della stringa di query.

   1. Se il parametro della stringa di query appena creato viene usato per la convalida della richiesta, scegli l'opzione **Obbligatorio**. Per ulteriori informazioni sulla convalida della richiesta, consulta [Richiedi la convalida per REST APIs in API Gateway](api-gateway-method-request-validation.md).

   1. Se il parametro della stringa di query appena creato viene usato come parte di una chiave di caching, seleziona l'opzione **Caching**. Per ulteriori informazioni sul caching, consulta [Uso dei parametri di metodo o di integrazione come chiavi di cache per indicizzare le risposte memorizzate nella cache](api-gateway-caching.md#enable-api-gateway-cache-keys).

   Per rimuovere il parametro della stringa di query, scegli **Rimuovi**. 

1. Per aggiungere un parametro di intestazione al metodo, procedi come indicato di seguito:

   1. Scegli **Intestazioni di richiesta HTTP**, quindi seleziona **Aggiungi intestazione**.

   1. Per **Nome** immetti il nome dell'intestazione.

   1. Se l'intestazione appena creata viene usata per la convalida della richiesta, scegli l'opzione **Obbligatorio**. Per ulteriori informazioni sulla convalida della richiesta, consulta [Richiedi la convalida per REST APIs in API Gateway](api-gateway-method-request-validation.md).

   1. Se l'intestazione appena creata viene usata come parte di una chiave di caching, scegli l'opzione **Caching**. Per ulteriori informazioni sul caching, consulta [Uso dei parametri di metodo o di integrazione come chiavi di cache per indicizzare le risposte memorizzate nella cache](api-gateway-caching.md#enable-api-gateway-cache-keys).

   Per rimuovere l'intestazione, scegli **Rimuovi**. 

1.  Per dichiarare il formato del payload di una richiesta di metodo con il verbo HTTP `POST`, `PUT` o `PATCH`, espandi **Corpo della richiesta** e procedi come segue: 

   1. Scegliere **Add model (Aggiungi modello)**.

   1. Per **Content-Type** immetti un tipo MIME (ad esempio `application/json`).

   1. Per **Modello** seleziona un modello dal menu a discesa. I modelli attualmente disponibili per l'API includono i modelli `Empty` ed `Error` predefiniti e tutti i modelli creati e aggiunti alla raccolta [Models (Modelli)](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html) dell'API. Per ulteriori informazioni sulla creazione di un modello, consulta [Modelli di dati per REST APIs](models-mappings-models.md). 
**Nota**  
 Il modello è utile per informare il client del formato dati previsto di un payload, nonché per generare un modello di mappatura. È importante generare un SDK tipizzato in modo sicuro dell'API in linguaggi come Java, C\$1, Objective-C e Swift. È obbligatorio solo se la convalida di richiesta è abilitata per il payload. 

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

## Configurazione di una risposta del metodo di API Gateway tramite console API Gateway
<a name="how-to-method-response-settings-console"></a>

 Un metodo API può avere una o più risposte. Ogni risposta è indicizzata dal rispettivo codice di stato HTTP. Per impostazione predefinita, la console API Gateway aggiunge la risposta `200` alle risposte di metodo. Puoi modificarla in modo che il metodo restituisca `201`. Puoi aggiungere altre risposte, ad esempio `409` per negare l'accesso e `500` per le variabili di fase non inizializzate utilizzate. 

 Per utilizzare la console API Gateway per modificare, eliminare o aggiungere una risposta a un metodo API, segui queste istruzioni.

1. Seleziona il metodo nel riquadro **Risorse**, quindi scegli la scheda **Risposta metodo**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. Nella sezione **Impostazioni risposta metodo** scegli **Crea risposta**.

1. Per **Codice di stato HTTP** inserisci un codice di stato HTTP come `200`, `400` o `500`.

    Se per una risposta restituita dal back-end non è definita una risposta del metodo corrispondente, API Gateway non è in grado di restituire la risposta al client. Restituisce invece una risposta di errore `500 Internal server error`. 

1. Seleziona **Add header (Aggiungi intestazione)**.

1.  Per **Nome intestazione** immetti un nome.

    Per restituire un'intestazione dal back-end al client, aggiungi l'intestazione nella risposta del metodo. 

1.  Scegli **Aggiungi modello** per definire un formato del corpo della risposta del metodo.

   Immetti il tipo di supporto del payload della risposta per **Tipo di contenuto** e seleziona un modello dal menu a discesa **Modelli**.

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

Per modificare una risposta esistente, passa alla risposta del metodo e scegli **Modifica**. Per modificare il **codice di stato HTTP**, scegli **Elimina** e crea una nuova risposta del metodo.

Per ogni risposta restituita dal back-end, deve essere configurata una risposta compatibile come risposta del metodo. Tuttavia le intestazioni delle risposte del metodo di configurazione e il modello di payload sono facoltativi, a meno che non si mappi il risultato dal back-end alla risposta del metodo prima della restituzione al client. Inoltre un modello di payload della risposta è importante quando si genera un SDK tipizzato in modo sicuro per l'API.

# Controlla e gestisci l'accesso a REST APIs in API Gateway
<a name="apigateway-control-access-to-api"></a>

API Gateway supporta più meccanismi per controllare e gestire l'accesso all'API.

Puoi usare i seguenti meccanismi per l'autenticazione e l'autorizzazione:
+ **Le policy relative alle risorse ti consentono di** creare policy basate sulle risorse per consentire o negare l'accesso ai tuoi metodi APIs e ai tuoi metodi da indirizzi IP di origine o endpoint VPC specifici. Per ulteriori informazioni, consulta [Controllo degli accessi a una REST API con le policy delle risorse Gateway API](apigateway-resource-policies.md).
+ **I ruoli e le policy AWS IAM standard** offrono controlli di accesso flessibili e robusti che possono essere applicati a un'intera API o a singoli metodi. I ruoli e le policy IAM possono essere utilizzati per controllare chi può creare e gestire APIs i tuoi e chi può richiamarli. Per ulteriori informazioni, consulta [Controllo degli accessi a una REST API con le autorizzazioni IAM](permissions.md).
+ I **tag IAM** possono essere utilizzati insieme alle policy IAM per controllare l'accesso. Per ulteriori informazioni, consulta [Utilizzo dei tag per controllare l'accesso alle risorse REST API di Gateway API](apigateway-tagging-iam-policy.md).
+ **Le policy degli endpoint per gli endpoint VPC di interfaccia** [ti consentono di collegare le policy delle risorse IAM agli endpoint VPC di interfaccia per migliorare la sicurezza del tuo ambiente privato. APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html) Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).
+ Le **autorizzazioni Lambda** sono funzioni Lambda che controllano l'accesso ai metodi API REST usando l'autenticazione con token di connessione, nonché le informazioni descritte da intestazioni, percorsi, stringhe di query, variabili di fase o parametri di richiesta di variabili di contesto. Le autorizzazioni Lambda vengono utilizzate per controllare chi può richiamare i metodi API REST. Per ulteriori informazioni, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).
+ I **pool di utenti di Amazon Cognito** ti consentono di creare soluzioni di autenticazione e autorizzazione personalizzabili per il tuo REST. APIs I pool di utenti di Amazon Cognito vengono utilizzati per controllare chi può richiamare i metodi delle API REST. Per ulteriori informazioni, consulta [Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore](apigateway-integrate-with-cognito.md).

Puoi utilizzare i seguenti meccanismi per l'esecuzione di altre attività correlate al controllo degli accessi:
+ La funzionalità **Cross-origin resource sharing (CORS)** consente di controllare il modo in cui l'API REST risponde alle richieste di risorse multidominio. Per ulteriori informazioni, consulta [CORS per REST APIs in API Gateway](how-to-cors.md).
+ I **certificati SSL lato client** possono essere utilizzati per verificare che le richieste HTTP al sistema back-end provengano da API Gateway. Per ulteriori informazioni, consulta [Generazione e configurazione di un certificato SSL per l'autenticazione backend in Gateway API](getting-started-client-side-ssl-authentication.md).
+ **AWS WAF** può essere utilizzato per proteggere l'API di API Gateway da exploit di Web comuni. Per ulteriori informazioni, consulta [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md).

Puoi utilizzare i seguenti meccanismi per monitorare e limitare l'accesso che è stato consentito ai client autorizzati:
+ I **piani di utilizzo** consentono di fornire **chiavi API** ai clienti e quindi di monitorare e limitare l'utilizzo delle fasi e dei metodi API per ciascuna chiave API. Per ulteriori informazioni, consulta [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md).

# Controllo degli accessi a una REST API con le policy delle risorse Gateway API
<a name="apigateway-resource-policies"></a>

Le *policy delle risorse* di Gateway Amazon API sono documenti di policy JSON collegati a un'API per controllare se un principale specificato (in genere un gruppo o un ruolo IAM) può richiamare l'API. È possibile usare le policy di risorse API Gateway per consentire alle API di essere chiamate in modo sicuro da:
+ Utenti di un AWS account specificato.
+ Intervalli di indirizzi IP sorgente specificati o blocchi CIDR.
+ Cloud privati virtuali (VPCs) o endpoint VPC specificati (in qualsiasi account).

È possibile allegare una policy di risorse per qualsiasi tipo di endpoint API in API Gateway utilizzando Console di gestione AWS la AWS CLI o. AWS SDKs In [ambito privato APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html), puoi utilizzare le policy delle risorse insieme alle policy degli endpoint VPC per controllare quali principali hanno accesso a quali risorse e azioni. Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).

 Le policy delle risorse API Gateway sono diverse dalle policy IAM basate su identità. Le policy IAM basate su identità sono collegate a utenti, gruppi o ruoli IAM e definiscono le operazioni che tali identità sono in grado di eseguire e su quali risorse. Le policy delle risorse API Gateway sono collegate alle risorse. L'utilizzo combinato delle policy delle risorse API Gateway e delle policy IAM è consentito. Per ulteriori informazioni, consultare [Identity-Based Policies and Resource-Based Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

**Topics**
+ [Panoramica della sintassi delle policy di accesso per Amazon API Gateway](apigateway-control-access-policy-language-overview.md)
+ [Come le policy delle risorse API Gateway influiscono sul flusso di lavoro delle autorizzazioni](apigateway-authorization-flow.md)
+ [Esempi di policy delle risorse API Gateway](apigateway-resource-policies-examples.md)
+ [Creazione e collegamento di una policy delle risorse API Gateway a un'API](apigateway-resource-policies-create-attach.md)
+ [AWS chiavi di condizione che possono essere utilizzate nelle politiche delle risorse di API Gateway](apigateway-resource-policies-aws-condition-keys.md)

# Panoramica della sintassi delle policy di accesso per Amazon API Gateway
<a name="apigateway-control-access-policy-language-overview"></a>

Questa pagina descrive gli elementi di base usati nelle policy per le risorse Amazon API Gateway.

Le policy delle risorse vengono specificate utilizzando la stessa sintassi delle policy IAM. Per informazioni complete sulla sintassi delle policy, consulta [Panoramica delle policy IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) e [Riferimento alle policy AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) nella *Guida per l'utente di IAM*.

Per informazioni su come un AWS servizio decide se una determinata richiesta deve essere consentita o rifiutata, vedere [Determinare se una richiesta è consentita](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) o rifiutata.

## Elementi comuni in una policy di accesso
<a name="apigateway-common-elements-in-an-access-policy"></a>

In termini basilari, una policy delle risorse contiene i seguenti elementi:
+ **Risorse**: APIs sono le risorse di Amazon API Gateway per le quali puoi consentire o negare le autorizzazioni. In una policy, utilizzare l'Amazon Resource Name (ARN) per identificare la risorsa. È inoltre possibile utilizzare la sintassi abbreviata, che API Gateway espande automaticamente fino all'ARN completo quando si salva una policy delle risorse. Per ulteriori informazioni, consulta [Esempi di policy delle risorse API Gateway](apigateway-resource-policies-examples.md).

  Per il formato dell'elemento `Resource` completo, consulta [Formato dell'elemento Resource delle autorizzazioni per l'esecuzione dell'API in API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-resource-format-for-executing-api).
+ **Azioni**: per ogni risorsa, Amazon API Gateway supporta un insieme di operazioni. Vengono identificate le operazioni delle risorse che verranno consentite (o rifiutate) utilizzando le parole chiave dell'operazione.

  Ad esempio, l'autorizzazione `execute-api:Invoke` consentirà all'utente di richiamare un'API in seguito alla richiesta di un client.

  Per il formato dell'elemento `Action`, consulta [Formato dell'elemento Action delle autorizzazioni per l'esecuzione dell'API in API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-iam-policy-action-format-for-executing-api).
+ **Effetto**: l'effetto prodotto quando l'utente richiede una determinata operazione; può essere `Allow` o `Deny`. È anche possibile rifiutare esplicitamente l'accesso a una risorsa per essere certi che un utente non sia in grado di accedervi, anche quando tale accesso è assegnato da un'altra policy. 
**Nota**  
"Rifiuto implicito" ha lo stesso significato di "rifiuto per default".  
Un "rifiuto implicito" è diverso da un "rifiuto esplicito". Per ulteriori informazioni, consulta la sezione sulla [differenza tra rifiuto per default e rifiuto esplicito](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay).
+ **Principale**: account o utente autorizzato ad accedere alle operazioni e alle risorse nell'istruzione. In una policy delle risorse, il principale è l'utente o l'account che riceve questa autorizzazione.

L'esempio di policy delle risorse seguente mostra gli elementi di policy comuni descritti in precedenza. La policy concede l'accesso all'API in base a quanto specificato *account-id* nel campo specificato *region* a qualsiasi utente il cui indirizzo IP di origine si trova nel blocco di indirizzi. *123.4.5.6/24* La policy nega l'accesso all'API se l'IP di origine dell'utente non rientra nell'intervallo.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "123.4.5.6/24"
                }
            }
        }
    ]
}
```

------

# Come le policy delle risorse API Gateway influiscono sul flusso di lavoro delle autorizzazioni
<a name="apigateway-authorization-flow"></a>

Quando API Gateway valuta la policy delle risorse collegata all'API, il risultato è influenzato dal tipo di autenticazione definito per l'API, come illustrato nei diagrammi nelle seguenti sezioni.

**Topics**
+ [Solo policy delle risorse API Gateway](#apigateway-authorization-flow-resource-policy-only)
+ [Autorizzazione Lambda e policy delle risorse](#apigateway-authorization-flow-lambda)
+ [Autenticazione IAM e policy delle risorse](#apigateway-authorization-flow-iam)
+ [Autenticazione Amazon Cognito e policy delle risorse](#apigateway-authorization-flow-cognito)
+ [Tabelle dei risultati della valutazione delle policy](#apigateway-resource-policies-iam-policies-interaction)

## Solo policy delle risorse API Gateway
<a name="apigateway-authorization-flow-resource-policy-only"></a>

In questo flusso di lavoro, una policy delle risorse API Gateway è collegata all'API, ma non viene definito alcun tipo di autenticazione per l'API. La valutazione della policy comporta la ricerca di un'autorizzazione esplicita basata sui criteri in entrata dell'intermediario. Un rifiuto implicito o esplicito comporta il rifiuto dell'intermediario.

![\[Flusso di autorizzazione solo di una policy delle risorse.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-auth-resource-policy-only.png)


Di seguito viene riportato un esempio di tale policy delle risorse.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## Autorizzazione Lambda e policy delle risorse
<a name="apigateway-authorization-flow-lambda"></a>

In questo flusso di lavoro, un'autorizzazione Lambda è configurata per l'API in aggiunta a una policy delle risorse. La policy delle risorse viene valutata in due fasi. Prima di chiamare l'autorizzazione Lambda, API Gateway valuta innanzitutto la policy e controlla la presenza di eventuali negazioni esplicite. Se riscontrati, all'intermediario viene negato subito l'accesso. In caso contrario viene chiamata l'autorizzazione Lambda, che restituisce un [documento della policy](api-gateway-lambda-authorizer-output.md) che viene valutato insieme alla policy delle risorse. Se il sistema di autorizzazione utilizza il caching, Gateway API potrebbe restituire il documento di policy memorizzato nella cache. Il risultato è determinato in base alla [tabella A](#apigateway-resource-policies-iam-policies-interaction).

La seguente policy delle risorse di esempio autorizza le chiamate solo dall'endpoint VPC il cui ID è `vpce-1a2b3c4d`. Nella fase di valutazione "pre-autorizzazione", solo le chiamate provenienti dall'endpoint VPC indicato nell'esempio sono autorizzate a proseguire e a valutare l'autorizzazione Lambda. Tutte le chiamate rimanenti vengono bloccate. Questo flusso di lavoro di autorizzazione è lo stesso se si utilizza un nome di dominio personalizzato per un’API privata.

![\[Flusso di autorizzazione per una policy delle risorse e un sistema di autorizzazione Lambda.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-auth-lambda-resource-policy.png)


------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

## Autenticazione IAM e policy delle risorse
<a name="apigateway-authorization-flow-iam"></a>

In questo flusso di lavoro, viene configurata un'autenticazione IAM per l'API in aggiunta a una policy delle risorse. Dopo l'autenticazione dell'utente con il servizio IAM, l'API valuta sia le policy collegate all'utente sia la policy delle risorse. Il risultato varia a seconda che il chiamante si trovi nello stesso account Account AWS o in un altro Account AWS, rispetto al proprietario dell'API. 

Se il chiamante e il proprietario dell'API sono in account diversi, il chiamante sarà autorizzato esplicitamente a procedere sia dalle policy dell'utente IAM sia dalla policy delle risorse. Per ulteriori informazioni, consulta la [tabella B](#apigateway-resource-policies-iam-policies-interaction). 

Tuttavia, se il chiamante e il proprietario dell'API si trovano nello stesso Account AWS, le policy dell'utente IAM o la policy delle risorse devono esplicitamente autorizzare il chiamante a proseguire. Per ulteriori informazioni, consulta la [tabella A](#apigateway-resource-policies-iam-policies-interaction).

![\[Flusso di autorizzazione per una policy delle risorse e un'autenticazione IAM.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-auth-iam-resource-policy.png)


Di seguito viene riportato un esempio di policy delle risorse multiaccount. Ipotizzando che la policy IAM contenga un'autorizzazione di questo tipo, questa policy delle risorse permette chiamate solo dal VPC il cui ID VPC è `vpc-2f09a348`. Per ulteriori informazioni, consulta la [tabella B](#apigateway-resource-policies-iam-policies-interaction).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/"
            ],
            "Condition" : {
                "StringEquals": {
                    "aws:SourceVpc": "vpc-2f09a348"
                    }
            }
        }
    ]
}
```

------

## Autenticazione Amazon Cognito e policy delle risorse
<a name="apigateway-authorization-flow-cognito"></a>

In questo flusso di lavoro, un [pool di utenti di Amazon Cognito](apigateway-integrate-with-cognito.md) è configurato per l'API in aggiunta a una policy delle risorse. API Gateway tenta innanzitutto di autenticare l'intermediario tramite Amazon Cognito. Questa operazione viene in genere eseguita tramite un [token JWT](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html) fornito dall'intermediario. Se l'autenticazione va a buon fine, la policy delle risorse viene valutata in modo indipendente ed è richiesta un'autorizzazione esplicita. Un rifiuto o "non consentire né rifiutare" si traduce in un rifiuto. Di seguito è riportato un esempio di una policy delle risorse che potrebbe essere utilizzata insieme a pool di utenti di Amazon Cognito.

![\[Flusso di autorizzazione per una policy delle risorse e un sistema di autorizzazione di Amazon Cognito.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-auth-cognito-resource-policy.png)


Di seguito è riportato un esempio di politica delle risorse che consente chiamate solo da una fonte specificata IPs, presupponendo che il token di autenticazione Amazon Cognito contenga un'autorizzazione. Per ulteriori informazioni, consulta la [tabella B](#apigateway-resource-policies-iam-policies-interaction).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:111111111111:api-id/",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

## Tabelle dei risultati della valutazione delle policy
<a name="apigateway-resource-policies-iam-policies-interaction"></a>

La tabella A riporta il comportamento risultante quando l'accesso a un'API di Gateway API è controllato da una policy IAM o da un sistema di autorizzazione Lambda e da una policy delle risorse Gateway API, entrambe nello stesso Account AWS.


| **Policy IAM (o sistema di autorizzazione Lambda)** | **Policy delle risorse Gateway API** | **Comportamento risultante** | 
| --- | --- | --- | 
| Abilita | Abilita | Abilita | 
| Abilita | Né Abilita né Rifiuta | Abilita | 
| Abilita | Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Né Abilita né Rifiuta | Abilita | Abilita | 
| Né Abilita né Rifiuta | Né Abilita né Rifiuta | Rifiuto implicito | 
| Né Abilita né Rifiuta | Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Abilita | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Né Abilita né Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Rifiuta | Explicit Deny (rifiuto esplicito) | 

La Tabella B elenca il comportamento risultante quando l'accesso a un'API API Gateway è controllato da una policy IAM o da un autorizzatore di pool di utenti di Amazon Cognito e da una policy di risorse API Gateway, che sono diversi. Account AWS Se una delle due è silente (non permette né rifiuta). l'accesso multiaccount viene negato. Questo perché l'accesso multi-account richiede l'autorizzazione esplicita all'accesso sia dalla policy delle risorse sia dalla policy IAM o dal sistema di autorizzazione del pool di utenti di Amazon Cognito.


| **Policy IAM o sistema di autorizzazione del pool di utenti di Amazon Cognito** | **Policy delle risorse Gateway API** | **Comportamento risultante** | 
| --- | --- | --- | 
| Abilita | Abilita | Abilita | 
| Abilita | Né Abilita né Rifiuta | Rifiuto implicito | 
| Abilita | Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Né Abilita né Rifiuta | Abilita | Rifiuto implicito | 
| Né Abilita né Rifiuta | Né Abilita né Rifiuta | Rifiuto implicito | 
| Né Abilita né Rifiuta | Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Abilita | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Né Abilita né Rifiuta | Explicit Deny (rifiuto esplicito) | 
| Rifiuta | Rifiuta | Explicit Deny (rifiuto esplicito) | 

# Esempi di policy delle risorse API Gateway
<a name="apigateway-resource-policies-examples"></a>

Questa pagina include alcuni esempi di casi d'uso tipici per le policy delle risorse API Gateway.

Le policy di esempio seguenti utilizzano una sintassi semplificata per specificare la risorsa API. Questa sintassi semplificata è un modo abbreviato per fare riferimento a una risorsa API, invece di specificare l'Amazon Resource Name (ARN) completo. API Gateway converte la sintassi abbreviata nell'ARN completo quando si salva la policy. Ad esempio, è possibile specificare la risorsa `execute-api:/stage-name/GET/pets` in una policy delle risorse. API Gateway converte la risorsa in `arn:aws:execute-api:us-east-2:123456789012:aabbccddee/stage-name/GET/pets` quando si salva la policy delle risorse. API Gateway crea l'ARN completo utilizzando la regione corrente, l'ID dell' AWS account e l'ID dell'API REST a cui è associata la politica delle risorse. È possibile utilizzare `execute-api:/*` per rappresentare tutti gli stadi, i metodi e i percorsi nell'API corrente. Per informazioni sulla sintassi della/e policy di accesso, consulta [Panoramica della sintassi delle policy di accesso per Amazon API Gateway](apigateway-control-access-policy-language-overview.md).

**Topics**
+ [Esempio: consentire ai ruoli di un altro AWS account di utilizzare un'API](#apigateway-resource-policies-cross-account-example)
+ [Esempio: negare il traffico API in base all'indirizzo IP di origine o a un intervallo di indirizzi IP](#apigateway-resource-policies-source-ip-address-example)
+ [Esempio: rifiutare il traffico API in base all'indirizzo IP di origine o all'intervallo quando si utilizza un'API privata](#apigateway-resource-policies-source-ip-address-vpc-example)
+ [Esempio: consenti il traffico di API private in base all'endpoint VPC o al VPC sorgente](#apigateway-resource-policies-source-vpc-example)

## Esempio: consentire ai ruoli di un altro AWS account di utilizzare un'API
<a name="apigateway-resource-policies-cross-account-example"></a>

L'esempio seguente di policy in materia di risorse concede l'accesso dell'API in un AWS account a due ruoli in un AWS account diverso tramite i protocolli [Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) (SigV4) o [Signature Version 4a (SigV4a](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html#how-sigv4a-works)). In particolare, allo sviluppatore e al ruolo di amministratore dell' AWS account identificato da `account-id-2` viene concessa l'azione per eseguire l'`execute-api:Invoke``GET`azione sulla `pets` risorsa (API) dell'account. AWS 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/developer",
                    "arn:aws:iam::111122223333:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

## Esempio: negare il traffico API in base all'indirizzo IP di origine o a un intervallo di indirizzi IP
<a name="apigateway-resource-policies-source-ip-address-example"></a>

L'esempio di policy delle risorse seguente rifiuta (blocca) il traffico in ingresso verso un'API da due blocchi di indirizzi IP di origine specificati.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
                }
            }
        }
    ]
}
```

------

Se utilizzi policy utente IAM o policy di risorse API Gateway per controllare l'accesso ad API Gateway o a qualsiasi API Gateway APIs, conferma che le policy siano aggiornate per includere intervalli di IPv6 indirizzi. Le policy che non sono aggiornate per gestire IPv6 gli indirizzi potrebbero influire sull'accesso del cliente ad API Gateway quando inizia a utilizzare l'endpoint dualstack. Per ulteriori informazioni, consulta [Utilizzo IPv6 degli indirizzi nelle politiche IAM](api-ref.md#api-reference-service-endpoints-dualstack-iam).

## Esempio: rifiutare il traffico API in base all'indirizzo IP di origine o all'intervallo quando si utilizza un'API privata
<a name="apigateway-resource-policies-source-ip-address-vpc-example"></a>

L'esempio di policy delle risorse seguente rifiuta (blocca) il traffico in ingresso verso un'API da due blocchi di indirizzi IP di origine specificati. Quando si utilizza private APIs, l'endpoint VPC `execute-api` riscrive l'indirizzo IP di origine originale. La condizione `aws:VpcSourceIp` filtra la richiesta rispetto all'indirizzo IP del richiedente originale.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "execute-api:/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:VpcSourceIp": ["192.0.2.0/24", "198.51.100.0/24"]
                }
            }
        }
    ]
}
```

------

## Esempio: consenti il traffico di API private in base all'endpoint VPC o al VPC sorgente
<a name="apigateway-resource-policies-source-vpc-example"></a>

Le seguenti policy delle risorse di esempio consentono il traffico in entrata per un'API privata solo da un VPC o da un endpoint VPC specifici.

Questa policy della risorsa di esempio specifica il VPC di origine:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                   "aws:SourceVpc": "vpc-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

Questa policy della risorsa di esempio specifica l'endpoint VPC di origine:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-1a2b3c4d"
                }
            }
        }
    ]
}
```

------

# Creazione e collegamento di una policy delle risorse API Gateway a un'API
<a name="apigateway-resource-policies-create-attach"></a>

Per consentire a un utente di accedere all'API chiamando il servizio di esecuzione dell'API, è necessario creare una policy delle risorse Gateway API e collegare la policy all'API. Il collegamento di una policy all'API comporta l'applicazione delle autorizzazioni della policy ai metodi dell'API. Se si aggiorna la policy delle risorse, è necessario implementare l'API.

**Topics**
+ [Prerequisiti](#apigateway-resource-policies-prerequisites)
+ [Collegamento di una policy delle risorse a un'API di Gateway API](#apigateway-resource-policies-create-attach-procedure)
+ [Risoluzione dei problemi relativi alla policy delle risorse](#apigateway-resource-policies-troubleshoot)

## Prerequisiti
<a name="apigateway-resource-policies-prerequisites"></a>

 Per aggiornare una policy delle risorse Gateway API, è necessario disporre delle autorizzazioni `apigateway:UpdateRestApiPolicy` e `apigateway:PATCH`.

Per un'API ottimizzata per l'edge o regionale, è possibile collegare la policy delle risorse all'API al momento della creazione o dopo che è stata implementata. Un'API privata non può essere implementata senza una policy delle risorse. Per ulteriori informazioni, consulta [REST privato APIs in API Gateway](apigateway-private-apis.md).

## Collegamento di una policy delle risorse a un'API di Gateway API
<a name="apigateway-resource-policies-create-attach-procedure"></a>

La procedura seguente mostra come collegare una policy delle risorse a un'API di Gateway API.

------
#### [ Console di gestione AWS ]

**Per collegare una policy delle risorse a un'API di API Gateway**

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Scegli **Crea policy**.

1. (Facoltativo) Scegli **Seleziona un modello** per generare una policy di esempio.

   Negli esempi di policy, i segnaposto sono racchiusi tra parentesi graffe doppie (`"{{placeholder}}"`). Sostituisci ogni segnaposto, incluse le parentesi graffe, con le informazioni necessarie.

1. Se non utilizzi uno dei modelli di esmepio, immetti la tua policy delle risorse.

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

Se l'API è stata distribuita in precedenza nella console API Gateway, sarà necessario ridistribuirla affinché la policy delle risorse diventi effettiva.

------
#### [ AWS CLI ]

Per utilizzare il AWS CLI per creare una nuova API e allegare ad essa una politica delle risorse, usa il seguente comando: [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy "{\"jsonEscapedPolicyDocument\"}"
```

Per utilizzare AWS CLI per allegare una politica delle risorse a un'API esistente, utilizzare il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente: 

```
aws apigateway update-rest-api \
    --rest-api-id api-id \
    --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```

È inoltre possibile allegare la politica delle risorse come `policy.json` file separato e includerla nel [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando. Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente crea una nuova API con una politica delle risorse:

```
aws apigateway create-rest-api \
    --name "api-name" \
    --policy file://policy.json
```

Il file `policy.json` è una policy delle risorse Gateway API, come descritto in [Esempio: negare il traffico API in base all'indirizzo IP di origine o a un intervallo di indirizzi IP](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example).

------
#### [ AWS CloudFormation ]

È possibile utilizzare CloudFormation per creare un'API con una politica delle risorse. L'esempio seguente crea una REST API con la policy delle risorse di esempio, come descritto in [Esempio: negare il traffico API in base all'indirizzo IP di origine o a un intervallo di indirizzi IP](apigateway-resource-policies-examples.md#apigateway-resource-policies-source-ip-address-example). 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: testapi
      Policy:
        Statement:
          - Action: 'execute-api:Invoke'
            Effect: Allow
            Principal: '*'
            Resource: 'execute-api:/*'
          - Action: 'execute-api:Invoke'
            Effect: Deny
            Principal: '*'
            Resource: 'execute-api:/*'
            Condition:
              IpAddress: 
                'aws:SourceIp': ["192.0.2.0/24", "198.51.100.0/24" ]
        Version: 2012-10-17		 	 	 
  Resource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'helloworld'
  MethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref Resource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: MOCK
        RequestTemplates:
          application/json: '{"statusCode": 200}'
        IntegrationResponses:
          - StatusCode: 200
            ResponseTemplates:
              application/json: '{}'
      MethodResponses:
        - StatusCode: 200
          ResponseModels:
            application/json: 'Empty'
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - MethodGet
    Properties:
      RestApiId: !Ref Api
      StageName: test
```

------

## Risoluzione dei problemi relativi alla policy delle risorse
<a name="apigateway-resource-policies-troubleshoot"></a>

La seguente guida può aiutare a risolvere i problemi relativi alla policy delle risorse.

### L'API restituisce \$1"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:\$1\$1\$1\$1\$1\$1\$1\$1/\$1\$1\$1\$1/\$1\$1\$1\$1/"\$1
<a name="apigateway-resource-policies-troubleshoot-auth"></a>

Nella politica delle risorse, se imposti il AWS Principal su un principale, ad esempio:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:role/developer",
                    "arn:aws:iam::111111111111:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

Devi utilizzare l'autorizzazione `AWS_IAM` per ogni metodo dell'API, altrimenti l'API restituirà il messaggio di errore precedente. Per ulteriori indicazioni su come attivare l'autorizzazione `AWS_IAM` per un metodo, consulta [Metodi per REST APIs in API Gateway](how-to-method-settings.md).

### La policy delle risorse non viene aggiornata
<a name="apigateway-resource-policies-troubleshoot-deploy"></a>

 Se aggiorni la policy delle risorse dopo la creazione dell'API, dovrai distribuire l'API per propagare le modifiche dopo il collegamento della policy aggiornata. L'aggiornamento o il salvataggio della policy non modificherà il comportamento di runtime dell'API. Per ulteriori informazioni sulla distribuzione della tua API, vedi [Implementazione di REST API in Gateway API](how-to-deploy-api.md). 

### La policy delle risorse restituisce il seguente errore: Invalid policy document. Please check the policy syntax and ensure that Principals are valid.
<a name="apigateway-resource-policies-troubleshoot-invalid-principal"></a>

Per correggere questo errore, è consigliabile innanzitutto controllare la sintassi della policy. Per ulteriori informazioni, consulta [Panoramica della sintassi delle policy di accesso per Amazon API Gateway](apigateway-control-access-policy-language-overview.md). Si suggerisce anche di verificare che tutti i principali specificati siano validi e non siano stati eliminati.

Inoltre, se l'API si trova in una [Regione con consenso esplicito](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#optinregion), verificare che la Regione sia abilitata per tutti gli account della policy delle risorse. 

# AWS chiavi di condizione che possono essere utilizzate nelle politiche delle risorse di API Gateway
<a name="apigateway-resource-policies-aws-condition-keys"></a>

La tabella seguente contiene le chiavi di AWS condizione che possono essere utilizzate nelle politiche delle risorse per APIs API Gateway per ogni tipo di autorizzazione.

Per ulteriori informazioni sulle chiavi AWS condizionali, consulta [AWS Global Condition Context Keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html).


| **Chiavi di condizione** | **Criteri** | **Necessita di `AuthN`?** | **Tipo di autorizzazione** | 
| --- | --- | --- | --- | 
| aws:CurrentTime | Nessuna | No | Tutti | 
| aws:EpochTime | Nessuna | No | Tutti | 
| aws:TokenIssueTime | La chiave è presente solo nelle richieste firmate utilizzando credenziali di sicurezza temporanee. | Sì | IAM | 
| aws:MultiFactorAuthPresent | La chiave è presente solo nelle richieste firmate utilizzando credenziali di sicurezza temporanee. | Sì | IAM | 
| aws:MultiFactorAuthAge | La chiave è presente solo se MFA è presente nelle richieste. | Sì | IAM | 
| aws:PrincipalAccount | Nessuna | Sì | IAM | 
| aws:PrincipalArn | Nessuna | Sì | IAM | 
| aws:PrincipalOrgID | Questa chiave viene inclusa nel contesto della richiesta solo se l'entità è membro di un'organizzazione. | Sì | IAM | 
| aws:PrincipalOrgPaths | Questa chiave viene inclusa nel contesto della richiesta solo se l'entità è membro di un'organizzazione. | Sì | IAM | 
| aws:PrincipalTag | Questa chiave è inclusa nel contesto della richiesta se l'entità utilizza un utente IAM con tag collegati. È inclusa per un'entità che utilizza un ruolo IAM con tag collegati o tag di sessione. | Sì | IAM | 
| aws:PrincipalType | Nessuna | Sì | IAM | 
| aws:Referer | La chiave è presente solo se il valore è fornito dall'intermediario nell'intestazione HTTP. | No | Tutti | 
| aws:SecureTransport | Nessuna | No | Tutti | 
| aws:SourceArn | Nessuna | No | Tutti | 
| aws:SourceIp | Nessuna | No | Tutti | 
| aws:SourceVpc | Questa chiave può essere utilizzata solo per uso privato APIs. | No | Tutti | 
| aws:SourceVpce | Questa chiave può essere usata solo per uso privato APIs. | No | Tutti | 
| aws:VpcSourceIp | Questa chiave può essere usata solo per uso privato APIs. | No | Tutti | 
| aws:UserAgent | La chiave è presente solo se il valore è fornito dall'intermediario nell'intestazione HTTP. | No | Tutti | 
| aws:userid | Nessuna | Sì | IAM | 
| aws:username | Nessuna | Sì | IAM | 

# Controllo degli accessi a una REST API con le autorizzazioni IAM
<a name="permissions"></a>

 Puoi controllare l'accesso all'API di Amazon API Gateway con le [autorizzazioni IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html) controllando l'accesso ai seguenti due processi componenti di API Gateway: 
+  Per creare, distribuire e gestire un'API in API Gateway, è necessario concedere allo sviluppatore dell'API le autorizzazioni per eseguire le operazioni richieste supportate dal componente di gestione dell'API di API Gateway. 
+  Per chiamare un'API distribuita o per aggiornare la memorizzazione nella cache dell'API, è necessario concedere all'intermediario dell'API le autorizzazioni per eseguire le operazioni IAM supportate dal componente di esecuzione dell'API di API Gateway. 

 Il controllo degli accessi per i due processi prevede l'uso dei due diversi modelli di autorizzazione illustrati più avanti.

## Modello di autorizzazione API Gateway per la creazione e la gestione di un'API
<a name="api-gateway-control-access-iam-permissions-model-for-managing-api"></a>

 Per consentire a uno sviluppatore di API di creare e gestire un'API in API Gateway, è necessario [creare le policy di autorizzazione IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) che consentono a uno sviluppatore di API specifico di creare, aggiornare, distribuire, visualizzare o eliminare le [entità API](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) richieste. È possibile collegare la policy delle autorizzazioni a un utente, un ruolo o un gruppo. 

Per fornire l’accesso, aggiungi autorizzazioni agli utenti, gruppi o ruoli:
+ Utenti e gruppi in AWS IAM Identity Center:

  Crea un set di autorizzazioni. Segui le istruzioni riportate nella pagina [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html) (Creazione di un set di autorizzazioni) nella *Guida per l’utente di AWS IAM Identity Center *.
+ Utenti gestiti in IAM tramite un provider di identità:

  Crea un ruolo per la federazione delle identità. Segui le istruzioni riportate nella pagina [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) della *Guida per l’utente IAM*.
+ Utenti IAM:
  + Crea un ruolo che l’utente possa assumere. Segui le istruzioni riportate nella pagina [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) della *Guida per l’utente IAM*.
  + (Non consigliato) Collega una policy direttamente a un utente o aggiungi un utente a un gruppo di utenti. Segui le istruzioni riportate nella pagina [Aggiunta di autorizzazioni a un utente (console)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) nella *Guida per l’utente IAM*.

Per ulteriori informazioni su come usare il modello di autorizzazione, consulta [Policy basate su identità dei API Gateway](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies). 

## Modello di autorizzazione API Gateway per invocare un'API
<a name="api-gateway-control-access-iam-permissions-model-for-calling-api"></a>

Per consentire a un chiamante dell'API di richiamare l'API o aggiornare la relativa memorizzazione nella cache, è necessario creare policy IAM che permettano al chiamante dell'API specificato di richiamare il metodo API per il quale è abilitata l'autenticazione dell'utente. Lo sviluppatore dell'API imposta la proprietà `authorizationType` del metodo su `AWS_IAM` per richiedere al chiamante di inviare le chiavi di accesso dell'utente per l'autenticazione. Gateway API supporta Signature Version 4a (SigV4a) e Signature Version 4 (SigV4) per autenticare le credenziali dell’utente. Per ulteriori informazioni, consultare [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html). Sarà quindi possibile collegare la policy all'utente, al gruppo o al ruolo. 

In questa istruzione di policy di autorizzazione IAM l'elemento IAM `Resource` contiene un elenco di metodi API distribuiti identificati da verbi HTTP e [percorsi di risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) API Gateway specifici. L'elemento IAM `Action` contiene le operazioni di esecuzione API di API Gateway richieste. Tali operazioni includono `execute-api:Invoke` o `execute-api:InvalidateCache`, dove `execute-api` designa il componente di esecuzione dell'API sottostante di API Gateway. 

Per ulteriori informazioni su come usare il modello di autorizzazione, consulta [Controllo degli accessi per invocare un'API](api-gateway-control-access-using-iam-policies-to-invoke-api.md). 

 Quando un'API è integrata con un AWS servizio (ad esempio AWS Lambda) nel backend, API Gateway deve disporre anche delle autorizzazioni per accedere a AWS risorse integrate (ad esempio, richiamando una funzione Lambda) per conto del chiamante dell'API. Per concedere queste autorizzazioni, crea un ruolo IAM del tipo **AWS service for API Gateway (Servizio AWS per API Gateway)**. Quando crei questo ruolo nella console di gestione IAM, tale ruolo contiene la policy di attendibilità IAM seguente, in base alla quale API Gateway viene dichiarato un'entità attendibile che può assumere quel ruolo: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Se crei il ruolo IAM chiamando il comando [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) della CLI o un metodo SDK corrispondente, devi fornire la policy di attendibilità precedente come parametro di input di `assume-role-policy-document`. Non tentate di creare tale policy direttamente nella console di gestione IAM o di chiamare il comando AWS CLI [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) o un metodo SDK corrispondente.

Affinché API Gateway richiami il AWS servizio integrato, devi anche associare a questo ruolo le politiche di autorizzazione IAM appropriate per la chiamata AWS ai servizi integrati. Ad esempio, per chiamare una funzione Lambda, devi includere la seguente policy di autorizzazione IAM nel ruolo IAM: 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}
```

------

Lambda supporta le policy di accesso basate su risorse, che combinano policy di autorizzazione e di attendibilità. Quando integri un'API con una funzione Lambda utilizzando la console API Gateway, non ti viene richiesto di impostare questo ruolo IAM esplicitamente, poiché la console imposta automaticamente con il tuo consenso le autorizzazioni basate su risorse sulla funzione Lambda. 

**Nota**  
 Per implementare il controllo degli accessi a un AWS servizio, puoi utilizzare il modello di autorizzazioni basato sul chiamante, in cui una policy di autorizzazione è collegata direttamente all'utente o al gruppo del chiamante, oppure il modello di autorizzazione basato sui ruoli, in cui una policy di autorizzazioni è associata a un ruolo IAM che API Gateway può assumere. Le policy di autorizzazione possono differire nei due modelli. Ad esempio la policy basata su intermediario blocca l'accesso, mentre quella basata su ruolo lo consente. Puoi trarne vantaggio per richiedere che un utente acceda a un AWS servizio solo tramite un'API API Gateway. 

# Controllo degli accessi per invocare un'API
<a name="api-gateway-control-access-using-iam-policies-to-invoke-api"></a>

In questa sezione viene illustrato il modello di autorizzazioni per controllare l'accesso all'API utilizzando le autorizzazioni IAM. Quando l'autorizzazione IAM è abilitata, i client devono utilizzare Signature Version 4a (SigV4a) e Signature Version 4 (SigV4) per firmare le loro richieste con credenziali. AWS Per ulteriori informazioni, consultare [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html).

Questa sezione illustra un modello di istruzione di policy IAM e il riferimento all’istruzione di policy. Il riferimento all'istruzione di policy include i formati dei campi `Action` e `Resource` correlati al servizio di esecuzione dell'API. Si utilizzano questi riferimenti per creare l'istruzione di policy IAM. Quando si crea l'istruzione di policy IAM, è opportuno a volte considerare il modo in cui le policy delle risorse Gateway API influiscono sul flusso di lavoro di autorizzazione. Per ulteriori informazioni, consulta [Come le policy delle risorse API Gateway influiscono sul flusso di lavoro delle autorizzazioni](apigateway-authorization-flow.md).

Per uso privato APIs, è necessario utilizzare una combinazione di una policy per le risorse di API Gateway e una policy per gli endpoint VPC. Per ulteriori informazioni, consulta i seguenti argomenti:
+ [Controllo degli accessi a una REST API con le policy delle risorse Gateway API](apigateway-resource-policies.md)
+ [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md)

## Controllo di chi può chiamare un metodo API di API Gateway con le policy IAM
<a name="api-gateway-who-can-invoke-an-api-method-using-iam-policies"></a>

 Per controllare chi può o non può chiamare un'API distribuita con le autorizzazioni IAM, crea un documento di policy IAM con le autorizzazioni richieste. Di seguito viene mostrato un modello per questo tipo di documento di policy. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Permission",
      "Action": [
        "execute-api:Execution-operation"           
      ],
      "Resource": [
        "arn:aws:execute-api:region:123456789012:api-id/stage/METHOD_HTTP_VERB/Resource-path"
      ]
    }
  ]
}
```

------

 Nell'esempio riportato `Permission` deve essere sostituito da `Allow` o da `Deny` a seconda che si desideri concedere o revocare le autorizzazioni incluse. `Execution-operation` deve essere sostituito dalle operazioni supportate dal servizio di esecuzione dell'API. `METHOD_HTTP_VERB` indica un verbo HTTP supportato dalle risorse specificate. `Resource-path` è il segnaposto per il percorso URL dell'istanza `[Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)` di un'API distribuita che supporta l'elemento `METHOD_HTTP_VERB` citato. Per ulteriori informazioni, consulta [Riferimento delle istruzioni delle policy IAM per l'esecuzione dell'API in API Gateway](#api-gateway-calling-api-permissions). 

**Nota**  
Affinché le policy IAM diventino effettive, devi avere abilitato l'autenticazione IAM sui metodi API impostando `AWS_IAM` per la proprietà `[authorizationType](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizationType)` del metodo. In caso contrario, questi metodi API saranno accessibili pubblicamente.

 Ad esempio, per concedere a un utente l'autorizzazione per visualizzare un elenco di animali domestici esposti tramite un'API specificata, rifiutandogli tuttavia l'autorizzazione per aggiungere un animale domestico all'elenco, è possibile includere nella policy IAM l'istruzione seguente: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/GET/pets"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/POST/pets"
      ]
    }
  ]
}
```

------

Per concedere a un utente l'autorizzazione per visualizzare un animale domestico specifico esposto da un'API configurata come `GET /pets/{petId}`, è possibile includere nella policy IAM l'istruzione seguente:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:111122223333:api-id/*/GET/pets/a1b2"
            ]
        }
    ]
}
```

------

## Riferimento delle istruzioni delle policy IAM per l'esecuzione dell'API in API Gateway
<a name="api-gateway-calling-api-permissions"></a>

Le informazioni seguenti descrivono il formato Action e Resource delle istruzioni di policy IAM per le autorizzazioni di accesso per l'esecuzione di un'API.

### Formato dell'elemento Action delle autorizzazioni per l'esecuzione dell'API in API Gateway
<a name="api-gateway-iam-policy-action-format-for-executing-api"></a>

Il formato generale dell'espressione `Action` di esecuzione dell'API è il seguente:

```
execute-api:action
```

dove *action* è disponibile un'azione di esecuzione dell'API:
+ **\$1**, che rappresenta tutte le operazioni che seguono.
+ **Invoke**, utilizzato per invocare un'API su richiesta del client.
+ **InvalidateCache**, utilizzato per invalidare la cache dell'API su richiesta del client.

### Formato dell'elemento Resource delle autorizzazioni per l'esecuzione dell'API in API Gateway
<a name="api-gateway-iam-policy-resource-format-for-executing-api"></a>

Il formato generale dell'espressione `Resource` di esecuzione dell'API è il seguente:

```
arn:aws:execute-api:region:account-id:api-id/stage-name/HTTP-VERB/resource-path-specifier
```

dove:
+ *region*è la AWS regione (come **us-east-1** o **\$1** per tutte le AWS regioni) che corrisponde all'API distribuita per il metodo.
+ *account-id*è l'ID dell' AWS account a 12 cifre del proprietario dell'API REST. 
+ *api-id*è l'identificatore che API Gateway ha assegnato all'API per il metodo.
+ *stage-name*è il nome dello stadio associato al metodo.
+ *HTTP-VERB*è il verbo HTTP per il metodo. Può essere uno dei seguenti: GET, POST, PUT, DELETE, PATCH.
+ *resource-path-specifier*è il percorso del metodo desiderato.

**Nota**  
Se specifichi un carattere jolly (`*`), l'espressione `Resource` applica il carattere jolly al resto dell'espressione.

Alcuni esempi dell'espressione Resource includono:
+ **arn:aws:execute-api:\$1:\$1:\$1**per qualsiasi percorso di risorsa in qualsiasi fase, per qualsiasi API in qualsiasi AWS regione.
+ **arn:aws:execute-api:us-east-1:\$1:\$1**per qualsiasi percorso di risorsa in qualsiasi fase, per qualsiasi API nella AWS regione di`us-east-1`.
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/\$1**per qualsiasi percorso di risorsa in qualsiasi fase, per l'API con l'identificatore di *api-id* nella AWS regione us-east-1.
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/`test`/\$1**per qualsiasi percorso di risorsa nella fase di`test`, per l'API con l'identificatore di *api-id* nella AWS regione us-east-1.

Per ulteriori informazioni, consulta [Documentazione di riferimento Amazon Resource Name (ARN) API Gateway](arn-format-reference.md).

# Esempi di policy IAM per le autorizzazioni di esecuzione API
<a name="api-gateway-iam-policy-examples-for-api-execution"></a>

Per informazioni sui modelli di autorizzazioni e per altre informazioni di base, consulta [Controllo degli accessi per invocare un'API](api-gateway-control-access-using-iam-policies-to-invoke-api.md).

L'istruzione di policy seguente concede all'utente l'autorizzazione di chiamare qualsiasi metodo POST nel percorso `mydemoresource`, nella fase `test`, per l'API con l'identificatore `a123456789`, presupponendo che l'API corrispondente sia stata distribuita nella regione AWS us-east-1:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/my-demo-resource-path/*"
      ]
    }
  ]
}
```

------

L'istruzione di policy di esempio seguente concede all'utente l'autorizzazione di chiamare qualsiasi metodo nel percorso di risorsa `petstorewalkthrough/pets`, in qualsiasi fase, per l'API con l'identificativo `a123456789`, in qualsiasi regione AWS in cui è stata distribuita l'API corrispondente:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:*:*:a123456789/*/*/petstorewalkthrough/pets"
      ]
    }
  ]
}
```

------

# Usa le policy degli endpoint VPC per uso privato APIs in API Gateway
<a name="apigateway-vpc-endpoint-policies"></a>

È possibile creare una policy di endpoint VPC per migliorare la sicurezza dell'API privata. Una policy di endpoint VPC è una policy delle risorse IAM che è possibile allegare all'endpoint VPC. Per ulteriori informazioni, consulta [Controllo dell'accesso ai servizi con endpoint VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

È possibile creare una policy di endpoint VPC per eseguire le seguenti attività.
+ Consentire solo a determinate organizzazioni o risorse di accedere all'endpoint VPC e invocare l'API.
+ Utilizzare un'unica policy ed evitare le policy basate sulla sessione o sul ruolo per controllare il traffico verso l'API.
+ Rafforza il perimetro di sicurezza della tua applicazione durante la migrazione da locale a. AWS

## Considerazioni sulla policy degli endpoint VPC
<a name="apigateway-vpc-endpoint-policies-considerations"></a>

Di seguito sono riportate alcune considerazioni sulla policy di endpoint VPC:
+ L'identità dell'invoker viene valutata in base al valore dell'intestazione `Authorization`. La policy di endpoint VPC viene valutata per prima, quindi Gateway API valuta la richiesta, in base al tipo di autorizzazione configurato nella richiesta di metodo. La tabella seguente mostra come viene valutata la policy di endpoint VPC in base al contenuto del valore dell’intestazione `Authorization`.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)
+ Se il controllo degli accessi dipende dall’utilizzo di un token di connessione, come un sistema di autorizzazione Lambda o Amazon Cognito, è possibile controllare il perimetro di sicurezza utilizzando le [proprietà della risorsa](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties).
+  Se i controlli di autorizzazione utilizzano l’autorizzazione IAM, è possibile controllare il perimetro di sicurezza utilizzando le [proprietà della risorsa](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties) e le [proprietà del principale](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-principal).
+ Le policy di endpoint VPC possono essere utilizzate insieme alle policy di risorse API Gateway. La policy delle risorse Gateway API specifica quali principali possono accedere all'API. La policy dell'endpoint specifica chi può accedere al VPC e chi APIs può essere chiamato dall'endpoint VPC. L'API privata richiede una policy delle risorse, ma non è necessario creare una policy di endpoint VPC personalizzata.

## Esempi di policy di endpoint VPC
<a name="apigateway-vpc-endpoint-policies-examples"></a>

È possibile creare le policy degli endpoint Amazon Virtual Private Cloud per Gateway Amazon API in cui specificare quanto segue.
+ Il principale che può eseguire azioni.
+ Le operazioni che possono essere eseguite.
+ Le risorse su cui è possibile eseguire le operazioni.

Ciò potrebbe dipendere dal contenuto dell’intestazione dell’autorizzazione. Per ulteriori informazioni, consulta [Considerazioni sulla policy degli endpoint VPC](#apigateway-vpc-endpoint-policies-considerations). Per ulteriori esempi di policy, consulta [Data perimeter](https://github.com/aws-samples/data-perimeter-policy-examples) policy examples sul sito web. GitHub 

Per collegare la policy all'endpoint VPC, è necessario utilizzare la console VPC. Per ulteriori informazioni, consulta [Controllo dell'accesso ai servizi con endpoint VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html). 

## Esempio 1: policy degli endpoint VPC che concede l'accesso a due APIs
<a name="apigateway-vpc-endpoint-policies-example-1"></a>

La seguente policy di esempio concede l'accesso solo a due specifici APIs tramite l'endpoint VPC a cui è associata la policy.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*",
                "arn:aws:execute-api:us-east-1:123412341234:aaaaa11111/*"
            ]
        }
    ]
}
```

------

## Esempio 2: policy di endpoint VPC che concede l'accesso a metodi GET
<a name="apigateway-vpc-endpoint-policies-example-2"></a>

L'esempio di policy seguente concede agli utenti l'accesso ai metodi `GET` per un'API specifica tramite l'endpoint VPC a cui è collegata l'API.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/stageName/GET/*"
            ]
        }
    ]
}
```

------

## Esempio 3: policy di endpoint VPC che concede a un utente specifico l'accesso a un'API specifica
<a name="apigateway-vpc-endpoint-policies-example-3"></a>

L'esempio di policy seguente concede a un utente specifico l'accesso a un'API specifica tramite l'endpoint VPC a cui è collegata la policy.

In questo caso, poiché la policy limita l'accesso a specifici principali IAM, è necessario impostare il valore di `authorizationType` del metodo su `AWS_IAM` o `NONE`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123412341234:user/MyUser"
                ]
            },
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*"
            ]
        }
    ]
}
```

------

## Esempio 4: policy di endpoint VPC che fornisce agli utenti l'accesso a uno specifico nome di dominio personalizzato e a tutte le API mappate al dominio
<a name="apigateway-vpc-endpoint-policies-example-4"></a>

La seguente politica di esempio consente agli utenti di accedere a uno specifico nome di dominio personalizzato per uso privato APIs tramite l'endpoint VPC a cui è allegata la policy. Con questa politica, purché un utente abbia creato un'associazione di accesso al nome di dominio tra l'endpoint VPC e il nome di dominio personalizzato e gli sia concesso l'accesso per richiamare il nome di dominio personalizzato e qualsiasi API privata mappata al nome di dominio personalizzato, l'utente può richiamare qualsiasi APIs mappato su questo nome di dominio personalizzato. Per ulteriori informazioni, consulta [Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "*"
      ],
       "Condition": {
        "ArnEquals": {
          "execute-api:viaDomainArn": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        }
      }
    }
  ]
}
```

------

## Esempio 5: policy degli endpoint VPC che concede o nega l'accesso a risorse specifiche e di dominio APIs
<a name="apigateway-vpc-endpoint-policies-example-5"></a>

La seguente politica di esempio concede agli utenti l'accesso a risorse specifiche e di dominio. APIs Con questa politica, purché un utente abbia creato un'associazione di accesso al nome di dominio tra l'endpoint VPC e il nome di dominio personalizzato e gli sia concesso l'accesso per richiamare il nome di dominio personalizzato e qualsiasi API privata mappata al nome di dominio personalizzato, l'utente può richiamare le risorse private e di dominio consentite. APIs Per ulteriori informazioni, consulta [Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/*"
      ]
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/admin/*",
        "arn:aws:execute-api:us-west-2:111122223333:bcd123455/*"
      ]
    }
  ]
}
```

------

## Esempio 6: policy di endpoint VPC che fornisce o nega l’accesso a principali e risorse di un’organizzazione
<a name="apigateway-vpc-endpoint-policies-example-6"></a>

La seguente policy di esempio fornisce l’accesso ai principali e alle risorse di un’organizzazione.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceOrgID": "o-abcd1234",
                    "aws:PrincipalOrgID": "o-abcd1234"
                }
            },
            "Action": "*",
            "Resource": "*",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources"
        }
    ]
}
```

------

# Usa i tag per controllare l'accesso a REST APIs in API Gateway
<a name="apigateway-control-access-tags"></a>

L'autorizzazione ad accedere a REST APIs può essere ottimizzata utilizzando il controllo degli accessi basato sugli attributi nelle policy IAM.

Per ulteriori informazioni, consulta [Utilizzo dei tag per controllare l'accesso alle risorse REST API di Gateway API](apigateway-tagging-iam-policy.md).

# Uso di autorizzazioni Lambda di API Gateway
<a name="apigateway-use-lambda-authorizer"></a>

Usa un *sistema di autorizzazione Lambda* (noto in precedenza come *sistema di autorizzazione ad hoc*) per controllare l'accesso all'API. Quando un client effettua una richiesta al metodo dell’API, Gateway API chiama il sistema di autorizzazione Lambda. Il sistema di autorizzazione Lambda accetta l'identità del chiamante come input e restituisce una policy IAM come output.

Usa un sistema di autorizzazione Lambda per implementare uno schema di autorizzazione personalizzato. Il tuo schema può utilizzare i parametri di richiesta per determinare l'identità del chiamante o utilizzare una strategia di autenticazione con token portatore come OAuth o SAML. Crea un autorizzatore Lambda nella console API REST di API Gateway, utilizzando o un AWS CLI SDK. AWS 

## Flusso di lavoro di autorizzazione per il sistema di autorizzazione Lambda
<a name="api-gateway-lambda-authorizer-flow"></a>

Il diagramma seguente mostra il flusso di lavoro di autorizzazione per un sistema di autorizzazione Lambda.

![\[Flusso di lavoro per le autorizzazioni Lambda di API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/custom-auth-workflow.png)


**Flusso di lavoro per le autorizzazioni Lambda di API Gateway**

1. Il client chiama un metodo in un'API di Gateway API, passando un token di connessione o i parametri della richiesta.

1. Gateway API verifica se la richiesta di metodo è configurata con un sistema di autorizzazione Lambda. In tal caso, API Gateway chiama la funzione Lambda.

1. La funzione Lambda autentica il chiamante. La funzione può eseguire l'autenticazione nei modi seguenti:
   + Chiamando un OAuth provider per ottenere un OAuth token di accesso.
   + Chiamando un provider SAML per ottenere un'asserzione SAML.
   + Generando una policy IAM in base ai valori dei parametri della richiesta.
   + Recuperando le credenziali da un database.

1. La funzione Lambda restituisce una policy IAM e un identificatore principale. Se la funzione Lambda non restituisce tali informazioni, la chiamata ha esito negativo. 

1. Gateway API valuta la policy IAM.
   + Se l'accesso viene negato, Gateway API restituisce un codice di stato HTTP appropriato, ad esempio `403 ACCESS_DENIED`.
   + Se l'accesso viene concesso, Gateway API invoca il metodo. 

     Se si abilita il caching delle autorizzazioni, Gateway API memorizza la policy nella cache in modo che non venga invocata nuovamente la funzione del sistema di autorizzazione Lambda. È necessario assicurarsi che la policy sia applicabile a tutte le risorse e ai metodi dell’API.

È possibile personalizzare le risposte `403 ACCESS_DENIED` o `401 UNAUTHORIZED` del gateway. Per ulteriori informazioni, consulta [Risposte gateway per REST APIs in API Gateway](api-gateway-gatewayResponse-definition.md).

## Scelta di un tipo di sistema di autorizzazione Lambda
<a name="api-gateway-lambda-authorizer-choose"></a>

Esistono due tipi di autorizzazioni Lambda:

**Sistema di autorizzazione Lambda basato sui parametri della richiesta (sistema di autorizzazione `REQUEST`)**  
Un sistema di autorizzazione `REQUEST` riceve l'identità del chiamante in una combinazione di intestazioni, parametri della stringa di query, [`stageVariables`](api-gateway-mapping-template-reference.md#stagevariables-template-reference) e variabili [`$context`](api-gateway-mapping-template-reference.md#context-variable-reference). È possibile utilizzare un sistema di autorizzazione `REQUEST` per creare policy dettagliate in base a informazioni provenienti da più origini di identità, ad esempio le variabili di contesto `$context.path` e `$context.httpMethod`.  
Se attivi il caching delle autorizzazioni per un sistema di autorizzazione `REQUEST`, Gateway API verifica che nella richiesta siano presenti tutte le origini di identità specificate. Se un'origine di identità specificata non è presente, è null o è vuota, Gateway API restituisce una risposta HTTP `401 Unauthorized` senza chiamare la funzione del sistema di autorizzazione Lambda. Quando sono definite più origini di identità, vengono utilizzate tutte per derivare la chiave cache del sistema di autorizzazione, mantenendo l'ordine. È possibile definire una chiave di cache dettagliata utilizzando più origini di identità.  
Se modifichi qualsiasi parte della chiave di cache, il sistema di autorizzazione rimuove il documento di policy memorizzato nella cache e ne generano uno nuovo.  
Se disattivi il caching delle autorizzazioni per un sistema di autorizzazione `REQUEST`, Gateway API passa direttamente la richiesta alla funzione Lambda. 

**Sistema di autorizzazione Lambda basato su token (sistema di autorizzazione `TOKEN`)**  
Un `TOKEN` autorizzatore riceve l'identità del chiamante in un token portante, ad esempio un JSON Web Token (JWT) o un token. OAuth   
Se attivi il caching delle autorizzazioni per un sistema di autorizzazione `TOKEN`, il nome dell'intestazione specificato nell'origine token diventa la chiave di cache.   
Inoltre, puoi utilizzare la convalida dei token per inserire una dichiarazione. RegEx Gateway API esegue la convalida iniziale del token di input per l'espressione e, se la convalida ha esito positivo, invoca la funzione del sistema di autorizzazione Lambda. Ciò aiuta a ridurre le chiamate all'API.   
La proprietà `IdentityValidationExpression` è supportata solo per i sistemi di autorizzazione `TOKEN`. Per ulteriori informazioni, consulta [x-amazon-apigateway-authorizer oggetto](api-gateway-swagger-extensions-authorizer.md).

**Nota**  
È consigliabile utilizzare un sistema di autorizzazione `REQUEST` per controllare l'accesso all'API. Puoi controllare l'accesso all'API in base a più origini di identità quando usi un sistema di autorizzazione `REQUEST` e in base a una singola origine di identità quando usi un sistema di autorizzazione `TOKEN`. Inoltre, puoi separare le chiavi di cache utilizzando più origini di identità per un sistema di autorizzazione `REQUEST`.

## Esempio di funzione del sistema di autorizzazione `REQUEST` Lambda
<a name="api-gateway-lambda-authorizer-request-lambda-function-create"></a>

Il codice di esempio seguente crea una funzione del sistema di autorizzazione Lambda che consente una richiesta se l'intestazione `HeaderAuth1` fornita dal client, il parametro di query `QueryString1` e la variabile di fase di `StageVar1` corrispondono, rispettivamente, ai valori specificati di `headerValue1`, `queryValue1` e `stageValue1`. 

------
#### [ Node.js ]

```
// A simple request-based authorizer example to demonstrate how to use request 
// parameters to allow or deny a request. In this example, a request is  
// authorized if the client-supplied HeaderAuth1 header, QueryString1
// query parameter, and stage variable of StageVar1 all match
// specified values of 'headerValue1', 'queryValue1', and 'stageValue1',
// respectively.
    
export const handler = function(event, context, callback) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    
    // Retrieve request parameters from the Lambda function input:
    var headers = event.headers;
    var queryStringParameters = event.queryStringParameters;
    var pathParameters = event.pathParameters;
    var stageVariables = event.stageVariables;
        
    // Parse the input for the parameter values
    var tmp = event.methodArn.split(':');
    var apiGatewayArnTmp = tmp[5].split('/');
    var awsAccountId = tmp[4];
    var region = tmp[3];
    var restApiId = apiGatewayArnTmp[0];
    var stage = apiGatewayArnTmp[1];
    var method = apiGatewayArnTmp[2];
    var resource = '/'; // root resource
    if (apiGatewayArnTmp[3]) {
        resource += apiGatewayArnTmp[3];
    }
        
    // Perform authorization to return the Allow policy for correct parameters and 
    // the 'Unauthorized' error, otherwise.

     
    if (headers.HeaderAuth1 === "headerValue1"
        && queryStringParameters.QueryString1 === "queryValue1"
        && stageVariables.StageVar1 === "stageValue1") {
        callback(null, generateAllow('me', event.methodArn));
    }  else {
        callback(null, generateDeny('me', event.methodArn));
    }
}
     
// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
    // Required output:
    var authResponse = {};
    authResponse.principalId = principalId;
    if (effect && resource) {
        var policyDocument = {};
        policyDocument.Version = '2012-10-17'; // default version
        policyDocument.Statement = [];
        var statementOne = {};
        statementOne.Action = 'execute-api:Invoke'; // default action
        statementOne.Effect = effect;
        statementOne.Resource = resource;
        policyDocument.Statement[0] = statementOne;
        authResponse.policyDocument = policyDocument;
    }
    // Optional output with custom properties of the String, Number or Boolean type.
    authResponse.context = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": true
    };
    return authResponse;
}
     
var generateAllow = function(principalId, resource) {
    return generatePolicy(principalId, 'Allow', resource);
}
     
var generateDeny = function(principalId, resource) {
    return generatePolicy(principalId, 'Deny', resource);
}
```

------
#### [ Python ]

```
# A simple request-based authorizer example to demonstrate how to use request
# parameters to allow or deny a request. In this example, a request is
# authorized if the client-supplied headerauth1 header, QueryString1
# query parameter, and stage variable of StageVar1 all match
# specified values of 'headerValue1', 'queryValue1', and 'stageValue1',
# respectively.

def lambda_handler(event, context):
    print(event)

    # Retrieve request parameters from the Lambda function input:
    headers = event['headers']
    queryStringParameters = event['queryStringParameters']
    pathParameters = event['pathParameters']
    stageVariables = event['stageVariables']

    # Parse the input for the parameter values
    tmp = event['methodArn'].split(':')
    apiGatewayArnTmp = tmp[5].split('/')
    awsAccountId = tmp[4]
    region = tmp[3]
    restApiId = apiGatewayArnTmp[0]
    stage = apiGatewayArnTmp[1]
    method = apiGatewayArnTmp[2]
    resource = '/'

    if (apiGatewayArnTmp[3]):
        resource += apiGatewayArnTmp[3]

    # Perform authorization to return the Allow policy for correct parameters
    # and the 'Unauthorized' error, otherwise.

    if (headers['HeaderAuth1'] == "headerValue1" and queryStringParameters['QueryString1'] == "queryValue1" and stageVariables['StageVar1'] == "stageValue1"):
        response = generateAllow('me', event['methodArn'])
        print('authorized')
        return response
    else:
        print('unauthorized')
        response = generateDeny('me', event['methodArn'])
        return response
    # Help function to generate IAM policy


def generatePolicy(principalId, effect, resource):
    authResponse = {}
    authResponse['principalId'] = principalId
    if (effect and resource):
        policyDocument = {}
        policyDocument['Version'] = '2012-10-17'
        policyDocument['Statement'] = []
        statementOne = {}
        statementOne['Action'] = 'execute-api:Invoke'
        statementOne['Effect'] = effect
        statementOne['Resource'] = resource
        policyDocument['Statement'] = [statementOne]
        authResponse['policyDocument'] = policyDocument

    authResponse['context'] = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": True
    }

    return authResponse


def generateAllow(principalId, resource):
    return generatePolicy(principalId, 'Allow', resource)


def generateDeny(principalId, resource):
    return generatePolicy(principalId, 'Deny', resource)
```

------

In questo esempio, la funzione di autorizzazione Lambda controlla i parametri di input e si comporta nel modo seguente:
+ Se tutti i valori dei parametri richiesti corrispondono ai valori previsti, la funzione di autorizzazione restituisce una risposta HTTP `200 OK` e una policy IAM simile alla seguente e la richiesta del metodo ha esito positivo:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
+ In caso contrario, la funzione del sistema di autorizzazione restituisce una risposta HTTP `401 Unauthorized` e la richiesta di metodo ha esito negativo.

Oltre a restituire una policy IAM, la funzione di autorizzazione Lambda deve restituire anche l'identificatore dell'entità principale dell'intermediario. Facoltativamente, può restituire un oggetto `context` contenente informazioni aggiuntive che possono essere passate al backend di integrazione. Per ulteriori informazioni, consulta [Output da un sistema di autorizzazione Lambda di Gateway API](api-gateway-lambda-authorizer-output.md).

Nel codice di produzione può essere necessario autenticare l'utente prima di concedere l'autorizzazione. Puoi aggiungere una logica di autenticazione nella funzione Lambda chiamando un provider di autenticazione come indicato nella documentazione del provider.

## Esempio di funzione del sistema di autorizzazione `TOKEN` Lambda
<a name="api-gateway-lambda-authorizer-token-lambda-function-create"></a>

Il codice di esempio seguente crea una funzione di autorizzazione `TOKEN` Lambda che consente a un chiamante di invocare un metodo se il valore del token fornito dal client è `allow`. Al chiamante non è consentito invocare la richiesta se il valore del token è `deny`. Se il valore del token è `unauthorized` o una stringa vuota, la funzione del sistema di autorizzazione restituisce una risposta `401 UNAUTHORIZED`.

------
#### [ Node.js ]

```
// A simple token-based authorizer example to demonstrate how to use an authorization token 
// to allow or deny a request. In this example, the caller named 'user' is allowed to invoke 
// a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke 
// the request if the token value is 'deny'. If the token value is 'unauthorized' or an empty
// string, the authorizer function returns an HTTP 401 status code. For any other token value, 
// the authorizer returns an HTTP 500 status code. 
// Note that token values are case-sensitive.

export const handler =  function(event, context, callback) {
    var token = event.authorizationToken;
    switch (token) {
        case 'allow':
            callback(null, generatePolicy('user', 'Allow', event.methodArn));
            break;
        case 'deny':
            callback(null, generatePolicy('user', 'Deny', event.methodArn));
            break;
        case 'unauthorized':
            callback("Unauthorized");   // Return a 401 Unauthorized response
            break;
        default:
            callback("Error: Invalid token"); // Return a 500 Invalid token response
    }
};

// Help function to generate an IAM policy
var generatePolicy = function(principalId, effect, resource) {
    var authResponse = {};
    
    authResponse.principalId = principalId;
    if (effect && resource) {
        var policyDocument = {};
        policyDocument.Version = '2012-10-17'; 
        policyDocument.Statement = [];
        var statementOne = {};
        statementOne.Action = 'execute-api:Invoke'; 
        statementOne.Effect = effect;
        statementOne.Resource = resource;
        policyDocument.Statement[0] = statementOne;
        authResponse.policyDocument = policyDocument;
    }
    
    // Optional output with custom properties of the String, Number or Boolean type.
    authResponse.context = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": true
    };
    return authResponse;
}
```

------
#### [ Python ]

```
# A simple token-based authorizer example to demonstrate how to use an authorization token
# to allow or deny a request. In this example, the caller named 'user' is allowed to invoke
# a request if the client-supplied token value is 'allow'. The caller is not allowed to invoke
# the request if the token value is 'deny'. If the token value is 'unauthorized' or an empty
# string, the authorizer function returns an HTTP 401 status code. For any other token value,
# the authorizer returns an HTTP 500 status code.
# Note that token values are case-sensitive.

import json


def lambda_handler(event, context):
    token = event['authorizationToken']
    if token == 'allow':
        print('authorized')
        response = generatePolicy('user', 'Allow', event['methodArn'])
    elif token == 'deny':
        print('unauthorized')
        response = generatePolicy('user', 'Deny', event['methodArn'])
    elif token == 'unauthorized':
        print('unauthorized')
        raise Exception('Unauthorized')  # Return a 401 Unauthorized response
        return 'unauthorized'
    try:
        return json.loads(response)
    except BaseException:
        print('unauthorized')
        return 'unauthorized'  # Return a 500 error


def generatePolicy(principalId, effect, resource):
    authResponse = {}
    authResponse['principalId'] = principalId
    if (effect and resource):
        policyDocument = {}
        policyDocument['Version'] = '2012-10-17'
        policyDocument['Statement'] = []
        statementOne = {}
        statementOne['Action'] = 'execute-api:Invoke'
        statementOne['Effect'] = effect
        statementOne['Resource'] = resource
        policyDocument['Statement'] = [statementOne]
        authResponse['policyDocument'] = policyDocument
    authResponse['context'] = {
        "stringKey": "stringval",
        "numberKey": 123,
        "booleanKey": True
    }
    authResponse_JSON = json.dumps(authResponse)
    return authResponse_JSON
```

------

In questo esempio, quando l'API riceve una richiesta del metodo, API Gateway passa il token di origine alla funzione di autorizzazione Lambda nell'attributo `event.authorizationToken`. La funzione di autorizzazione Lambda legge il token e si comporta nel modo seguente:
+ Se il valore del token è `allow`, la funzione di autorizzazione restituisce una risposta HTTP `200 OK` e una policy IAM simile alla seguente e la richiesta del metodo ha esito positivo:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
+ Se il valore del token è `deny`, la funzione di autorizzazione restituisce una risposta HTTP `200 OK` e una policy IAM `Deny` simile alla seguente e la richiesta del metodo ha esito negativo:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
      }
    ]
  }
  ```

------
**Nota**  
Esternamente all'ambiente di test, Gateway API restituisce una risposta HTTP `403 Forbidden` e la richiesta di metodo ha esito negativo.
+ Se il valore del token è `unauthorized` o una stringa vuota, la funzione del provider di autorizzazione restituisce una risposta HTTP `401 Unauthorized` e la chiamata al metodo ha esito negativo.
+ Se il token ha un valore diverso dai precedenti, il client riceve una risposta `500 Invalid token` e la chiamata al metodo ha esito negativo.

Oltre a restituire una policy IAM, la funzione di autorizzazione Lambda deve restituire anche l'identificatore dell'entità principale dell'intermediario. Facoltativamente, può restituire un oggetto `context` contenente informazioni aggiuntive che possono essere passate al backend di integrazione. Per ulteriori informazioni, consulta [Output da un sistema di autorizzazione Lambda di Gateway API](api-gateway-lambda-authorizer-output.md).

Nel codice di produzione può essere necessario autenticare l'utente prima di concedere l'autorizzazione. Puoi aggiungere una logica di autenticazione nella funzione Lambda chiamando un provider di autenticazione come indicato nella documentazione del provider.

## Esempi aggiuntivi di funzioni del sistema di autorizzazione Lambda
<a name="api-gateway-lambda-authorizer-lambda-function-create"></a>

L'elenco seguente mostra altri esempi di funzioni del sistema di autorizzazione Lambda. Puoi creare una funzione Lambda nello stesso account o in un account diverso da quello da cui hai creato l'API.

Per l'esempio precedente di funzioni Lambda, puoi utilizzare le funzioni integrate [AWSLambdaBasicExecutionRole](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html), poiché queste funzioni non chiamano altri AWS servizi. Se la tua funzione Lambda chiama altri AWS servizi, dovrai assegnare un ruolo di esecuzione IAM alla funzione Lambda. Per creare il ruolo, segui le istruzioni in [AWS Lambda Ruolo di esecuzione](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html).

**Esempi aggiuntivi di funzioni del sistema di autorizzazione Lambda**
+  Per un esempio di applicazione, vedere [Open Banking Brasile - Esempi di autorizzazione](https://github.com/aws-samples/openbanking-brazilian-auth-samples) GitHub su. 
+  Per altri esempi di funzioni Lambda, vedi [ aws-apigateway-lambda-authorizer-blueprints](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints) on. GitHub 
+ Puoi creare un sistema di autorizzazione Lambda che autentica gli utenti utilizzando i pool di utenti di Amazon Cognito e autorizza i chiamanti in base a un archivio di policy utilizzando Autorizzazioni verificate. Per ulteriori informazioni, consulta [Controllo dell'accesso in base agli attributi di un'identità con Autorizzazioni verificate](apigateway-lambda-authorizer-verified-permissions.md).
+ La console Lambda fornisce un blueprint Python, che puoi usare scegliendo **Usa un blueprint e scegliendo il blueprint**. **api-gateway-authorizer-python**

# Configurazione di un sistema di autorizzazione Lambda di Gateway API
<a name="configure-api-gateway-lambda-authorization"></a>

Dopo aver creato una funzione Lambda, configuri la funzione Lambda come sistema di autorizzazione per la tua API. Quindi configuri il metodo per invocare il sistema di autorizzazione Lambda per stabilire se un chiamante può invocare il tuo metodo. Puoi creare una funzione Lambda nello stesso account o in un account diverso da quello da cui hai creato l'API.

Puoi testare il sistema di autorizzazione Lambda utilizzando gli strumenti integrati nella console Gateway API o utilizzando [Postman](https://www.postman.com/). Per istruzioni su come utilizzare Postman per testare la funzione del sistema di autorizzazione Lambda, consulta [Chiamata di un'API con il sistema di autorizzazione Lambda di Gateway API](call-api-with-api-gateway-lambda-authorization.md).

## Configurazione di un sistema di autorizzazione Lambda (console)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 La procedura seguente illustra come creare un sistema di autorizzazione Lambda nella console REST API di Gateway API. Per ulteriori informazioni sui diversi tipi di sistemi di autorizzazione Lambda, consulta [Scelta di un tipo di sistema di autorizzazione Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose). 

------
#### [ REQUEST authorizer ]

**Configurazione di un sistema di autorizzazione Lambda `REQUEST`**

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

1. Seleziona un'API, quindi scegli **Autorizzazioni**. 

1. Scegli **Crea autorizzazioni**. 

1. In **Nome del provider di autorizzazioni**, immetti il nome di un provider di autorizzazioni.

1. In **Tipo di autorizzazione**, seleziona **Lambda**. 

1. Per la **funzione Lambda**, seleziona il Regione AWS luogo in cui hai creato la funzione di autorizzazione Lambda, quindi inserisci il nome della funzione.

1. Non specificare nulla in **Ruolo di richiamo Lambda** per consentire alla console REST API di Gateway API di impostare una policy basata sulle risorse. La policy concede a Gateway API le autorizzazioni per invocare la funzione del sistema di autorizzazione Lambda. Puoi anche scegliere di immettere il nome di un ruolo IAM per consentire a Gateway API di invocare la funzione del sistema di autorizzazione Lambda. Per un ruolo di esempio, consulta [Creazione di un ruolo IAM prevedibile](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. In **Payload evento Lambda**, scegli **Richiesta**.

1. In **Tipo di origine identità**, seleziona un tipo di parametro. I tipi di parametri supportati sono `Header`, `Query string`, `Stage variable` e `Context`. Per aggiungere altre origini di identità, scegli **Aggiungi parametro**. 

1. Per memorizzare nella cache la policy di autorizzazione generata dalla funzione di autorizzazione, attiva l'opzione **Autorizzazione caching**. Quando il caching delle policy è abilitato, puoi modificare il valore **TTL**. L'impostazione dell'opzione **TTL** su zero disabilita la memorizzazione nella cache delle policy.

   Per abilitare il caching, il sistema di autorizzazione deve restituire una policy applicabile a tutti i metodi di un'API. Per applicare una policy specifica del metodo, utilizza le variabili di contesto `$context.path` e `$context.httpMethod`.

1. Scegli **Crea autorizzazioni**.

------
#### [ TOKEN authorizer ]

**Configurazione di un sistema di autorizzazione Lambda `TOKEN`**

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

1. Seleziona un'API, quindi scegli **Autorizzazioni**. 

1. Scegli **Crea autorizzazioni**. 

1. In **Nome del provider di autorizzazioni**, immetti il nome di un provider di autorizzazioni.

1. In **Tipo di autorizzazione**, seleziona **Lambda**. 

1. Per la **funzione Lambda**, seleziona il Regione AWS luogo in cui hai creato la funzione di autorizzazione Lambda, quindi inserisci il nome della funzione.

1. Non specificare nulla in **Ruolo di richiamo Lambda** per consentire alla console REST API di Gateway API di impostare una policy basata sulle risorse. La policy concede a Gateway API le autorizzazioni per invocare la funzione del sistema di autorizzazione Lambda. Puoi anche scegliere di immettere il nome di un ruolo IAM per consentire a Gateway API di invocare la funzione del sistema di autorizzazione Lambda. Per un ruolo di esempio, consulta [Creazione di un ruolo IAM prevedibile](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. In **Payload evento Lambda**, scegli **Token**.

1. In **Origine token**, immetti il nome dell'intestazione contenente il token di autorizzazione. Il client API deve includere un'intestazione con questo nome per inviare il token di autorizzazione al sistema di autorizzazione Lambda.

1. (Facoltativo) Per la **convalida del token**, inserisci una dichiarazione. RegEx API Gateway esegue la convalida iniziale del token di input per l'espressione e, se la convalida ha esito positivo, richiama l'autorizzazione.

1. Per memorizzare nella cache la policy di autorizzazione generata dalla funzione di autorizzazione, attiva l'opzione **Autorizzazione caching**. Quando la memorizzazione della policy nella cache è abilitata, il nome dell'intestazione specificato in **Origine token** diventa la chiave della cache. Quando il caching delle policy è abilitato, puoi modificare il valore **TTL**. L'impostazione dell'opzione **TTL** su zero disabilita la memorizzazione nella cache delle policy. 

   Per abilitare il caching, il sistema di autorizzazione deve restituire una policy applicabile a tutti i metodi di un'API. Per applicare policy specifiche del metodo, puoi disattivare l'opzione **Memorizzazione nella cache dell'autorizzazione**.

1. Scegli **Crea autorizzazioni**.

------

Dopo aver creato il sistema di autorizzazione Lambda, puoi testarlo. La procedura seguente illustra come testare il sistema di autorizzazione Lambda.

------
#### [ REQUEST authorizer ]

**Per testare un sistema di autorizzazione Lambda `REQUEST`**

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

1. Seleziona il nome del sistema di autorizzazione.

1. In **Testa autorizzazioni**, inserisci un valore per la tua origine di identità.

   Se utilizzi [Esempio di funzione del sistema di autorizzazione `REQUEST` Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create), procedi nel modo seguente:

   1. Seleziona **Intestazione** e immetti **headerValue1**, quindi scegli **Aggiungi parametro**.

   1. In **Tipo di origine identità**, seleziona **Stringa di query** e immetti **queryValue1**, quindi scegli **Aggiungi parametro**.

   1. In **Tipo di origine identità**, seleziona **Variabile di fase** e immetti **stageValue1**.

   Non puoi modificare le variabili di contesto per l'invocazione di test, ma puoi modificare il modello di evento di test **Sistema di autorizzazione di Gateway API** per la tua funzione Lambda. Quindi, puoi testare la funzione del sistema di autorizzazione Lambda con variabili di contesto modificate. Per ulteriori informazioni, consulta [Testing Lambda functions in the console](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) nella *Guida per gli sviluppatori di AWS Lambda *.

1. Scegli **Testa autorizzazioni**.

------
#### [ TOKEN authorizer ]

**Per testare un sistema di autorizzazione Lambda `TOKEN`**

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

1. Seleziona il nome del sistema di autorizzazione.

1. In **Testa autorizzazioni**, inserisci un valore per il token.

   Se utilizzi [Esempio di funzione del sistema di autorizzazione `TOKEN` Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create), procedi nel modo seguente:

   1. Per **authorizationToken**, inserisci **allow**.

1. Scegli **Testa autorizzazioni**.

    Se il sistema di autorizzazione Lambda nega correttamente una richiesta nell'ambiente di test, il test restituisce una risposta HTTP `200 OK`. Esternamente all'ambiente di test, invece, Gateway API restituisce una risposta HTTP `403 Forbidden` e la richiesta di metodo ha esito negativo.

------

## Configurazione di un sistema di autorizzazione Lambda (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-cli"></a>

Il seguente comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) mostra come creare un sistema di autorizzazione Lambda tramite AWS CLI.

------
#### [ REQUEST authorizer ]

Il comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) seguente crea un sistema di autorizzazione `REQUEST` e utilizza l’intestazione `Authorizer` e la variabile di contesto `accountId` come origini di identità:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Request_Custom_Authorizer' \
    --type REQUEST \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization,context.accountId' \
    --authorizer-result-ttl-in-seconds 300
```

------
#### [ TOKEN authorizer ]

Il comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) seguente crea un sistema di autorizzazione `TOKEN` e utilizza l’intestazione `Authorization` come origine di identità:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Token_Custom_Authorizer' \
    --type TOKEN \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization' \
    --authorizer-result-ttl-in-seconds 300
```

------

Dopo aver creato il sistema di autorizzazione Lambda, puoi testarlo. Il [test-invoke-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html)comando seguente verifica un autorizzatore Lambda:

```
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \
   --authorizer-id efg1234 \
   --headers Authorization='Value'
```

## Configurazione di un metodo per utilizzare un sistema di autorizzazione Lambda (console)
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

Dopo aver configurato il sistema di autorizzazione Lambda, devi collegarlo a un metodo per l'API. Se il sistema di autorizzazione utilizza il caching delle autorizzazioni, è necessario aggiornare la policy per controllare l’accesso del metodo aggiuntivo.

**Configurazione di un metodo API per utilizzare le autorizzazioni Lambda**

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

1. Seleziona un'API.

1. Seleziona **Risorse**, quindi scegli un nuovo metodo o scegline uno esistente.

1. Nella scheda **Richiesta metodo**, in **Impostazioni richiesta metodo**, scegli **Modifica**. 

1. In **Autorizzazioni**, nel menu a discesa, seleziona la funzione di autorizzazione Lambda appena creata. 

1.  (Facoltativo) Se desideri passare il token di autorizzazione al back-end, scegli **Intestazioni di richiesta HTTP**. Scegli **Aggiungi intestazione**, quindi aggiungi il nome dell'intestazione di autorizzazione. In **Nome** immetti il nome dell'intestazione corrispondente al nome specificato in **Origine token** al momento della creazione della funzione di autorizzazione Lambda per l'API. Questo passaggio non si applica alle autorizzazioni `REQUEST`. 

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

1. Seleziona **Deploy API (Distribuisci API)** per distribuire l'API in una fase. Per una funzione di autorizzazione basata su `REQUEST` che usa variabili di fase, devi anche definire le variabili di fase richieste e specificare i relativi valori in **Fasi**.

## Configurazione di un metodo per utilizzare un sistema di autorizzazione Lambda (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

Dopo aver configurato il sistema di autorizzazione Lambda, devi collegarlo a un metodo per l'API. Puoi creare un nuovo metodo o utilizzare un'operazione di patch per collegare un sistema di autorizzazione a un metodo esistente. Se il sistema di autorizzazione utilizza il caching delle autorizzazioni, è necessario aggiornare la policy per controllare l’accesso del metodo aggiuntivo.

Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea un nuovo metodo che utilizza un sistema di autorizzazione Lambda:

```
aws apigateway put-method --rest-api-id 1234123412 \
  --resource-id a1b2c3 \
  --http-method PUT \
  --authorization-type CUSTOM \
  --authorizer-id efg1234
```

Il comando [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) seguente aggiorna un metodo esistente in modo da utilizzare un sistema di autorizzazione Lambda:

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"
```

# Input per un sistema di autorizzazione Lambda di Gateway API
<a name="api-gateway-lambda-authorizer-input"></a>

La sezione seguente illustra il formato di input da Gateway API a un sistema di autorizzazione Lambda.

## Formato di input `TOKEN`
<a name="w2aac15b9c23c25c19b5"></a>

 Per l'autorizzazione Lambda (nota in precedenza come autorizzazione ad hoc) di tipo `TOKEN`, devi specificare un'intestazione personalizzata in **Token Source (Origine token)** al momento della configurazione dell'autorizzazione per l'API. Il client API deve passare il token di autorizzazione richiesto nell'intestazione nella richiesta in ingresso. Quando riceve la richiesta del metodo in entrata, API Gateway estrae il token dall'intestazione personalizzata. Passa quindi il token come proprietà `authorizationToken` dell'oggetto `event` della funzione Lambda, in aggiunta all'ARN del metodo come proprietà `methodArn`: 

```
{
    "type":"TOKEN",
    "authorizationToken":"{caller-supplied-token}",
    "methodArn":"arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
}
```

 In questo esempio la proprietà `type` specifica il tipo di autorizzazioni, ovvero `TOKEN`. L'oggetto `{caller-supplied-token}` deriva dall'intestazione di autorizzazioni in una richiesta client e può essere qualsiasi valore di stringa. `methodArn` è l'ARN della richiesta del metodo in entrata e viene popolato da API Gateway in base alla configurazione dell'autorizzazione Lambda. 

## Formato di input `REQUEST`
<a name="w2aac15b9c23c25c19b7"></a>

Per un'autorizzazione per Lambda di tipo `REQUEST`, API Gateway passa i parametri della richiesta alla funzione di autorizzazione Lambda come parte dell'oggetto `event`. I parametri della richiesta includono intestazioni, parametri di percorso, parametri della stringa di query, variabili di fase e alcune variabili di contesto della richiesta. L'autore della chiamata API può impostare parametri di percorso, intestazioni e parametri della stringa di query. Lo sviluppatore dell'API deve impostare le variabili di fase durante la distribuzione dell'API e API Gateway fornisce il contesto della richiesta in fase di runtime. 

**Nota**  
I parametri di percorso possono essere passati come parametri della richiesta alla funzione di autorizzazione Lambda, ma non possono essere utilizzati come origini di identità.

 L'esempio seguente mostra un input per le autorizzazioni `REQUEST` per un metodo API (`GET /request`) con integrazione proxy: 

```
{
  "type": "REQUEST",
  "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "resource": "/request",
  "path": "/request",
  "httpMethod": "GET",
  "headers": {
    "X-AMZ-Date": "20170718T062915Z",
    "Accept": "*/*",
    "HeaderAuth1": "headerValue1",
    "CloudFront-Viewer-Country": "US",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Is-Mobile-Viewer": "false",
    "User-Agent": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}
```

 `requestContext` è una mappa di coppie chiave/valore e corrisponde alla variabile [\$1context](api-gateway-mapping-template-reference.md#context-variable-reference). Il suo risultato dipende dall'API.

 Gateway API potrebbe aggiungere nuove chiavi alla mappa. Per ulteriori informazioni sull'input della funzione Lambda nell'integrazione proxy Lambda, consulta [Formato di input di una funzione Lambda per l'integrazione proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

# Output da un sistema di autorizzazione Lambda di Gateway API
<a name="api-gateway-lambda-authorizer-output"></a>

L'output di una funzione di autorizzazione Lambda è un oggetto simile a un dizionario che deve includere l'identificatore dell'entità principale (`principalId`) e un documento di policy (`policyDocument`) contenente un elenco di dichiarazioni di policy. L'output può includere anche una mappa `context` contenente coppie chiave-valore. Se l'API utilizza un piano di utilizzo ([https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource) è impostato su `AUTHORIZER`), la funzione di autorizzazione Lambda deve restituire una delle chiavi API del piano di utilizzo come il valore della proprietà `usageIdentifierKey`.

Di seguito è illustrato un esempio di output. 

------
#### [ JSON ]

****  

```
{
  "principalId": "yyyyyyyy", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "stringKey": "value",
    "numberKey": "1",
    "booleanKey": "true"
  },
  "usageIdentifierKey": "{api-key}"
}
```

------

 In questo caso, una dichiarazione di policy specifica se permettere o rifiutare (`Effect`) al servizio di esecuzione API Gateway di richiamare (`Action`) il metodo API specificato (`Resource`). Potrebbe essere necessario controllare l’accesso a più risorse in base al sistema di autorizzazione. Per specificare un tipo di risorsa (metodo), è possibile usare un carattere jolly (`*`). Per informazioni sull'impostazione di policy valide per chiamare un'API, consulta [Riferimento delle istruzioni delle policy IAM per l'esecuzione dell'API in API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-calling-api-permissions). 

Per un ARN di metodo abilitato per le autorizzazioni, ad esempio `arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]`, la lunghezza massima è 1600 byte. A causa dei valori dei parametri del percorso, la cui dimensione viene determinata al momento dell'esecuzione, l'ARN può superare il limite di lunghezza impostato. In questo caso, il client API riceverà una risposta `414 Request URI too long`. 

Per l'ARN di risorsa, inoltre, come illustrato nell'output della dichiarazione di policy da parte delle autorizzazioni, è attualmente previsto un limite di 512 caratteri. Per questo motivo, non devi usare un URI con un token JWT di lunghezza significativa in un URI di richiesta. Puoi invece passare senza problemi il token JWT in un'intestazione di richiesta.

 Puoi accedere al valore di `principalId` in un modello di mappatura usando la variabile `$context.authorizer.principalId`. Ciò è utile se desideri passare il valore al back-end. Per ulteriori informazioni, consulta [Variabili di contesto per le trasformazioni dei dati](api-gateway-mapping-template-reference.md#context-variable-reference). 

 Puoi accedere al valore di `stringKey`, `numberKey` o `booleanKey` (ad esempio `"value"`, `"1"` o `"true"`) della mappa `context` in un modello di mappatura chiamando, rispettivamente, `$context.authorizer.stringKey`, `$context.authorizer.numberKey` o `$context.authorizer.booleanKey`. I valori restituiti sono tutti in formato stringa. Non è possibile impostare una matrice o un oggetto JSON come valore valido di una chiave nella mappa `context`. 

 È possibile usare la mappa `context` per restituire le credenziali memorizzate nella cache dalle autorizzazioni al back-end, usando un modello di mappatura di richiesta di integrazione. In questo modo, il back-end può offrire un'esperienza utente migliore usando le credenziali memorizzate nella cache per ridurre la necessità di accesso alle chiavi segrete e di apertura dei token di autorizzazione per ogni richiesta. 

 Per l'integrazione proxy Lambda, API Gateway passa l'oggetto `context` da un'autorizzazione Lambda direttamente alla funzione Lambda back-end come parte dell'input `event`. È possibile recuperare la coppia chiave/valore `context` nella funzione Lambda chiamando `$event.requestContext.authorizer.key`. 

`{api-key}` indica una chiave API nel piano di utilizzo della fase API. Per ulteriori informazioni, consulta [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md).

 Di seguito è illustrato l'output dell'autorizzazione Lambda di esempio. L'output di esempio contiene un'istruzione politica per bloccare (`Deny`) le chiamate al `GET` metodo per la `dev` fase di un'API (`ymy8tbxw7b`) di un AWS account (). `123456789012`

------
#### [ JSON ]

****  

```
{
  "principalId": "user",
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/"
      }
    ]
  }
}
```

------

# Chiamata di un'API con il sistema di autorizzazione Lambda di Gateway API
<a name="call-api-with-api-gateway-lambda-authorization"></a>

 Dopo aver configurato l'autorizzazione Lambda (nota in precedenza come autorizzazione ad hoc) e aver distribuito l'API, devi testare l'API con l'autorizzazione Lambda abilitata. A tale scopo, è necessario un client REST, ad esempio cURL o [Postman](https://www.postman.com/). Per gli esempi seguenti usiamo Postman. 

**Nota**  
 **Quando si chiama un metodo abilitato all'autorizzazione, API Gateway non registra la chiamata CloudWatch se il token richiesto per l'`TOKEN`autorizzatore non è impostato, è nullo o è invalidato dall'espressione di convalida Token specificata.** Allo stesso modo, API Gateway non registra la chiamata CloudWatch se una delle fonti di identità richieste per l'`REQUEST`autorizzatore non è impostata, è nulla o è vuota.

 Di seguito viene illustrato come usare Postman per chiamare o testare un'API con l'autorizzazione Lambda `TOKEN`. Il metodo può essere applicato alla chiamata a un'API con l'autorizzazione Lambda `REQUEST` specificando in modo esplicito i parametri di stringa di query, percorso o intestazione richiesti. 

**Per chiamare un'API con autorizzazioni ad hoc `TOKEN`**

1.  Apri **Postman**, scegli il metodo **GET** e incolla il valore di **Invoke URL (URL chiamata)** dell'API nel campo URL adiacente. 

    Aggiungi l'intestazione del token di autorizzazione Lambda e imposta il valore su `allow`. Scegliere **Send (Invia)**.   
![\[Chiamata di un'API con il token di autorizzazione Lambda allow\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/custom-auth-call-api-with-allow-token.png)

    Come illustrato, l'autorizzazione Lambda di API Gateway restituisce una risposta **200 OK** e autorizza la chiamata per l'accesso all'endpoint HTTP (http://httpbin.org/get) integrato con il metodo. 

1.  Sempre in Postman, modifica il valore dell'intestazione del token di autorizzazione Lambda impostandolo su `deny`. Scegliere **Send (Invia)**.   
![\[Chiamata di un'API con il token di autorizzazione Lambda Deny\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/custom-auth-call-api-with-deny-token.png)

   La risposta mostra che l'autorizzazione Lambda di API Gateway restituisce una risposta **403 Forbidden (403 Non consentito)** senza autorizzare la chiamata per l'accesso all'endpoint HTTP.

1.  In Postman, modifica il valore dell'intestazione del token di autorizzazione Lambda impostandolo su `unauthorized` e seleziona **Send (Invia)**.   
![\[Chiamata di un'API con il token di autorizzazione Lambda unauthorized\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/custom-auth-call-api-with-unauthorized-token.png)

    La risposta indica che API Gateway restituisce una risposta **401 Unauthorized (401 Non autorizzato)** senza autorizzare la chiamata per l'accesso all'endpoint HTTP. 

1.  Modifica quindi il valore dell'intestazione del token di autorizzazione Lambda impostandolo su `fail`. Scegliere **Send (Invia)**.   
![\[Chiamata di un'API con il token di autorizzazione Lambda fail\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/custom-auth-call-api-with-fail-token.png)

    La risposta indica che API Gateway restituisce una risposta **500 Internal Server Error (500 Errore interno del server)** senza autorizzare la chiamata per l'accesso all'endpoint HTTP. 

# Configurazione di un sistema di autorizzazione Lambda di Gateway API multi-account
<a name="apigateway-lambda-authorizer-cross-account-lambda-authorizer"></a>

Ora puoi anche utilizzare una AWS Lambda funzione di un altro AWS account come funzione di autorizzazione dell'API. Ogni account può trovarsi in qualsiasi regione in cui è disponibile Amazon API Gateway. La funzione di autorizzazione Lambda può utilizzare strategie di autenticazione con token portatori come o SAML. OAuth Ciò semplifica la gestione e la condivisione centralizzate di una funzione di autorizzazione Lambda centrale su più API Gateway. APIs

In questa sezione, viene illustrato come configurare un'autorizzazione Lambda tra account tramite la console Amazon API Gateway.

Queste istruzioni presuppongono che tu abbia già un'API API Gateway in un AWS account e una funzione di autorizzazione Lambda in un altro account.

## Configurazione di un'autorizzazione Lambda tra account tramite la console API Gateway
<a name="apigateway-cross-account-lambda-auth-configure-cross-account-authorizer"></a>

Accedi alla console Gateway Amazon API con l'account contenente la tua API e quindi procedi come descritto di seguito:

1. Scegli la tua API, quindi nel pannello di navigazione principale, scegli **Autorizzazioni**.

1. Scegli **Crea autorizzazioni**. 

1. In **Nome del provider di autorizzazioni**, immetti il nome di un provider di autorizzazioni.

1. In **Tipo di autorizzazione**, seleziona **Lambda**.

1. In **Funzione Lambda**, copia e incolla l'ARN completo della funzione di autorizzazione Lambda nel secondo account.
**Nota**  
Nella console Lambda, puoi trovare l'ARN della funzione nell'angolo in alto a destra.

1. Verrà visualizzato un avviso con una stringa del comando `aws lambda add-permission`. La policy concede a Gateway API l'autorizzazione per richiamare la funzione di autorizzazione Lambda. Copiare il comando e salvarlo per un secondo momento. È possibile eseguire il comando dopo aver creato l'autorizzatore.

1. In **Payload evento Lambda**, scegli **Token** per una funzione di autorizzazione basata su `TOKEN` o **Richiesta** per una funzione di autorizzazione basata su `REQUEST`.

1. A seconda dell'opzione scelta in precedenza, esegui una di queste operazioni:

   1.  Per l'opzione **Token** esegui le operazioni indicate di seguito: 
      + In **Origine token**, immetti il nome dell'intestazione contenente il token di autorizzazione. Il client API deve includere un'intestazione con questo nome per inviare il token di autorizzazione all'autorizzazione Lambda. 
      + Facoltativamente, per la **convalida del token**, inserisci una dichiarazione. RegEx API Gateway esegue la convalida iniziale del token di input per l'espressione e, se la convalida ha esito positivo, richiama l'autorizzazione. Ciò aiuta a ridurre le chiamate all'API. 
      + Per memorizzare nella cache la policy di autorizzazione generata dalla funzione di autorizzazione, attiva l'opzione **Autorizzazione caching**. Quando la memorizzazione nella cache delle policy è abilitata, è possibile scegliere di modificare il valore **TTL**. L'impostazione dell'opzione **TTL** su zero disabilita la memorizzazione nella cache delle policy. Quando la memorizzazione della policy nella cache è abilitata, il nome dell'intestazione specificato in **Origine token** diventa la chiave della cache. Se nella richiesta vengono passati più valori a questa intestazione, tutti i valori diventeranno la chiave della cache, con l'ordine mantenuto.
**Nota**  
Il valore **TTL** predefinito è 300 secondi. Il valore massimo è 3600 secondi e non è possibile aumentare questo limite.

   1. Per l'opzione **Request (Richiesta)**, esegui queste operazioni:
      + In **Tipo di origine identità**, seleziona un tipo di parametro. I tipi di parametri supportati sono `Header`, `Query string`, `Stage variable` e `Context`. Per aggiungere altre origini di identità, scegli **Aggiungi parametro**. 
      + Per memorizzare nella cache la policy di autorizzazione generata dalla funzione di autorizzazione, attiva l'opzione **Autorizzazione caching**. Quando la memorizzazione nella cache delle policy è abilitata, è possibile scegliere di modificare il valore **TTL**. L'impostazione dell'opzione **TTL** su zero disabilita la memorizzazione nella cache delle policy.

        API Gateway usa le origini di identità specificate come chiave di caching delle autorizzazioni della richiesta. Quando il caching è abilitato, API Gateway chiama la funzione di autorizzazione Lambda solo dopo aver verificato che tutte le origini di identità specificate siano presenti in fase di runtime. Se un’origine di identità specificata non è presente, è null o è vuota, Gateway API restituisce una risposta `401 Unauthorized` senza chiamare la funzione Lambda del sistema di autorizzazione. 

        Quando sono definite più origini di identità, vengono utilizzate tutte per derivare la chiave cache delle autorizzazioni. Se vengono modificate parti della chiave cache, le autorizzazioni rimuovono il documento di policy memorizzato nella cache e ne generano uno nuovo. Se nella richiesta viene passata un'intestazione con più valori, tutti i valori diventeranno la chiave della cache, con l'ordine mantenuto. 
      + Quando la memorizzazione nella cache è disattivata, non è necessario specificare un'origine di identità.
**Nota**  
 Per abilitare il caching, le autorizzazioni devono restituire una policy applicabile a tutti i metodi di un'API. Per applicare policy specifiche del metodo, puoi disattivare l'opzione **Autorizzazione caching**. 

1. Scegli **Crea autorizzazioni**.

1. Incolla la stringa di `aws lambda add-permission` comando che hai copiato nel passaggio precedente in una AWS CLI finestra configurata per il tuo secondo account. Sostituire `AUTHORIZER_ID` con l'ID del proprio autorizzatore. In questo modo, al primo account verrà concesso l'accesso alla funzione di autorizzazione Lambda del secondo account.

# Controllo dell'accesso in base agli attributi di un'identità con Autorizzazioni verificate
<a name="apigateway-lambda-authorizer-verified-permissions"></a>

Utilizza Autorizzazioni verificate da Amazon per controllare l'accesso alla tua API di Gateway API. Quando utilizzi Gateway API con Autorizzazioni verificate, Autorizzazioni verificate crea un sistema di autorizzazione Lambda che utilizza decisioni di autorizzazione granulari per controllare l'accesso alla tua API. Autorizzazioni verificate autorizza i chiamanti sulla base di uno schema di archivio di policy e di policy che utilizzano il linguaggio di policy Cedar per definire autorizzazioni granulari per gli utenti dell'applicazione. Per ulteriori informazioni, consulta [Creare un archivio di policy con un'API e un provider di identità connessi](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/getting-started-api-policy-store.html) nella *Guida per l'utente di Autorizzazioni verificate da Amazon*.

Autorizzazioni verificate supporta i pool di utenti di Amazon Cognito o i provider di identità OpenID Connect (OIDC) come origini di identità. Autorizzazioni verificate presuppone che il principale sia stato precedentemente identificato e autenticato. Le autorizzazioni verificate sono supportate solo per REST regionali e ottimizzate per i dispositivi periferici. APIs

## Creazione di un sistema di autorizzazione Lambda con Autorizzazioni verificate
<a name="apigateway-lambda-authorizer-verified-permissions-attach"></a>

Autorizzazioni verificate crea un sistema di autorizzazione Lambda per determinare se un principale è autorizzato a eseguire un'operazione sulla tua API. La policy Cedar utilizzata da Autorizzazioni verificate per eseguire le sue attività di autorizzazione viene creata da te.

Di seguito è riportato un esempio di policy Cedar che consente l'accesso per invocare un'API in base al pool di utenti di Amazon Cognito`us-east-1_ABC1234`, per il gruppo `developer` sulla risorsa `GET /users` di un'API. Autorizzazioni verificate determina l'appartenenza al gruppo analizzando l'identità del chiamante nel token di connessione. 

```
permit(
  principal in MyAPI::UserGroup::"us-east-1_ABC1234|developer",
  action in [ MyAPI::Action::"get /users" ],
  resource
  );
```

Facoltativamente, Autorizzazioni verificate può collegare il sistema di autorizzazione ai metodi dell'API. Nelle fasi di produzione dell'API, è consigliabile non consentire ad Autorizzazioni verificate di collegare automaticamente il sistema di autorizzazione.

L'elenco seguente mostra come configurare Autorizzazioni verificate per collegare o non collegare il sistema di autorizzazione Lambda alla richiesta di metodo dei metodi dell'API.

**Sistema di autorizzazione collegato automaticamente (Console di gestione AWS)**  
Quando scegli **Crea archivio di policy** nella console Autorizzazioni verificate, nella pagina **Implementa integrazione app** scegli **Ora**.

**Sistema di autorizzazione non collegato automaticamente (Console di gestione AWS)**  
Quando scegli **Crea archivio di policy** nella console Autorizzazioni verificate, nella pagina **Implementa integrazione app** scegli **Più tardi**.  
Autorizzazioni verificate crea comunque automaticamente un sistema di autorizzazione Lambda. Il sistema di autorizzazione Lambda inizia con `AVPAuthorizerLambda-`. Per ulteriori indicazioni su come collegare il sistema di autorizzazione per un metodo, consulta [Configurazione di un metodo per utilizzare un sistema di autorizzazione Lambda (console)](configure-api-gateway-lambda-authorization.md#configure-api-gateway-lambda-authorization-method-console).

**Sistema di autorizzazione collegato automaticamente (CloudFormation)**  
Nel CloudFormation modello generato da Autorizzazioni verificate, nella sezione, imposta su. `Conditions` `"Ref": "shouldAttachAuthorizer"` `true`

**Sistema di autorizzazione non collegato automaticamente (CloudFormation)**  
Nel CloudFormation modello generato da Autorizzazioni verificate, nella sezione, imposta su. `Conditions` `"Ref": "shouldAttachAuthorizer"` `false`  
Autorizzazioni verificate crea comunque automaticamente un sistema di autorizzazione Lambda. Il sistema di autorizzazione Lambda inizia con `AVPAuthorizerLambda-`. Per ulteriori indicazioni su come collegare il sistema di autorizzazione per un metodo, consulta [Configurazione di un metodo per utilizzare un sistema di autorizzazione Lambda (AWS CLI)](configure-api-gateway-lambda-authorization.md#configure-api-gateway-lambda-authorization-method-cli).

## Chiamata di un sistema di autorizzazione Lambda con Autorizzazioni verificate
<a name="apigateway-lambda-authorizer-verified-permissions-call"></a>

Puoi chiamare il tuo sistema di autorizzazione Lambda specificando un'identità o un token di accesso nell'intestazione `Authorization`. Per ulteriori informazioni, consulta [Chiamata di un'API con il sistema di autorizzazione Lambda di Gateway API](call-api-with-api-gateway-lambda-authorization.md).

Gateway API memorizza nella cache la policy restituita dal sistema di autorizzazione Lambda per 120 secondi. È possibile modificare il TTL nella console Gateway API o tramite AWS CLI.

# Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore
<a name="apigateway-integrate-with-cognito"></a>

In alternativa all'utilizzo di [ruoli e policy IAM](permissions.md) o [autorizzazioni Lambda](apigateway-use-lambda-authorizer.md) (note in precedenza come autorizzazioni ad hoc), puoi utilizzare un [pool di utenti di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) per controllare chi può accedere all'API in Amazon API Gateway. 

Per usare un pool di utenti di Amazon Cognito con l'API, devi prima creare l'autorizzazione di tipo `COGNITO_USER_POOLS` e quindi configurare un metodo API per usare tale autorizzazione. Una volta distribuita l'API, il client deve innanzitutto registrare l'utente nel pool di utenti, ottenere un [token di identità o di accesso](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html) per l'utente e quindi chiamare il metodo API con uno dei token, che sono in genere impostati sull'intestazione `Authorization` della richiesta. La chiamata API riesce solo se viene fornito il token necessario e se questo è valido. In caso contrario, il client non è autorizzato ad effettuare la chiamata perché non ha credenziali che è stato possibile autorizzare. 

Il token di identità viene usato per autorizzare chiamate API in base alle richieste di identità dell'utente connesso. Il token di accesso viene usato per autorizzare chiamate API in base agli ambiti personalizzati di risorse con accesso protetto specificate. Per ulteriori informazioni, consulta [Utilizzo di token con pool di utenti](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html) e la pagina relativa a [server di risorse e ambiti personalizzati](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html).

Per creare e configurare un pool di utenti di Amazon Cognito per l'API, esegui le attività seguenti:
+ Usa la console Amazon Cognito, CLI/SDK o API per creare un pool di utenti o usane uno di proprietà di un altro account. AWS 
+ Usa la console, l'interfaccia a riga di comando/SDK o l'API di API Gateway, per creare autorizzazioni API Gateway con il pool di utenti scelto.
+ Usa la console, l'interfaccia a riga di comando/SDK o l'API di API Gateway, per abilitare le autorizzazioni per i metodi API selezionati.

 Per chiamare qualsiasi metodo API con un pool di utenti abilitato, i client API eseguono le attività seguenti:
+  Usa Amazon Cognito CLI/SDK o l'API per far accedere un utente al pool di utenti scelto e ottenere un token di identità o un token di accesso. Per ulteriori informazioni sull'utilizzo di SDKs, consulta [Esempi di codice per l'utilizzo di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples.html). AWS SDKs
+  Utilizzano un framework specifico del client per chiamare l'API di API Gateway distribuita e specificare il token appropriato nell'intestazione `Authorization`.

In quanto sviluppatore dell'API, devi fornire agli sviluppatori client l'ID pool di utenti, un ID client e possibilmente i segreti client definiti come parte del pool di utenti. 

**Nota**  
Per permettere a un utente di accedere usando credenziali Amazon Cognito e anche di ottenere credenziali temporanee da usare con le autorizzazioni di un ruolo IAM, usa [identità federate di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html). Per ogni metodo HTTP dell'endpoint della risorsa API, imposta il tipo di autorizzazione, la categoria `Method Execution`, su `AWS_IAM`. 

In questa sezione descriveremo come creare un pool di utenti, come integrare un'API di API Gateway con il pool di utenti e come richiamare un'API integrata con il pool di utenti. 

**Topics**
+ [Creazione di un pool di utenti di Amazon Cognito per un'API REST](apigateway-create-cognito-user-pool.md)
+ [Integrazione di un'API REST con un pool di utenti di Amazon Cognito](apigateway-enable-cognito-user-pool.md)
+ [Chiamata di un'API REST integrata con un pool di utenti di Amazon Cognito](apigateway-invoke-api-integrated-with-cognito-user-pool.md)
+ [Configurazione dell'autorizzazione Amazon Cognito tra account per un'API REST tramite la console API Gateway](apigateway-cross-account-cognito-authorizer.md)
+ [Crea un autorizzatore Amazon Cognito per un'API REST utilizzando CloudFormation](apigateway-cognito-authorizer-cfn.md)

# Creazione di un pool di utenti di Amazon Cognito per un'API REST
<a name="apigateway-create-cognito-user-pool"></a>

Prima di integrare l'API con un pool di utenti, devi creare il pool di utenti in Amazon Cognito. La configurazione del pool di utenti deve rispettare tutte le [quote di risorse per Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html). Tutte le variabili Amazon Cognito definite dall'utente, come gruppi, utenti e ruoli, devono utilizzare solo caratteri alfanumerici. Per istruzioni su come creare un pool di utenti, consulta [Tutorial: Creazione di un bacino d'utenza](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-user-pool.html) nella *Guida per gli sviluppatori di Amazon Cognito*.

Prendi nota dell'ID pool di utenti, dell'ID client e di qualsiasi segreto client. Il client dovrà fornirli ad Amazon Cognito perché l'utente possa registrarsi con il pool di utenti, accedere al pool di utenti e ottenere un token di identità o di accesso da includere nelle richieste per chiamare metodi API configurati con il pool di utenti. Inoltre, devi specificare il nome del pool di utenti quando configuri il pool di utenti come autorizzazioni in API Gateway, come descritto nella prossima sezione.

Se stai usando token di accesso per autorizzare le chiamate di metodi API, assicurati di configurare l'integrazione dell'app con il pool di utenti per configurare gli ambiti personalizzati che desideri in un determinato server di risorse. Per ulteriori informazioni sull'utilizzo di token con pool di utenti di Amazon Cognito, consulta [Utilizzo di token con pool di utenti](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html). Per ulteriori informazioni sui server di risorse, consulta [Definizione dei server di risorse per il pool di utenti](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html).

Annota gli identificatori dei server di risorse configurati e i nomi degli ambiti personalizzati. Ti servono per creare i nomi completi dell'ambito di accesso per **OAuth Scopes**, che viene utilizzato dall'autorizzatore. `COGNITO_USER_POOLS` 

![\[Server di risorse e ambiti del pool di utenti di Amazon Cognito\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/cognito-user-pool-custom-scopes-new-console.png)


# Integrazione di un'API REST con un pool di utenti di Amazon Cognito
<a name="apigateway-enable-cognito-user-pool"></a>

Dopo aver creato un pool di utenti di Amazon Cognito in API Gateway, devi creare un'autorizzazione `COGNITO_USER_POOLS` che usa il pool di utenti. La procedura seguente illustra come eseguire questa operazione tramite la console API Gateway.

**Nota**  
Puoi utilizzare l'operazione [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateAuthorizer.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateAuthorizer.html) per creare un'autorizzazione `COGNITO_USER_POOLS` che utilizzi più pool di utenti. Puoi utilizzare fino a 1.000 pool di utenti per un unica autorizzazione `COGNITO_USER_POOLS`. Questo limite non può essere aumentato.

**Importante**  
Dopo aver eseguito una delle procedure di seguito, è necessario distribuire o ridistribuire l'API per la propagazione delle modifiche. Per ulteriori informazioni sulla distribuzione della tua API, vedi [Implementazione di REST API in Gateway API](how-to-deploy-api.md).

**Per creare un'autorizzazione `COGNITO_USER_POOLS` tramite la console API Gateway**

1. Crea una nuova API oppure selezionane una esistente in API Gateway.

1. Nel riquadro di navigazione principale, scegli **Autorizzazioni**.

1. Scegli **Crea autorizzazioni**. 

1. Per configurare la nuova autorizzazione per usare un pool di utenti, esegui queste operazioni:

   1.  In **Nome del provider di autorizzazioni**, immetti un nome. 

   1. In **Tipo di autorizzazione**, seleziona **Cognito**.

   1. Per il **pool di utenti Cognito**, scegli Regione AWS dove hai creato Amazon Cognito e seleziona un pool di utenti disponibile.

      Per definire il pool di utenti è possibile usare una variabile di fase. Utilizza il seguente formato per il pool di utenti: `arn:aws:cognito-idp:us-east-2:111122223333:userpool/${stageVariables.MyUserPool}`.

   1.  In **Origine token**, immetti **Authorization** come nome di intestazione da passare al token di identità o di accesso restituito da Amazon Cognito quando un utente accede correttamente. 

   1. (Facoltativo) Immetti un'espressione regolare nel campo **Convalida del token** per convalidare il campo `aud` (Audience, Destinatari) del token di identità prima che la richiesta venga autorizzata con Amazon Cognito. Si noti che quando si utilizza un token di accesso questa convalida rifiuta la richiesta poiché il token di accesso non contiene il campo `aud`.

   1. Scegli **Crea autorizzazioni**. 

1. Dopo aver creato il sistema di autorizzazione `COGNITO_USER_POOLS`, è possibile testarne l’invocazione specificando un token di identità allocato dal pool di utenti. Non è possibile utilizzare un token di accesso per testare l’invocazione del sistema di autorizzazione.

   Puoi ottenere questo token di identità chiamando l'[SDK Amazon Cognito Identity](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-integrate-apps.html) per eseguire l'accesso dell'utente. È anche possibile usare l'operazione [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Se in **Ambiti di autorizzazione** non configuri alcun valore, Gateway API considera il token fornito come un token di identità. 

La procedura precedente crea un'autorizzazione `COGNITO_USER_POOLS` che utilizza il nuovo pool di utenti di Amazon Cognito appena creato. A seconda del modo in cui abiliti l'autorizzazione per un metodo API, puoi usare un token di identità o un token di accesso assegnato dal pool di utenti integrato.

**Per configurare un'autorizzazione `COGNITO_USER_POOLS` per i metodi**

1. Scegliere **Resources** (Risorse). Seleziona un nuovo metodo o scegline uno esistente. Se necessario, crea una risorsa.

1. Nella scheda **Richiesta metodo**, in **Impostazioni richiesta metodo**, scegli **Modifica**.

1. In **Autorizzazioni**, nel menu a discesa, seleziona **Autorizzazioni del gruppo di utenti di Cognito**.

1.  Per usare un token di identità, esegui queste operazioni:

   1. Non specificare alcun valore in **Ambiti di autorizzazione**.

   1. Se necessario, in **Richiesta di integrazione**, aggiungi le espressioni `$context.authorizer.claims['property-name']` o `$context.authorizer.claims.property-name` in un modello di mappatura del corpo per passare la proprietà delle richieste di identità specificata dal pool di utenti al back-end. Per i nomi di proprietà semplici, come `sub` o `custom-sub`, le due notazioni sono identiche. Per i nomi di proprietà complessi, come `custom:role`, non puoi usare la notazione punto. Ad esempio, le espressioni di mappatura seguenti passano i [campi standard](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) `sub` e `email` della richiesta al back-end:

      ```
      {
      	"context" : {
      		"sub" : "$context.authorizer.claims.sub",
      		"email" : "$context.authorizer.claims.email"
      	}
      }
      ```

      Se hai dichiarato un campo di richiesta personalizzato quando hai configurato un pool di utenti, puoi seguire lo stesso modello per accedere ai campi personalizzati. L'esempio seguente ottiene un campo `role` personalizzato di una richiesta:

      ```
      {
      	"context" : {
      		"role" : "$context.authorizer.claims.role"
          }
      }
      ```

      Se il campo personalizzato della richiesta viene dichiarato come `custom:role`, usa l'esempio seguente per ottenere le proprietà della richiesta:

      ```
      {
      	"context" : {
      		"role" : "$context.authorizer.claims['custom:role']"
          }
      }
      ```

1.  Per usare un token di accesso, esegui queste operazioni: 

   1. In **Ambiti di autorizzazione**, immetti uno o più nomi completi di un ambito configurato quando è stato creato il pool di utenti di Amazon Cognito. Ad esempio, seguendo l'esempio fornito in [Creazione di un pool di utenti di Amazon Cognito per un'API REST](apigateway-create-cognito-user-pool.md), uno degli ambiti è `https://my-petstore-api.example.com/cats.read`. 

      In fase di runtime, la chiamata del metodo riesce se qualsiasi ambito specificato nel metodo in questa fase corrisponde a un ambito richiesto nel token in ingresso. Altrimenti, la chiamata non riesce e restituisce una risposta `401 Unauthorized`.

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

1. Ripeti queste fasi per gli altri metodi scelti.

Con l'`COGNITO_USER_POOLS`authorizer, se l'opzione **OAuthScopes** non è specificata, API Gateway tratta il token fornito come un token di identità e verifica l'identità dichiarata rispetto a quella del pool di utenti. Altrimenti, API Gateway considera il token specificato un token di accesso e verifica gli ambiti di accesso richiesti nel token rispetto agli ambiti di autorizzazione dichiarati nel metodo.

Invece di usare la console API Gateway, puoi anche abilitare un pool di utenti di Amazon Cognito in un metodo specificando un file di definizione OpenAPI e importando la definizione API in API Gateway.

**Per importare un'autorizzazione COGNITO\$1USER\$1POOLS con un file di definizione OpenAPI**

1. Crea (o esporta) un file di definizione OpenAPI per l'API.

1. Specificare la definizione JSON dell'autorizzazione `COGNITO_USER_POOLS` (`MyUserPool`) come parte della sezione `securitySchemes` OpenAPI 3.0 o della sezione `securityDefinitions` in OpenAPI 2.0, nel seguente modo as follows:

------
#### [ OpenAPI 3.0 ]

   ```
     "securitySchemes": {
       "MyUserPool": {
         "type": "apiKey",
         "name": "Authorization",
         "in": "header",
         "x-amazon-apigateway-authtype": "cognito_user_pools",
         "x-amazon-apigateway-authorizer": {
           "type": "cognito_user_pools",
           "providerARNs": [
             "arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}"
           ]
         }
       }
   ```

------
#### [ OpenAPI 2.0 ]

   ```
     "securityDefinitions": {
       "MyUserPool": {
         "type": "apiKey",
         "name": "Authorization",
         "in": "header",
         "x-amazon-apigateway-authtype": "cognito_user_pools",
         "x-amazon-apigateway-authorizer": {
           "type": "cognito_user_pools",
           "providerARNs": [
             "arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}"
           ]
         }
       }
   ```

------

1. Per usare il token di identità per l'autorizzazione del metodo, aggiungi `{ "MyUserPool": [] }` alla definizione `security` del metodo, come mostrato nel metodo GET seguente nella risorsa root.

   ```
     "paths": {
       "/": {
         "get": {
           "consumes": [
             "application/json"
           ],
           "produces": [
             "text/html"
           ],
           "responses": {
             "200": {
               "description": "200 response",
               "headers": {
                 "Content-Type": {
                   "type": "string"
                 }
               }
             }
           },
           "security": [
             {
               "MyUserPool": []
             }
           ],        
           "x-amazon-apigateway-integration": {
             "type": "mock",
             "responses": {
               "default": {
                 "statusCode": "200",
                 "responseParameters": {
                   "method.response.header.Content-Type": "'text/html'"
                 },
               }
             },
             "requestTemplates": {
               "application/json": "{\"statusCode\": 200}"
             },
             "passthroughBehavior": "when_no_match"
           }
         },
         ...
      }
   ```

1.  Per usare il token di accesso per l'autorizzazione del metodo, modifica la definizione di sicurezza precedente in `{ "MyUserPool": [resource-server/scope, ...] }`:

   ```
     "paths": {
       "/": {
         "get": {
           "consumes": [
             "application/json"
           ],
           "produces": [
             "text/html"
           ],
           "responses": {
             "200": {
               "description": "200 response",
               "headers": {
                 "Content-Type": {
                   "type": "string"
                 }
               }
             }
           },
           "security": [
             {
               "MyUserPool": ["https://my-petstore-api.example.com/cats.read", "http://my.resource.com/file.read"]
             }
           ],        
           "x-amazon-apigateway-integration": {
             "type": "mock",
             "responses": {
               "default": {
                 "statusCode": "200",
                 "responseParameters": {
                   "method.response.header.Content-Type": "'text/html'"
                 },
               }
             },
             "requestTemplates": {
               "application/json": "{\"statusCode\": 200}"
             },
             "passthroughBehavior": "when_no_match"
           }
         },
         ...
      }
   ```

1. Se necessario, è possibile definire altre impostazioni di configurazione dell'API utilizzando le definizioni o estensioni OpenAPI appropriate. Per ulteriori informazioni, consulta [Estensioni OpenAPI per Gateway API](api-gateway-swagger-extensions.md).

# Chiamata di un'API REST integrata con un pool di utenti di Amazon Cognito
<a name="apigateway-invoke-api-integrated-with-cognito-user-pool"></a>

Per chiamare un metodo con un'autorizzazione del pool di utenti configurata, il client deve eseguire queste operazioni: 
+ Permettere all'utente di iscriversi al pool di utenti.
+ Permettere all'utente di accedere al pool di utenti.
+ Ottenere un [token di identità o di accesso](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html) per l'utente che ha effettuato l'accesso dal pool di utenti.
+ Includere il token nell'intestazione `Authorization` (o in un'altra intestazione specificata durante la creazione dell'autorizzazione).

È possibile utilizzare [AWS Amplify]() per eseguire queste attività. Per maggiori informazioni, consulta [Integrazione di Amazon Cognito con le app Web e per dispositivi mobili](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-integrate-apps.html).
+ Per Android, consulta [Nozioni di base su Amplify per Android](https://docs.amplify.aws/android/build-a-backend/auth/).
+ Per usare iOS, consulta [Nozioni di base su Amplify per iOS](https://docs.amplify.aws/swift/build-a-backend/auth/).
+ Per utilizzarlo JavaScript, consulta [Getting Started with Amplify for Javascript](https://docs.amplify.aws/javascript/build-a-backend/auth/).

# Configurazione dell'autorizzazione Amazon Cognito tra account per un'API REST tramite la console API Gateway
<a name="apigateway-cross-account-cognito-authorizer"></a>

Ora puoi anche utilizzare un pool di utenti Amazon Cognito di un altro AWS account come autorizzatore API. Il pool di utenti di Amazon Cognito può utilizzare strategie di autenticazione con token portatori come OAuth o SAML. Ciò semplifica la gestione e la condivisione centralizzata di un autorizzatore del pool di utenti Amazon Cognito centrale su più API Gateway. APIs

In questa sezione, viene illustrato come configurare un pool di utenti di Amazon Cognito tra account tramite la console Amazon API Gateway.

Queste istruzioni presuppongono che tu abbia già un'API API Gateway in un AWS account e un pool di utenti Amazon Cognito in un altro account.

## Creazione di un sistema di autorizzazione di Amazon Cognito multi-account per una REST API
<a name="apigateway-configure-cross-account-cognito-authorizer"></a>

Accedi alla console Gateway Amazon API con l'account contenente la tua API e quindi procedi come descritto di seguito:

1. Crea una nuova API oppure selezionane una esistente in API Gateway.

1. Nel riquadro di navigazione principale, scegli **Autorizzazioni**.

1. Scegli **Crea autorizzazioni**.

1. Per configurare la nuova autorizzazione per usare un pool di utenti, esegui queste operazioni:

   1.  In **Nome del provider di autorizzazioni**, immetti un nome. 

   1. In **Tipo di autorizzazione**, seleziona **Cognito**.

   1. Per **Gruppo di utenti di Cognito**, copia e incolla l'ARN completo del pool di utenti nel secondo account.
**Nota**  
Nella console Amazon Cognito, puoi trovare l'ARN del pool di utenti nel campo **Pool ARN (ARN pool)** del riquadro **General Settings (Impostazioni generali)**.

   1.  In **Origine token**, immetti **Authorization** come nome di intestazione da passare al token di identità o di accesso restituito da Amazon Cognito quando un utente accede correttamente. 

   1. (Facoltativo) Immetti un'espressione regolare nel campo **Convalida del token** per convalidare il campo `aud` (Audience, Destinatari) del token di identità prima che la richiesta venga autorizzata con Amazon Cognito. Si noti che quando si utilizza un token di accesso questa convalida rifiuta la richiesta poiché il token di accesso non contiene il campo `aud`.

   1. Scegli **Crea autorizzazioni**.

# Crea un autorizzatore Amazon Cognito per un'API REST utilizzando CloudFormation
<a name="apigateway-cognito-authorizer-cfn"></a>

Puoi utilizzarlo CloudFormation per creare un pool di utenti Amazon Cognito e un autorizzatore Amazon Cognito. Il CloudFormation modello di esempio esegue le seguenti operazioni: 
+ Crea un pool di utenti di Amazon Cognito. Il client deve prima far accedere l'utente al pool di utenti e ottenere [un'identità o un token di accesso](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html). Se stai usando token di accesso per autorizzare le chiamate di metodi API, assicurati di configurare l'integrazione dell'app con il pool di utenti per configurare gli ambiti personalizzati che desideri in un determinato server di risorse.
+ Crea un'API Gateway API con un metodo `GET`.
+ Crea un'autorizzazione Amazon Cognito che utilizza l'intestazione `Authorization` come origine del token.

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  UserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      AccountRecoverySetting:
        RecoveryMechanisms:
          - Name: verified_phone_number
            Priority: 1
          - Name: verified_email
            Priority: 2
      AdminCreateUserConfig:
        AllowAdminCreateUserOnly: true
      EmailVerificationMessage: The verification code to your new account is {####}
      EmailVerificationSubject: Verify your new account
      SmsVerificationMessage: The verification code to your new account is {####}
      VerificationMessageTemplate:
        DefaultEmailOption: CONFIRM_WITH_CODE
        EmailMessage: The verification code to your new account is {####}
        EmailSubject: Verify your new account
        SmsMessage: The verification code to your new account is {####}
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
  CogAuthorizer:
    Type: AWS::ApiGateway::Authorizer
    Properties:
      Name: CognitoAuthorizer
      RestApiId:
        Ref: Api
      Type: COGNITO_USER_POOLS
      IdentitySource: method.request.header.Authorization
      ProviderARNs:
        - Fn::GetAtt:
            - UserPool
            - Arn
  Api:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: MyCogAuthApi
  ApiDeployment:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId:
        Ref: Api
    DependsOn:
      - CogAuthorizer
      - ApiGET
  ApiDeploymentStageprod:
    Type: AWS::ApiGateway::Stage
    Properties:
      RestApiId:
        Ref: Api
      DeploymentId:
        Ref: ApiDeployment
      StageName: prod
  ApiGET:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: GET
      ResourceId:
        Fn::GetAtt:
          - Api
          - RootResourceId
      RestApiId:
        Ref: Api
      AuthorizationType: COGNITO_USER_POOLS
      AuthorizerId:
        Ref: CogAuthorizer
      Integration:
        IntegrationHttpMethod: GET
        Type: HTTP_PROXY
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
Outputs:
  ApiEndpoint:
    Value:
      Fn::Join:
        - ""
        - - https://
          - Ref: Api
          - .execute-api.
          - Ref: AWS::Region
          - "."
          - Ref: AWS::URLSuffix
          - /
          - Ref: ApiDeploymentStageprod
          - /
```

# Integrazioni per REST APIs in API Gateway
<a name="how-to-integration-settings"></a>

 Dopo aver impostato un metodo API, devi integrarlo con un endpoint nel back-end. Un endpoint di backend viene anche definito endpoint di integrazione e può essere una funzione Lambda, una pagina Web HTTP o un'azione di servizio. AWS 

Come nel caso del metodo API, l'integrazione dell'API presenta una richiesta e una risposta di integrazione. Una richiesta di integrazione comprende una richiesta HTTP ricevuta dal back-end. Potrebbe o non potrebbe essere diversa dalla richiesta di metodo inviata dal cliente. Una risposta di integrazione è una risposta HTTP contenente l'output restituito dal back-end.

La configurazione di una richiesta di integrazione comporta le seguenti operazioni: configurare come passare le richieste di metodo inviate dal client al back-end; configurare come trasformare i dati della richiesta, se necessario, in dati della richiesta di integrazione; specificare quale funzione Lambda chiamare; specificare a quale server HTTP inoltrare la richiesta in arrivo o specificare l'azione del servizio AWS da chiamare.

La configurazione di una risposta di integrazione (applicabile solo alle integrazioni non proxy) implica le seguenti operazioni: come passare il risultato restituito dal back-end alla risposta di un metodo di un dato codice di stato, definire come trasformare parametri di risposta di integrazione specifici in base a parametri di risposta dei metodi pre-configurati e configurare come mappare il corpo della risposta di integrazione al corpo della risposta del metodo in base a modelli specifici di mappatura del corpo. 

A livello di programmazione, una richiesta di integrazione viene incapsulata dalla risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html), mentre la risposta di integrazione dalla risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html) di API Gateway. 

Per configurare una richiesta di integrazione, è necessario creare una risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) e usarla per configurare l'URL dell'endpoint di integrazione. Successivamente, devi impostare le autorizzazioni IAM per accedere al back-end e specificare le mappature per trasformare i dati di richiesta in entrata prima di passarli al back-end. Per configurare una risposta di integrazione per un'integrazione non proxy, è necessario creare una risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html) e usarla per configurare la relativa risposta del metodo target. Successivamente, devi configurare la mappatura dell'output di back-end alla risposta del metodo.

**Topics**
+ [Configurazione di una richiesta di integrazione in API Gateway](api-gateway-integration-settings-integration-request.md)
+ [Configurazione di una risposta di integrazione in API Gateway](api-gateway-integration-settings-integration-response.md)
+ [Integrazioni Lambda per REST APIs in API Gateway](set-up-lambda-integrations.md)
+ [Integrazioni HTTP per REST APIs in API Gateway](setup-http-integrations.md)
+ [Trasmetti in streaming la risposta di integrazione per le integrazioni proxy in API Gateway](response-transfer-mode.md)
+ [Integrazioni private per REST APIs in API Gateway](private-integration.md)
+ [Integrazioni fittizie per REST APIs in API Gateway](how-to-mock-integration.md)

# Configurazione di una richiesta di integrazione in API Gateway
<a name="api-gateway-integration-settings-integration-request"></a>

Per configurare una richiesta di integrazione, è necessario completare i seguenti task obbligatori e opzionali:

1.  Seleziona un tipo di integrazione che stabilisca in che modo i dati di richiesta del metodo vengano passati al back-end.

1.  Per le integrazioni non fittizie, specifica un metodo HTTP e l'URI dell'endpoint di integrazione target, eccetto per l'integrazione `MOCK`.

1.  Per le integrazioni con le funzioni Lambda e AWS altre azioni di servizio, imposta un ruolo IAM con le autorizzazioni necessarie affinché API Gateway chiami il backend per tuo conto.

1.  Per integrazioni non-proxy, imposta le mappature dei parametri necessari per mappare i parametri delle richieste di metodo predefinite ai parametri di richiesta di integrazione più appropriati.

1.  Per integrazioni non-proxy, imposta le mappature dei corpi necessari per mappare il corpo delle richieste di metodo in entrata di un tipo di contenuto specifico in base al modello di mappatura designato.

1.  Per le integrazioni non-proxy, specifica la condizione in base alla quale i dati della richiesta di metodo in entrata vengano passati attraverso il back-end inalterati. 

1.  A scelta, specifica come gestire una conversione dei tipi per un payload binario.

1.  A scelta, dichiara il nome del namespace cache e i parametri della chiave cache per abilitare il caching delle API. 

 L'esecuzione di queste attività implica la creazione di una risorsa [Integration](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) di API Gateway e la configurazione di valori di proprietà adeguati. Puoi farlo utilizzando la console API Gateway, AWS CLI i comandi, un AWS SDK o l'API REST di API Gateway. 

**Topics**
+ [Task di base di una richiesta di integrazione API](integration-request-basic-setup.md)
+ [Scegliere un tipo di integrazione API Gateway API](api-gateway-api-integration-types.md)
+ [Configurazione di un'integrazione proxy mediante una risorsa proxy](api-gateway-set-up-simple-proxy.md)
+ [Configurazione di una richiesta di integrazione API tramite la console API Gateway](how-to-method-settings-console.md)

# Task di base di una richiesta di integrazione API
<a name="integration-request-basic-setup"></a>

 Una richiesta di integrazione è una richiesta HTTP che API Gateway invia al back-end, passando i dati della richiesta inviata dal client e trasformandoli, se necessario. Il metodo HTTP (o verbo) e l'URI della richiesta di integrazione sono determinati dal back-end (l'endpoint dell'integrazione). Possono essere diversi o uguali, rispettivamente, al metodo HTTP e all'URI della richiesta di metodo. 

Ad esempio, quando una funzione Lambda restituisce un file proveniente da Amazon S3, puoi esporre intuitivamente questa operazione al client come una richiesta del metodo `GET`, anche se la corrispondente richiesta di integrazione richiede l'uso di una richiesta `POST` per chiamare la funzione Lambda. Per un endpoint HTTP, è probabile che la richiesta di metodo e la richiesta di integrazione corrispondente utilizzino entrambi lo stesso verbo HTTP. Tuttavia, non è obbligatorio. Puoi integrare la seguente richiesta di metodo: 

```
GET /{var}?query=value
Host: api.domain.net
```

Con la seguente richiesta di integrazione: 

```
POST /
Host: service.domain.com
Content-Type: application/json
Content-Length: ...

{
   path: "{var}'s value",
   type: "value"
}
```

 Come sviluppatore di API, puoi utilizzare qualunque verbo HTTP e URI per una richiesta di metodo che soddisfino i tuoi requisiti. Tuttavia, devi soddisfare i requisiti dell'endpoint di integrazione. Quando i dati della richiesta di metodo sono diversi dai dati della richiesta di integrazione, puoi eliminare la differenza tramite mappature dei dati della richiesta di metodo ai dati della richiesta di integrazione. 

Negli esempi precedenti, la mappatura traduce i valori della variabile di percorso (`{var}`) e dei parametri di query (`query`) della richiesta di metodo `GET` nei valori delle proprietà del payload della richiesta di integrazione di `path` e `type`. Tra gli altri dati di richiesta mappabili figurano il corpo e le intestazioni della richiesta. Tali dati sono descritti in [Mappatura dei parametri per REST APIs in API Gateway](rest-api-parameter-mapping.md).

Quando configuri la richiesta HTTP o di integrazione proxy HTTP, assegni l'URL dell'endpoint HTTP del back-end come valore URI della richiesta di integrazione. Ad esempio, nell' PetStoreAPI, la richiesta del metodo per ottenere una pagina di animali domestici ha il seguente URI di richiesta di integrazione: 

```
http://petstore-demo-endpoint.execute-api.com/petstore/pets
```

Quando configuri Lambda o l'integrazione proxy Lambda, assegni l'Amazon Resource Name (ARN) per chiamare la funzione Lambda come valore URI della richiesta di integrazione. Questo ARN ha il seguente formato:

```
arn:aws:apigateway:api-region:lambda:path//2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations
```

La parte dopo `arn:aws:apigateway:api-region:lambda:path/`, ovvero `/2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name/invocations`, è il percorso URI dell'API REST dell'azione Lambda [Invoke](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html). Se utilizzi la console API Gateway per configurare l'integrazione Lambda, API Gateway crea l'ARN e lo assegna all'URI di integrazione dopo avere chiesto di selezionare il `lambda-function-name` da una regione. 

Quando si imposta la richiesta di integrazione con un'altra azione di AWS servizio, anche l'URI della richiesta di integrazione è un ARN, simile all'integrazione con l'azione Lambda. `Invoke` Ad esempio, per l'integrazione con l'[GetBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html)azione di Amazon S3, l'URI della richiesta di integrazione è un ARN del seguente formato:

```
arn:aws:apigateway:api-region:s3:path/{bucket}
```

L'URI della richiesta di integrazione è la convenzione del percorso che specifica l'operazione, dove `{bucket}` è il segnaposto del nome di un bucket. In alternativa, è possibile fare riferimento a un'azione di AWS servizio tramite il relativo nome. Utilizzando il nome dell'operazione, l'URI della richiesta di integrazione per l'operazione `GetBucket` di Amazon S3; diventa il seguente:

```
arn:aws:apigateway:api-region:s3:action/GetBucket
```

Con l'URI della richiesta di integrazione basata sull'operazione, il nome del bucket (`{bucket}`) deve essere specificato nel corpo della richiesta di integrazione (`{ Bucket: "{bucket}" }`), seguito dal formato di input dell'operazione `GetBucket`. 

Per AWS le integrazioni, devi anche configurare le [credenziali](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#credentials) per consentire ad API Gateway di richiamare le azioni integrate. Puoi creare un ruolo IAM o sceglierne uno esistente per consentire ad API Gateway di chiamare l'operazione, quindi specificare il ruolo utilizzando il proprio ARN. Di seguito è illustrato un esempio di questo ARN: 

```
arn:aws:iam::account-id:role/iam-role-name
```

Tale ruolo IAM deve contenere una policy che consenta di eseguire l'operazione. API Gateway deve inoltre essere dichiarata (nella relazione di fiducia del ruolo) come entità affidabile per l'assunzione del ruolo. Tali autorizzazioni possono essere assegnate per l'operazione stessa. Si tratta di autorizzazioni basate sulle risorse. Per l'integrazione Lambda, puoi chiamare l'operazione Lambda [addPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) per impostare le autorizzazioni basate sulle risorse, quindi configurare `credentials` su null nella richiesta di integrazione di API Gateway.

Abbiamo illustrato la configurazione di integrazione di base. Le impostazioni avanzate prevedono la mappatura dei dati della richiesta di metodo ai dati della richiesta di integrazione. Per ulteriori informazioni, consulta [Trasformazioni dei dati per REST APIs in API Gateway](rest-api-data-transformations.md).

# Scegliere un tipo di integrazione API Gateway API
<a name="api-gateway-api-integration-types"></a>



 Seleziona un tipo di integrazione API in base ai tipi di endpoint di integrazione con cui lavori e alla quantità di dati che transitano nell'endpoint di integrazione. Per una funzione Lambda, puoi avere l'integrazione proxy di Lambda o l'integrazione personalizzata di Lambda. Per un endpoint HTTP, puoi avere l'integrazione proxy di HTTP o l'integrazione personalizzata di HTTP. Per un'azione AWS di servizio, è disponibile l' AWS integrazione solo del tipo non proxy. API Gateway supporta anche l'integrazione fittizia, in cui API Gateway serve come endpoint di integrazione per rispondere a una richiesta del metodo.

L'integrazione personalizzata Lambda è un caso speciale di integrazione, in cui AWS l'endpoint di integrazione corrisponde all'[azione di richiamo della funzione del servizio Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html). 

A livello di programmazione, è possibile scegliere un tipo di integrazione configurando la proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#type](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#type) della risorsa [https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html). Per l'integrazione proxy Lambda, il valore è `AWS_PROXY`. Per l'integrazione personalizzata Lambda e per tutte le altre integrazioni AWS , è `AWS`. Per l'integrazione proxy HTTP e l'integrazione HTTP, il valore è, rispettivamente, `HTTP_PROXY` e `HTTP`. Per l'integrazione fittizia, il valore `type` è `MOCK`.

L'integrazione proxy Lambda supporta una configurazione di integrazione semplificata con una singola funzione Lambda. La configurazione è semplice e può evolvere con il back-end senza annullare le impostazioni esistenti. Per questi motivi, è altamente consigliata per l'integrazione con una funzione Lambda. 

Al contrario, l'integrazione personalizzata Lambda consente il riutilizzo di modelli di mappatura configurati per vari endpoint di integrazione che presentano requisiti simili in termini di formato di dati di input e di output. La configurazione è più complessa ed è consigliata per scenari applicativi più avanzati. 

Analogamente, l'integrazione proxy HTTP ha una configurazione di integrazione più semplice e può evolvere con il back-end senza annullare le impostazioni esistenti. L'integrazione personalizzata HTTP è più complessa da configurare, ma consente il riutilizzo di modelli di mappatura configurati per altri endpoint di integrazione. 

L'elenco che segue riepiloga i tipi di integrazione supportati:
+ `AWS`: questo tipo di integrazione consente a un'API di esporre le operazioni dei servizi AWS . Nell'integrazione `AWS`, devi configurare la richiesta e la risposta di integrazione, oltre a impostare le mappature di dati necessarie dalla richiesta di metodo alla richiesta di integrazione e dalla risposta di integrazione alla risposta di metodo.
+  `AWS_PROXY`: questo tipo di integrazione consente l'integrazione di un metodo API con un'operazione di chiamata della funzione Lambda tramite una configurazione di integrazione semplificata, flessibile e versatile. Questa integrazione si basa su interazioni dirette tra il client e la funzione Lambda integrata. 

  Con questo tipo di integrazione, noto anche come integrazione proxy Lambda, non devi configurare la richiesta o la risposta di integrazione. API Gateway trasferisce la richiesta in entrata dal client come input alla funzione Lambda back-end. La funzione Lambda integrata prende l'[input di questo formato](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format) e analizza l'input di tutte le fonti disponibili, incluse le intestazioni delle richieste, le variabili di percorso dell'URL, i parametri delle stringhe di query e il corpo applicabile. La funzione restituisce il risultato seguendo questo [formato di output](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-output-format). 

  Questo è il tipo di integrazione preferito per chiamare una funzione Lambda tramite API Gateway e non è applicabile ad altre azioni di AWS servizio, incluse le azioni Lambda diverse dall'azione di richiamo della funzione. 
+ `HTTP`: questo tipo di integrazione consente a un'API di esporre gli endpoint HTTP nel back-end. Con l'integrazione `HTTP`, nota anche come integrazione HTTP personalizzata, devi configurare l richiesta e la risposta di integrazione. Devi configurare le mappature di dati necessarie dalla richiesta di metodo alla richiesta di integrazione e dalla risposta di integrazione alla risposta di metodo.
+  `HTTP_PROXY`: l'integrazione proxy HTTP consente a un cliente di accedere agli endpoint HTTP di back-end con una configurazione di integrazione semplificata e un singolo metodo API. Non devi configurare la richiesta o la risposta di integrazione. API Gateway trasferisce la richiesta in entrata dal client all'endpoint HTTP e la risposta in uscita dall'endpoint HTTP al client. 
+ `MOCK`: questo tipo di integrazione consente ad API Gateway di restituire una risposta senza inviare la richiesta fino al back-end. Si tratta di un'opzione utile per il test di API, poiché può essere utilizzata per testare la configurazione di integrazione senza sostenere costi per l'utilizzo del back-end e per favorire uno sviluppo collaborativo di un'API. 

  In uno sviluppo collaborativo, un team può isolare la propria attività di sviluppo impostando simulazioni di componenti API di proprietà di altri team utilizzando le integrazioni `MOCK`. Questa opzione viene anche utilizzata per restituire intestazioni relative alla configurazione CORS per verificare che il metodo API ne consenta l'accesso. Di fatto, la console API Gateway integra il metodo `OPTIONS` per supportare la configurazione CORS con un'integrazione fittizia. [Le risposte del gateway](api-gateway-gatewayResponse-definition.md#customize-gateway-responses) sono altri esempi di integrazioni fittizie.

# Configurazione di un'integrazione proxy mediante una risorsa proxy
<a name="api-gateway-set-up-simple-proxy"></a>

Per configurare un'integrazione proxy in un'API di API Gateway mediante una [risorsa proxy](api-gateway-method-settings-method-request.md#api-gateway-proxy-resource), completa le attività seguenti: 
+ Crea una risorsa proxy con una variabile di percorso greedy `{proxy+}`. 
+ Imposta il metodo `ANY` sulla risorsa proxy.
+ Integra la risorsa e il metodo con un back-end utilizzando il tipo di integrazione HTTP o Lambda.

**Nota**  
Anche se normalmente vengono utilizzati insieme, i metodi `ANY`, i tipi di integrazione proxy e le variabili di percorso greedy sono caratteristiche indipendenti. È possibile configurare un metodo HTTP specifico per una risorsa greedy o applicare tipi di integrazione non proxy a una risorsa proxy.

In API Gateway la gestione dei metodi prevede restrizioni e limitazioni specifiche per entrambi tipi di integrazione proxy, Lambda e HTTP. Per informazioni dettagliate, vedi [Note importanti Amazon API Gateway](api-gateway-known-issues.md). 

**Nota**  
 Quando si utilizza l'integrazione proxy con un passthrough, API Gateway restituisce l'intestazione `Content-Type:application/json` di default, se non è specificato il tipo di contenuto di un payload. 

Una risorsa proxy è più efficace se integrata con un back-end tramite l'integrazione proxy HTTP o l'[integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) proxy Lambda.

## Integrazione proxy HTTP mediante una risorsa proxy
<a name="api-gateway-proxy-integration-types"></a>

L'integrazione proxy HTTP, designata da `HTTP_PROXY` nell'API REST API Gateway, consente di integrare una richiesta del metodo con un endpoint HTTP di back-end. Con questo tipo di integrazione, API Gateway si limita a trasferire richiesta e risposta complete tra il front-end e il back-end, seguendo [restrizioni e limitazioni](api-gateway-known-issues.md) specifiche.

**Nota**  
L'integrazione proxy HTTP supporta le intestazioni multi-valore e le stringhe di query.

Quando si applica l'integrazione proxy HTTP a una risorsa proxy, è possibile configurare l'API in modo che esponga una parte di un'intera gerarchia di endpoint del back-end HTTP con un'unica configurazione di integrazione. Supponi ad esempio che il back-end del sito Web sia organizzato in più rami dei nodi di struttura del nodo radice (`/site`) come: `/site/a0/a1/.../aN`, `/site/b0/b1/.../bM` e così via. Se integri il metodo `ANY` di una risorsa proxy `/api/{proxy+}` con gli endpoint del back-end con percorsi URL `/site/{proxy}`, una singola richiesta di integrazione può supportare qualsiasi operazione HTTP (GET, POST e così via) ovunque in `[a0, a1, ..., aN, b0, b1, ...bM, ...]`. Se invece applichi un'integrazione proxy a un metodo HTTP specifico, ad esempio `GET`, la richiesta di integrazione risultante supporta le operazioni specificate (`GET`) su qualsiasi nodo di back-end. 

## Integrazione proxy Lambda mediante una risorsa proxy
<a name="lambda-proxy-integration-with-proxy-resource"></a>

L'integrazione proxy Lambda, designata da `AWS_PROXY` nell'API REST API Gateway, consente di integrare una richiesta del metodo con una funzione Lambda nel back-end. Con questo tipo di integrazione, API Gateway applica un modello di mappatura predefinito per inviare l'intera richiesta alla funzione Lambda e trasforma l'output di tale funzione in risposte HTTP. 

Analogamente, puoi applicare l'integrazione proxy Lambda a una risorsa proxy di `/api/{proxy+}` per configurare una sola integrazione e fare in modo che una funzione Lambda back-end reagisca individualmente alle modifiche apportate in una delle risorse API in `/api`. 

# Configurazione di una richiesta di integrazione API tramite la console API Gateway
<a name="how-to-method-settings-console"></a>

 La configurazione di un metodo API definisce il metodo e descrive i suoi comportamenti. Per configurare un metodo, è necessario specificare una risorsa su cui il metodo è esposto, inclusa la root ("/"), un metodo HTTP (`GET`, `POST` e così via) e il modo in cui sarà integrato con il relativo back-end. La richiesta e la risposta di metodo specificano il contratto con l'app di chiamata e stipulano i parametri che l'API può ricevere e l'aspetto della risposta. 

 Le seguenti procedure descrivono come utilizzare la console Gateway API per creare una richiesta di integrazione.

**Topics**
+ [Configurazione di un'integrazione Lambda](#how-to-method-settings-console-lambda)
+ [Configurazione di un'integrazione HTTP](#how-to-method-settings-console-http)
+ [Configura un'integrazione AWS di servizi](#how-to-method-settings-console-aws)
+ [Configurazione di un'integrazione fittizia](#how-to-method-settings-console-mock)

## Configurazione di un'integrazione Lambda
<a name="how-to-method-settings-console-lambda"></a>

L'integrazione della funzione Lambda si utilizza per integrare l'API con una funzione Lambda. A livello di API, sarà un tipo di integrazione `AWS` se si crea un'integrazione non proxy o un tipo di integrazione `AWS_PROXY` se si crea un'integrazione proxy.

**Per configurare l'integrazione Lambda**

1. Nel riquadro **Risorse** scegli **Crea metodo**.

1. Per **Tipo di metodo** seleziona un metodo HTTP.

1. Per **Integration type (Tipo di integrazione)**, scegli **Lambda Function (Funzione Lambda)**.

1. Per utilizzare un'integrazione proxy Lambda, attiva **Integrazione proxy Lambda**. Per ulteriori informazioni sulle integrazioni proxy Lambda, consulta [Informazioni sull'integrazione proxy Lambda di API Gateway](set-up-lambda-proxy-integrations.md#api-gateway-create-api-as-simple-proxy).

1. Per **Funzione Lambda** immetti il nome della funzione Lambda.

    Se utilizzi una funzione Lambda in una regione diversa da quella dell'API, seleziona la regione dal menu a discesa e inserisci il nome della funzione Lambda. Se usi una funzione Lambda tra diversi account immetti il nome della risorsa Amazon (ARN) della funzione. 

1. Per utilizzare il valore di timeout predefinito di 29 secondi, mantieni attiva l'opzione **Timeout predefinito**. Per impostare un timeout personalizzato, scegli **Timeout predefinito** e immetti un valore di timeout compreso tra `50` e `29000` millisecondi.

1. (Facoltativo) È possibile configurare le impostazioni di richiesta del metodo utilizzando i seguenti menu a discesa. Scegli **Impostazioni della richiesta del metodo** e configura la richiesta del metodo. Per ulteriori informazioni, consulta il passaggio 3 di [Modifica di una richiesta del metodo di Gateway API nella console Gateway API](how-to-set-up-method-using-console.md#how-to-method-settings-callers-console).

   È possibile configurare le impostazioni della richiesta del metodo anche dopo aver creato il metodo.

1. Scegli **Crea metodo**.

## Configurazione di un'integrazione HTTP
<a name="how-to-method-settings-console-http"></a>

L'integrazione HTTP si utilizza per integrare l'API con un endpoint HTTP. A livello di API, questa è un'integrazione di tipo `HTTP`.

**Per configurare un'integrazione HTTP**

1. Nel riquadro **Risorse** scegli **Crea metodo**.

1. Per **Tipo di metodo** seleziona un metodo HTTP.

1. Per **Tipo di integrazione** scegli **Fittizio**.

1. Per utilizzare un'integrazione proxy HTTP, attiva **Integrazione proxy HTTP**. Per ulteriori informazioni sulle integrazioni proxy HTTP, consulta [Configurazione di integrazioni proxy HTTP in API Gateway](setup-http-integrations.md#api-gateway-set-up-http-proxy-integration-on-proxy-resource).

1. Per **HTTP method (Metodo HTTP)** scegliere il tipo di metodo HTTP che corrisponde maggiormente al metodo nel back-end HTTP.

1. Per **URL endpoint** immetti l'URL del back-end HTTP che desideri venga utilizzato dal metodo.

1. Per **Gestione contenuti** seleziona un comportamento di gestione dei contenuti.

1. Per utilizzare il valore di timeout predefinito di 29 secondi, mantieni attiva l'opzione **Timeout predefinito**. Per impostare un timeout personalizzato, scegli **Timeout predefinito** e immetti un valore di timeout compreso tra `50` e `29000` millisecondi.

1. (Facoltativo) È possibile configurare le impostazioni di richiesta del metodo utilizzando i seguenti menu a discesa. Scegli **Impostazioni della richiesta del metodo** e configura la richiesta del metodo. Per ulteriori informazioni, consulta il passaggio 3 di [Modifica di una richiesta del metodo di Gateway API nella console Gateway API](how-to-set-up-method-using-console.md#how-to-method-settings-callers-console).

   È possibile configurare le impostazioni della richiesta del metodo anche dopo aver creato il metodo.

1. Scegli **Crea metodo**.

## Configura un'integrazione AWS di servizi
<a name="how-to-method-settings-console-aws"></a>

Utilizza un'integrazione AWS di servizi per integrare la tua API direttamente con un AWS servizio. A livello di API, questa è un'integrazione di tipo `AWS`.

Per configurare un'API Gateway API procedi come segue:
+ Crea una nuova funzione Lambda.
+ Imposta l'autorizzazione per le risorse alla funzione Lambda.
+ Esegui qualsiasi altra azione del servizio Lambda.

È necessario scegliere **Servizio AWS **.

**Per configurare un'integrazione AWS di servizi**

1. Nel riquadro **Risorse** scegli **Crea metodo**.

1. Per **Tipo di metodo** seleziona un metodo HTTP.

1. Per **Tipo di integrazione** scegli **Servizio AWS **.

1. Per **AWS Regione**, scegli la AWS regione che desideri utilizzare questo metodo per avviare l'azione.

1. Per l'**AWS assistenza**, scegli il AWS servizio che desideri chiamare con questo metodo.

1.  Per **AWS sottodominio**, inserisci il sottodominio utilizzato dal AWS servizio. In genere, questo spazio rimane vuoto. Alcuni servizi AWS supportano i sottodomini come parte degli host. Consulta la documentazione relativa al servizio per la disponibilità e, se disponibili, ulteriori dettagli. 

1. In **HTTP method (Metodo HTTP)** scegliere il tipo di metodo HTTP che corrisponde all'operazione. **Per il tipo di metodo HTTP, consulta la documentazione di riferimento dell'API per il AWS servizio che hai scelto per AWS il servizio.**

1. Per **Tipo di operazione** seleziona **Usa nome operazione** per utilizzare un'operazione API o **Utilizza sostituzione percorso** per usare un percorso personalizzato della risorsa. Per le azioni disponibili e i percorsi di risorse personalizzati, consulta la documentazione di riferimento dell'API per il AWS servizio che hai scelto per il **AWS servizio**.

1. Inserisci il **Nome azione** o la **Sostituzione percorso**.

1. In **Ruolo di esecuzione** immetti il nome della risorsa Amazon (ARN) del ruolo IAM utilizzato dal metodo per chiamare l'operazione.

   Per creare il ruolo IAM puoi adattare le istruzioni disponibili in [Fase 1: creare il ruolo di esecuzione del proxy del AWS servizio](getting-started-aws-proxy.md#getting-started-aws-proxy-add-roles). Specifica una policy di accesso con il numero desiderato di dichiarazioni di risorse e azioni: Per ulteriori informazioni, consulta [Come funziona Amazon API Gateway con IAM](security_iam_service-with-iam.md).

   Per la sintassi dell'istruzione relativa alle azioni e alle risorse, consulta la documentazione del AWS servizio che hai scelto per il **AWS servizio**.

   Per la relazione di fiducia del ruolo IAM, specificare quanto segue, in modo da consentire ad API Gateway di intervenire per conto dell'account AWS :

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "apigateway.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. Per utilizzare il valore di timeout predefinito di 29 secondi, mantieni attiva l'opzione **Timeout predefinito**. Per impostare un timeout personalizzato, scegli **Timeout predefinito** e immetti un valore di timeout compreso tra `50` e `29000` millisecondi.

1. (Facoltativo) È possibile configurare le impostazioni di richiesta del metodo utilizzando i seguenti menu a discesa. Scegli **Impostazioni della richiesta del metodo** e configura la richiesta del metodo. Per ulteriori informazioni, consulta il passaggio 3 di [Modifica di una richiesta del metodo di Gateway API nella console Gateway API](how-to-set-up-method-using-console.md#how-to-method-settings-callers-console).

   È possibile configurare le impostazioni della richiesta del metodo anche dopo aver creato il metodo.

1. Scegli **Crea metodo**.

## Configurazione di un'integrazione fittizia
<a name="how-to-method-settings-console-mock"></a>

 L'integrazione fittizia si utilizza affinché Gateway API agisca come backend e restituisca risposte statiche. A livello di API, questa è un'integrazione di tipo `MOCK`. In genere, puoi utilizzare l'integrazione `MOCK` quando la tua API non è ancora quella definitiva, ma vuoi generare risposte API per liberare i team relativi e dedicarli al test. Per il metodo `OPTION`, API Gateway imposta l'integrazione `MOCK` come predefinita per restituire intestazioni abilitate a CORS per la risorsa API applicata.

**Per configurare un'integrazione fittizia**

1. Nel riquadro **Risorse** scegli **Crea metodo**.

1. Per **Tipo di metodo** seleziona un metodo HTTP.

1. Per **Tipo di integrazione** scegli **Fittizio**.

1. (Facoltativo) È possibile configurare le impostazioni di richiesta del metodo utilizzando i seguenti menu a discesa. Scegli **Impostazioni della richiesta del metodo** e configura la richiesta del metodo. Per ulteriori informazioni, consulta il passaggio 3 di [Modifica di una richiesta del metodo di Gateway API nella console Gateway API](how-to-set-up-method-using-console.md#how-to-method-settings-callers-console).

   È possibile configurare le impostazioni della richiesta del metodo anche dopo aver creato il metodo.

1. Scegli **Crea metodo**.

# Configurazione di una risposta di integrazione in API Gateway
<a name="api-gateway-integration-settings-integration-response"></a>

 Per un'integrazione non-proxy, devi impostare almeno una risposta di integrazione come predefinita, per trasmettere il risultato restituito dal back-end al client. Puoi scegliere di trasmettere il risultato invariato o di trasformare i dati della risposta di integrazione in dati della risposta di metodo se i formati sono diversi. 

Per un'integrazione proxy, API Gateway passa automaticamente l'output del back-end al client come risposta HTTP. Non devi configurare la risposta del metodo o la risposta di integrazione.

Per configurare una risposta di integrazione, è necessario completare le seguenti attività obbligatorie e facoltative:

1.  Specifica un codice di stato HTTP di una risposta di metodo su cui sono mappati i dati della risposta di integrazione. Questo dato è obbligatorio.

1.  Definisci un'espressione regolare per scegliere che l'output del back-end sia rappresentato da questa risposta di integrazione. Se questo spazio rimane vuoto, la risposta corrisponde a quella predefinita utilizzata per cogliere qualsiasi risposta non ancora configurata.

1.  Se necessario, dichiara le mappature che consistono di coppie chiave-valore per mappare parametri di risposta di integrazione specifici su parametri di risposta di metodo.

1. Se necessario, aggiungi modelli di mappatura del corpo per trasformare i payload di risposte di integrazione specifiche in payload di risposta di metodo.

1.  Se necessario, specifica come gestire una conversione dei tipi per un payload binario.

Una risposta di integrazione è una risposta HTTP contenente la risposta del back-end. Per un endpoint HTTP, la risposta del back-end è una risposta HTTP. Il codice di stato della risposta di integrazione può riferirsi al codice di stato restituito dal back-end, mentre il corpo della risposta di integrazione coincide con il payload restituito dal back-end. Per un endpoint Lambda, la risposta del back-end è l'output restituito dalla funzione Lambda. Con l'integrazione Lambda, l'output della funzione Lambda viene restituito come risposta `200 OK`. Il payload può contenere il risultato come dati JSON, incluso una stringa o un oggetto JSON, o un messaggio di errore come oggetto JSON. Puoi assegnare un'espressione regolare alla proprietà [selectionPattern](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html#selectionPattern) per mappare una risposta di errore a una risposta di errore HTTP adeguata. Per ulteriori informazioni sulle risposte di errore della funzione Lambda, consulta [Gestione degli errori Lambda in API Gateway](handle-errors-in-lambda-integration.md). Con l'integrazione proxy di Lambda, la funzione Lambda deve restituire l'output nel formato seguente:

```
{
    statusCode: "...",            // a valid HTTP status code
    headers: { 
        custom-header: "..."      // any API-specific custom header
    },
    body: "...",                  // a JSON string.
    isBase64Encoded:  true|false  // for binary support
}
```

Non è necessario mappare la risposta della funzione Lambda alla risposta HTTP appropriata.

Per restituire il risultato al client, configura la risposta di integrazione per trasmettere la risposta invariata dell'endpoint alla risposta di metodo corrispondente. Oppure puoi mappare i dati di risposta dell'endpoint ai dati di risposta del metodo. Tra i dati di risposta che possono essere mappati figurano il codice di stato della risposta, i parametri di intestazione della risposta e il corpo della risposta. Se per il codice di stato restituito non è stata definita una risposta del metodo, API Gateway restituisce l'errore 500. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).



# Integrazioni Lambda per REST APIs in API Gateway
<a name="set-up-lambda-integrations"></a>

 Puoi integrare un metodo API con una funzione Lambda tramite l'integrazione proxy Lambda o l'integrazione non proxy (personalizzata) Lambda. 

Nell'integrazione proxy Lambda la configurazione richiesta è semplice. Impostare il metodo HTTP dell'integrazione su POST, l'URI dell'endpoint di integrazione sull'ARN dell'operazione di chiamata di una specifica funzione Lambda e la credenziale su un ruolo IAM con autorizzazioni per permettere ad API Gateway di chiamare la funzione Lambda per conto tuo.

Nell'integrazione non proxy Lambda, oltre alla procedura di configurazione dell'integrazione proxy, devi specificare anche il modo in cui i dati della richiesta in entrata vengono mappati alla richiesta di integrazione e il modo in cui i dati della risposta di integrazione risultante vengono mappati alla risposta del metodo. 

**Topics**
+ [Integrazioni proxy Lambda in Gateway API](set-up-lambda-proxy-integrations.md)
+ [Configurazione di integrazioni personalizzate Lambda in API Gateway](set-up-lambda-custom-integrations.md)
+ [Configurazione della chiamata asincrona della funzione Lambda back-end](set-up-lambda-integration-async.md)
+ [Gestione degli errori Lambda in API Gateway](handle-errors-in-lambda-integration.md)

# Integrazioni proxy Lambda in Gateway API
<a name="set-up-lambda-proxy-integrations"></a>

La sezione seguente illustra come utilizzare un'integrazione proxy Lambda.

**Topics**
+ [Informazioni sull'integrazione proxy Lambda di API Gateway](#api-gateway-create-api-as-simple-proxy)
+ [Supporto per le intestazioni multi-valore e i parametri di stringa di query](#apigateway-multivalue-headers-and-parameters)
+ [Formato di input di una funzione Lambda per l'integrazione proxy](#api-gateway-simple-proxy-for-lambda-input-format)
+ [Formato di output di una funzione Lambda per l'integrazione proxy](#api-gateway-simple-proxy-for-lambda-output-format)
+ [Configura l'integrazione del proxy Lambda per API Gateway utilizzando il AWS CLI](set-up-lambda-proxy-integration-using-cli.md)
+ [Configurazione di una risorsa proxy con l'integrazione proxy Lambda con una definizione OpenAPI](api-gateway-set-up-lambda-proxy-integration-on-proxy-resource.md)

## Informazioni sull'integrazione proxy Lambda di API Gateway
<a name="api-gateway-create-api-as-simple-proxy"></a>

L'integrazione proxy Lambda di Amazon API Gateway è un sistema semplice, potente e agile per creare un'API con una configurazione di un singolo metodo API. Permette al client di chiamare una singola funzione Lambda nel back-end. La funzione accede a molte risorse o funzionalità di altri AWS servizi, inclusa la chiamata ad altre funzioni Lambda. 

 Nell'integrazione proxy Lambda, quando un client invia una richiesta API, API Gateway passa alla funzione Lambda integrata un [oggetto evento](#api-gateway-simple-proxy-for-lambda-input-format), ad eccezione del fatto che non viene mantenuto l'ordine dei parametri della richiesta. Questi [dati di richiesta](#api-gateway-simple-proxy-for-lambda-input-format) includono intestazioni di richiesta, parametri delle stringhe di query, variabili di percorso URL, payload e dati di configurazione API. I dati di configurazione possono includere il nome della fase di distribuzione corrente, variabili di fasi, identità utente o contesto di autorizzazione (se presente). La funzione Lambda back-end analizza i dati delle richieste in entrata per stabilire la risposta da restituire. Perché API Gateway possa passare l'output Lambda come risposta API al client, la funzione Lambda deve restituire il risultato in [questo formato](#api-gateway-simple-proxy-for-lambda-output-format). 

 Poiché API Gateway non interviene in modo significativo tra il client e la funzione Lambda back-end per l'integrazione proxy Lambda, il client e la funzione Lambda integrata possono adattarsi alle modifiche reciproche senza alterare la configurazione di integrazione esistente dell'API. Per consentirlo, il client deve seguire i protocolli di applicazione attuati dalla funzione Lambda back-end. 

 Puoi configurare un'integrazione proxy Lambda per qualsiasi metodo API. Tuttavia un'integrazione proxy Lambda è più potente quando viene configurata per un metodo API che coinvolge una risorsa proxy generica. La risorsa proxy generica può essere indicata dalla speciale variabile di percorso preconfigurata `{proxy+}`, dal segnaposto del metodo catch-all `ANY` o da entrambi. Il client può passare l'input alla funzione Lambda back-end nella richiesta in entrata come parametri di richiesta o payload applicabile. I parametri di richiesta includono intestazioni, variabili di percorso URL, parametri delle stringhe di query e il payload applicabile. La funzione Lambda integrata verifica tutte le sorgenti di input prima di elaborare la richiesta e rispondere al client con messaggi di errore significativi, se manca qualcuno degli input richiesti.

 Quando si chiama un metodo API integrato con il metodo HTTP generico `ANY` e la risorsa generica `{proxy+}`, il client invia una richiesta con un metodo HTTP specifico al posto di `ANY`. Il client inoltre specifica un particolare percorso URL al posto di `{proxy+}` e include eventuali intestazioni, parametri delle stringhe di query o payload applicabile necessari. 

 L'elenco di seguito riepiloga i comportamenti di runtime di diversi metodi API con l'integrazione proxy Lambda: 
+ `ANY /{proxy+}`: per passare i dati come input alla funzione Lambda integrata, il client deve scegliere un metodo HTTP specifico, deve impostare una determinata gerarchia di percorso di risorsa e può impostare qualsiasi intestazione, parametro di stringa di query e payload applicabile. 
+ `ANY /res`: per passare i dati come input alla funzione Lambda integrata, il client deve scegliere un metodo HTTP specifico e può impostare qualsiasi intestazione, parametro di stringa di query e payload applicabile. 
+ `GET|POST|PUT|... /{proxy+}`: per passare i dati come input alla funzione Lambda integrata, il client può impostare una specifica gerarchia di percorso di risorsa, qualsiasi intestazione, parametro di stringa di query e payload applicabile. 
+  `GET|POST|PUT|... /res/{path}/...`: per passare i dati di input alla funzione Lambda integrata, il client deve scegliere un segmento di percorso specifico (per la variabile `{path}`) e può impostare qualsiasi intestazione di richiesta, parametro di stringa di query e payload applicabile.
+  `GET|POST|PUT|... /res`: per passare i dati di input alla funzione Lambda integrata, il client può scegliere qualsiasi intestazione di richiesta, parametro di stringa di query e payload applicabile.

 La risorsa proxy `{proxy+}` e quella personalizzata `{custom}` sono entrambe espresse come variabili di percorso preconfigurate. Tuttavia `{proxy+}` può fare riferimento a qualsiasi risorsa in una gerarchia di percorso, mentre `{custom}` fa riferimento solo a un segmento di percorso specifico. Ad esempio, un negozio di generi alimentari potrebbe organizzare il proprio inventario di prodotti online in base ai nomi dei reparti, alle categorie di produzione e ai tipi di prodotto. Il sito Web del negozio potrebbe quindi rappresentare i prodotti disponibili in base alle seguenti variabili di percorso preconfigurate di risorse personalizzate: `/{department}/{produce-category}/{product-type}`. Ad esempio le mele sono rappresentate da `/produce/fruit/apple` e le carote da `/produce/vegetables/carrot`. Può anche usare `/{proxy+}` per rappresentare qualsiasi reparto, categoria di produzione o tipo di prodotto che un cliente può cercare quando fa acquisti nel negozio online. Ad esempio, `/{proxy+}` può fare riferimento a uno qualsiasi degli articoli seguenti: 
+ `/produce`
+ `/produce/fruit`
+ `/produce/vegetables/carrot`

 Per permettere ai clienti di cercare i prodotti disponibili, la categoria di produzione e il reparto del negozio associato, puoi esporre un singolo metodo `GET /{proxy+}` con autorizzazioni di sola lettura. Allo stesso modo, per consentire a un supervisore di aggiornare l'inventario del `produce` reparto, puoi impostare un altro metodo unico di utilizzo delle `PUT /produce/{proxy+}` autorizzazioni. read/write Per consentire a un cassiere di aggiornare il totale corrente di un ortaggio, puoi impostare un `POST /produce/vegetables/{proxy+}` metodo con autorizzazioni. read/write Per consentire al gestore del negozio di eseguire qualsiasi azione possibile su qualsiasi prodotto disponibile, lo sviluppatore del negozio online può esporre il metodo con le `ANY /{proxy+}` autorizzazioni. read/write In ogni caso, al runtime il cliente o il dipendente deve selezionare un prodotto specifico di un determinato tipo in un reparto scelto, una particolare categoria di produzione in un reparto scelto o un reparto specifico. 



Per ulteriori informazioni sull'impostazione delle integrazioni proxy di API Gateway, consulta [Configurazione di un'integrazione proxy mediante una risorsa proxy](api-gateway-set-up-simple-proxy.md). 

 Per l'integrazione proxy è necessario che il client abbia una conoscenza più dettagliata dei requisiti del back-end. Pertanto, per garantire prestazioni dell'app e un'esperienza utente ottimali, lo sviluppatore di back-end deve comunicare chiaramente allo sviluppatore del client i requisiti del back-end e fornire un sistema solido di notifica degli errori quando i requisiti non vengono soddisfatti. 

## Supporto per le intestazioni multi-valore e i parametri di stringa di query
<a name="apigateway-multivalue-headers-and-parameters"></a>

API Gateway ora supporta più intestazioni e parametri di stringa di query con lo stesso nome. Le intestazioni multi-valore, quelle con valore singolo e le intestazioni di valore e parametri possono essere combinati nelle stesse richieste e risposte. Per ulteriori informazioni, consultare [Formato di input di una funzione Lambda per l'integrazione proxy](#api-gateway-simple-proxy-for-lambda-input-format) e [Formato di output di una funzione Lambda per l'integrazione proxy](#api-gateway-simple-proxy-for-lambda-output-format).

## Formato di input di una funzione Lambda per l'integrazione proxy
<a name="api-gateway-simple-proxy-for-lambda-input-format"></a>

Con l'integrazione proxy Lambda, API Gateway mappa l'intera richiesta client al parametro di input `event` della funzione Lambda di back-end. Nell'esempio seguente viene illustrata la struttura di un evento che API Gateway invia a un'integrazione proxy Lambda.

In questo esempio si presuppone che l’invocazione a Gateway API sia la seguente:

```
curl 'https://a1b2c3.execute-api.us-east-1.amazonaws.com/my/path?parameter1=value1&parameter2=value1&parameter2=value2&parameter3=value1,value2' -H 'header1: value1' -H 'header2: value1' -H 'header2: value2' -H 'header3: value1,value2'
```

L'output sarà simile al seguente:

```
{
  "resource": "/my/path",
  "path": "/my/path",
  "httpMethod": "GET",
  "headers": {
      "header1": "value1",
      "header2": "value2",
      "header3": "value1,value2"
  },
  "multiValueHeaders": {
    "header1": ["value1"],
    "header2": ["value1","value2"],
    "header3": ["value1,value2"]
  },
  "queryStringParameters": {
      "parameter1": "value1",
      "parameter2": "value2",
      "parameter3": "value1,value2"
  },
  "multiValueQueryStringParameters": {
    "parameter1": ["value1"],
    "parameter2": ["value1","value2"],
    "parameter3": ["value1,value2"]
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "id",
    "authorizer": {
      "claims": null,
      "scopes": null
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "extendedRequestId": "request-id",
    "httpMethod": "GET",
    "identity": {
      "accessKey": null,
      "accountId": null,
      "caller": null,
      "cognitoAuthenticationProvider": null,
      "cognitoAuthenticationType": null,
      "cognitoIdentityId": null,
      "cognitoIdentityPoolId": null,
      "principalOrgId": null,
      "sourceIp": "IP",
      "user": null,
      "userAgent": "user-agent",
      "userArn": null,
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "path": "/my/path",
    "protocol": "HTTP/1.1",
    "requestId": "id=",
    "requestTime": "04/Mar/2020:19:15:17 +0000",
    "requestTimeEpoch": 1583349317135,
    "resourceId": null,
    "resourcePath": "/my/path",
    "stage": "$default"
  },
  "pathParameters": null,
  "stageVariables": null,
  "body": "Hello from Lambda!",
  "isBase64Encoded": false
}
```

**Nota**  
Nell'input:  
La chiave `headers` può contenere solo una decina di intestazioni di valore.
La chiave `multiValueHeaders` può contenere intestazioni multi-valore e il valore di una decina di intestazioni.
Se si specificano valori sia per `headers` che per `multiValueHeaders`, API Gateway li unisce in un unico elenco. Se la stessa coppia chiave-valore viene specificata in entrambi, solo i valori di `multiValueHeaders` verranno visualizzati nell'elenco risultante.

Nell'input per la funzione Lambda back-end l'oggetto `requestContext` è una mappa di coppie chiave/valore. In ogni coppia la chiave è il nome di una proprietà della variabile [\$1context](api-gateway-mapping-template-reference.md#context-variable-reference) e il valore è il valore della proprietà. Gateway API potrebbe aggiungere nuove chiavi alla mappa.

A seconda delle funzionalità abilitate, la mappa `requestContext` può variare in base all'API. Ad esempio, nell'esempio precedente non è specificato alcun tipo di autorizzazione e di conseguenza non è presente alcuna proprietà `$context.authorizer.*` o `$context.identity.*`. Quando è specificato un tipo di autorizzazione, API Gateway passa informazioni sugli utenti autorizzati all'endpoint di integrazione in un oggetto `requestContext.identity` nel modo seguente:
+ Quando il tipo di autorizzazione è `AWS_IAM`, le informazioni sugli utenti autorizzati includono proprietà `$context.identity.*`.
+ Quando il tipo di autorizzazione è `COGNITO_USER_POOLS` (autorizzazione di Amazon Cognito), le informazioni sugli utenti autorizzati includono le proprietà `$context.identity.cognito*` e `$context.authorizer.claims.*`.
+ Quando il tipo di autorizzazione è `CUSTOM` (autorizzazione Lambda), le informazioni sugli utenti autorizzati includono `$context.authorizer.principalId` e altre proprietà `$context.authorizer.*` applicabili.

## Formato di output di una funzione Lambda per l'integrazione proxy
<a name="api-gateway-simple-proxy-for-lambda-output-format"></a>

Nell'integrazione proxy Lambda, API Gateway richiede la funzione Lambda back-end per restituire l'output in base al seguente formato JSON:

```
{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
    "body": "..."
}
```

Nell'output:
+ Le chiavi `headers` e `multiValueHeaders` possono non essere specificate se non devono essere restituite intestazioni di risposta aggiuntive.
+ La chiave `headers` può contenere solo una decina di intestazioni di valore.
+ La chiave `multiValueHeaders` può contenere intestazioni multi-valore e il valore di una decina di intestazioni. È possibile utilizzare la chiave `multiValueHeaders` per specificare tutte le intestazioni aggiuntive, incluse quelle con valore singolo.
+ Se si specificano valori sia per `headers` che per `multiValueHeaders`, API Gateway li unisce in un unico elenco. Se la stessa coppia chiave-valore viene specificata in entrambi, solo i valori di `multiValueHeaders` verranno visualizzati nell'elenco risultante.

Per abilitare CORS per l'integrazione proxy Lambda, devi aggiungere `Access-Control-Allow-Origin:domain-name` all'output `headers`. `domain-name` può essere `*` per qualsiasi nome di dominio. Viene eseguito il marshalling del parametro `body` di output al front-end come payload di risposta del metodo. Se `body` è un BLOB binario, puoi codificarlo come stringa con codifica Base64 impostando `isBase64Encoded` su `true` e configurando `*/*` come **Binary Media Type (Tipo multimediale binario)**. In caso contrario, puoi impostarlo su `false` o lasciarlo non specificato.

**Nota**  
Per ulteriori informazioni sull'abilitazione del supporto binario, consulta [Abilitazione del supporto binario tramite la console API Gateway](api-gateway-payload-encodings-configure-with-console.md). Per un esempio di funzione Lambda, consulta [Restituzione di supporti binari da un'integrazione proxy Lambda in Gateway API](lambda-proxy-binary-media.md).

Se l'output della funzione ha un formato diverso, API Gateway restituisce una risposta di errore `502 Bad Gateway`. 

Per restituire una risposta in una funzione Lambda in Node.js, è possibile utilizzare comandi come i seguenti:
+ Per ottenere un buon risultato, effettuare la chiamata a `callback(null, {"statusCode": 200, "body": "results"})`.
+ Per generare un'eccezione, chiama `callback(new Error('internal server error'))`.
+ Per un errore lato client (se, ad esempio, un parametro obbligatorio è mancante), puoi chiamare `callback(null, {"statusCode": 400, "body": "Missing parameters of ..."})` per restituire l'errore senza generare un'eccezione.

In una funzione Lambda `async` in Node.js, la sintassi equivalente è la seguente:
+ Per ottenere un buon risultato, effettuare la chiamata a `return {"statusCode": 200, "body": "results"}`.
+ Per generare un'eccezione, chiama `throw new Error("internal server error")`.
+ Per un errore lato client (se, ad esempio, un parametro obbligatorio è mancante), puoi chiamare `return {"statusCode": 400, "body": "Missing parameters of ..."}` per restituire l'errore senza generare un'eccezione.

# Configura l'integrazione del proxy Lambda per API Gateway utilizzando il AWS CLI
<a name="set-up-lambda-proxy-integration-using-cli"></a>

In questa sezione viene illustrato come usare AWS CLI per configurare un'API con l'integrazione proxy Lambda. Per istruzioni dettagliate sull'uso della console API Gateway per configurare una risorsa proxy con l'integrazione proxy Lambda, consulta [Tutorial: creazione di una REST API con un'integrazione proxy Lambda](api-gateway-create-api-as-simple-proxy-for-lambda.md).

Per questo scenario useremo la funzione Lambda di esempio seguente come back-end dell'API:

```
export const handler = async(event, context) => {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var res ={
        "statusCode": 200,
        "headers": {
            "Content-Type": "*/*"
        }
    };
    var greeter = 'World';
    if (event.greeter && event.greeter!=="") {
        greeter =  event.greeter;
    } else if (event.body && event.body !== "") {
        var body = JSON.parse(event.body);
        if (body.greeter && body.greeter !== "") {
            greeter = body.greeter;
        }
    } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") {
        greeter = event.queryStringParameters.greeter;
    } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") {
        greeter = event.multiValueHeaders.greeter.join(" and ");
    } else if (event.headers && event.headers.greeter && event.headers.greeter != "") {
        greeter = event.headers.greeter;
    } 
    res.body = "Hello, " + greeter + "!";
    return res
};
```

Rispetto alla configurazione dell'integrazione personalizzata Lambda riportata in [Configurazione di integrazioni personalizzate Lambda in API Gateway](set-up-lambda-custom-integrations.md), l'input per questa funzione Lambda può essere espresso nei parametri e nel corpo della richiesta. Avrai maggiore libertà per permettere al client di passare gli stessi dati di input. Qui il client può passare il nome del mittente della formula di saluto come parametro della stringa di query, intestazione o proprietà del corpo. La funzione può anche supportare l'integrazione personalizzata Lambda. La configurazione dell'API è più semplice. Non devi configurare la risposta del metodo o la risposta di integrazione.

**Per configurare un'integrazione con proxy Lambda utilizzando il AWS CLI**

1. Usa il seguente [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando per creare un'API:

   ```
   aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'
   ```

   L'output sarà simile al seguente:

   ```
   {
       "name": "HelloWorldProxy (AWS CLI)", 
       "id": "te6si5ach7",
       "rootResourceId" : "krznpq9xpg",
       "createdDate": 1508461860
   }
   ```

   In questo esempio si utilizza `id` dell’API (`te6si5ach7`) e `rootResourceId` (`krznpq9xpg`).

1. Utilizza il seguente comando [create-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-resource.html) per creare una [risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) `/greeting` di Gateway API:

   ```
   aws apigateway create-resource \
         --rest-api-id te6si5ach7 \
         --parent-id krznpq9xpg \
         --path-part {proxy+}
   ```

   L'output sarà simile al seguente:

   ```
   {
       "path": "/{proxy+}", 
       "pathPart": "{proxy+}", 
       "id": "2jf6xt", 
       "parentId": "krznpq9xpg"
   }
   ```

   Nel passaggio successivo si utilizza il valore `id` (`2jf6xt`) della risorsa `{proxy+}` per creare un metodo sulla risorsa `/{proxy+}`.

1. Utilizza il seguente comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) per creare una richiesta di metodo `ANY` come `ANY /{proxy+}`:

   ```
   aws apigateway put-method --rest-api-id te6si5ach7 \
          --resource-id 2jf6xt \
          --http-method ANY \
          --authorization-type "NONE"
   ```

   L'output sarà simile al seguente:

   ```
   {
       "apiKeyRequired": false, 
       "httpMethod": "ANY", 
       "authorizationType": "NONE"
   }
   ```

   Questo metodo API permette al client di ricevere o inviare formule di saluto dalla funzione Lambda nel back-end. 

1. Utilizza il seguente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) per configurare l’integrazione del metodo `ANY /{proxy+}` con una funzione Lambda denominata `HelloWorld`. Questa funzione risponde alla richiesta con un messaggio `"Hello, {name}!"` se è specificato il parametro `greeter`, altrimenti con un messaggio `"Hello, World!"` se il parametro della stringa di query non è impostato.

   ```
   aws apigateway put-integration \
         --rest-api-id te6si5ach7 \
         --resource-id 2jf6xt \
         --http-method ANY \
         --type AWS_PROXY \
         --integration-http-method POST \
         --uri arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:HelloWorld/invocations \
         --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
   ```
**Importante**  
Per le integrazioni Lambda, devi usare il metodo HTTP `POST` per la richiesta di integrazione, secondo la [specifica dell'operazione del servizio Lambda per le chiamate della funzione](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html). Il ruolo IAM `apigAwsProxyRole` deve includere policy che permettono al servizio `apigateway` di richiamare funzioni Lambda. Per ulteriori informazioni sulle autorizzazioni IAM, consultare [Modello di autorizzazione API Gateway per invocare un'API](permissions.md#api-gateway-control-access-iam-permissions-model-for-calling-api).

   L'output sarà simile al seguente:

   ```
   {
       "passthroughBehavior": "WHEN_NO_MATCH", 
       "cacheKeyParameters": [], 
       "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:HelloWorld/invocations", 
       "httpMethod": "POST", 
       "cacheNamespace": "vvom7n", 
       "credentials": "arn:aws:iam::1234567890:role/apigAwsProxyRole", 
       "type": "AWS_PROXY"
   }
   ```

   Invece di specificare un ruolo IAM per `credentials`, è possibile utilizzare il comando [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) per aggiungere autorizzazioni basate su risorse. Questo è ciò che fa la console API Gateway. 

1. Utilizza il seguente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) per distribuire l’API in una fase `test`.

   ```
   aws apigateway create-deployment  \
         --rest-api-id te6si5ach7 \
         --stage-name test
   ```

1. Testa l'API usando i comandi cURL seguenti in un terminale.

   Chiamata dell'API con il parametro della stringa di query `?greeter=jane`:

   ```
   curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'
   ```

   Chiamata dell'API con un parametro di intestazione `greeter:jane`:

   ```
   curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \
     -H 'content-type: application/json' \
     -H 'greeter: jane'
   ```

   Chiamata dell'API con un corpo `{"greeter":"jane"}`:

   ```
   curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \
     -H 'content-type: application/json' \
     -d '{ "greeter": "jane" }'
   ```

   In tutti i casi, l'output è una risposta 200 con il corpo seguente:

   ```
   Hello, jane!
   ```

# Configurazione di una risorsa proxy con l'integrazione proxy Lambda con una definizione OpenAPI
<a name="api-gateway-set-up-lambda-proxy-integration-on-proxy-resource"></a>

Per configurare una risorsa proxy con il tipo di integrazione proxy Lambda, crea una risorsa API con un parametro di percorso greedy, ad esempio `/parent/{proxy+}`, e integra la risorsa con il back-end di una funzione Lambda , ad esempio `arn:aws:lambda:us-west-2:123456789012:function:SimpleLambda4ProxyResource`, nel metodo `ANY`. Il parametro di percorso greedy deve trovarsi alla fine del percorso della risorsa API. Come per una risorsa non proxy, puoi configurare la risorsa proxy usando la console API Gateway, importando un file di definizione OpenAPI o chiamando direttamente l'API REST di API Gateway.

Il file di definizione API OpenAPI mostra un esempio di API con una risorsa proxy integrata con una funzione Lambda denominata `SimpleLambda4ProxyResource`.

------
#### [ OpenAPI 3.0 ]

```
{
   "openapi": "3.0.0",
   "info": {
      "version": "2016-09-12T17:50:37Z",
      "title": "ProxyIntegrationWithLambda"
   },
   "paths": {
      "/{proxy+}": {
         "x-amazon-apigateway-any-method": {
            "parameters": [
               {
                  "name": "proxy",
                  "in": "path",
                  "required": true,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {},
            "x-amazon-apigateway-integration": {
               "responses": {
                  "default": {
                     "statusCode": "200"
                  }
               },
               "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:SimpleLambda4ProxyResource/invocations",
               "passthroughBehavior": "when_no_match",
               "httpMethod": "POST",
               "cacheNamespace": "roq9wj",
               "cacheKeyParameters": [
                  "method.request.path.proxy"
               ],
               "type": "aws_proxy"
            }
         }
      }
   },
   "servers": [
      {
         "url": "https://gy415nuibc.execute-api.us-east-1.amazonaws.com/{basePath}",
         "variables": {
            "basePath": {
              "default": "/testStage"
            }
         }
      }
   ]
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger": "2.0",
  "info": {
    "version": "2016-09-12T17:50:37Z",
    "title": "ProxyIntegrationWithLambda"
  },
  "host": "gy415nuibc.execute-api.us-east-1.amazonaws.com",
  "basePath": "/testStage",
  "schemes": [
    "https"
  ],
  "paths": {
    "/{proxy+}": {
      "x-amazon-apigateway-any-method": {
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "proxy",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {},
        "x-amazon-apigateway-integration": {
          "responses": {
            "default": {
              "statusCode": "200"
            }
          },
          "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:SimpleLambda4ProxyResource/invocations",
          "passthroughBehavior": "when_no_match",
          "httpMethod": "POST",
          "cacheNamespace": "roq9wj",
          "cacheKeyParameters": [
            "method.request.path.proxy"
          ],
          "type": "aws_proxy"
        }
      }
    }
  }
}
```

------

Nell'integrazione proxy Lambda, in fase di esecuzione, API Gateway mappa una richiesta in entrata nel parametro di input `event` della funzione Lambda. L'input include il metodo della richiesta, il percorso, le intestazioni, qualsiasi parametro della stringa di query, qualsiasi payload, il contesto associato e qualsiasi variabile di fase definita. Il formato di input viene descritto in [Formato di input di una funzione Lambda per l'integrazione proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). Perché API Gateway possa mappare correttamente l'output di Lambda a risposte HTTP, la funzione Lambda deve restituire il risultato nel formato descritto in [Formato di output di una funzione Lambda per l'integrazione proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-output-format). 

Con l'integrazione proxy Lambda di una risorsa proxy tramite il metodo `ANY`, la singola funzione Lambda back-end funge da gestore eventi per tutte le richieste attraverso la risorsa proxy. Ad esempio, per registrare i modelli di traffico, puoi fare in modo che un dispositivo mobile invii le informazioni di posizione relative a stato, città, indirizzo ed edificio inviando una richiesta con `/state/city/street/house` nel percorso URL della risorsa proxy. La funzione Lambda back-end può quindi analizzare il percorso URL e inserire le tuple di posizione in una tabella DynamoDB.

# Configurazione di integrazioni personalizzate Lambda in API Gateway
<a name="set-up-lambda-custom-integrations"></a>

 Per mostrare come si configura l’integrazione personalizzata, o non proxy, Lambda, si crea un’API di Gateway API per esporre il metodo `GET /greeting?greeter={name}` in modo da invocare una funzione Lambda. Usa uno dei seguenti esempi di funzioni Lambda per l'API.

Usa uno dei seguenti esempi di funzioni Lambda:

------
#### [ Node.js ]

```
'use strict';
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];            
var times = ['morning', 'afternoon', 'evening', 'night', 'day'];

export const handler = async(event) => {
  console.log(event);
  // Parse the input for the name, city, time and day property values
  let name = event.name === null || event.name === undefined || event.name === "" ? 'you' : event.name;
  let city = event.city === undefined ? 'World' : event.city;
  let time = times.indexOf(event.time)<0 ? 'day' : event.time;
  let day = days.indexOf(event.day)<0 ? null : event.day;

  // Generate a greeting
  let greeting = 'Good ' + time + ', ' + name + ' of ' + city + '. ';
  if (day) greeting += 'Happy ' + day + '!';
  
  // Log the greeting to CloudWatch
  console.log('Hello: ', greeting);
  
  // Return a greeting to the caller
  return greeting;
};
```

------
#### [ Python ]

```
import json


def lambda_handler(event, context):
    print(event)
    res = {
        "statusCode": 200,
        "headers": {
            "Content-Type": "*/*"
        }
    }

    if event['greeter'] == "":
        res['body'] = "Hello, World"
    elif (event['greeter']):
        res['body'] = "Hello, " + event['greeter'] + "!"
    else:
        raise Exception('Missing the required greeter parameter.')

    return res
```

------

Questa funzione risponde con un messaggio `"Hello, {name}!"` se il valore del parametro `greeter` è una stringa non vuota. La funzione restituisce un messaggio `"Hello, World!"` se il valore di `greeter` è una stringa vuota. La funzione restituisce un messaggio di errore `"Missing the required greeter parameter."` se il parametro greeter non è impostato nella richiesta in ingresso. Denominiamo la funzione `HelloWorld`.

Puoi crearla nella console Lambda o tramite la AWS CLI. In questa sezione faremo riferimento alla funzione usando l'ARN seguente:

```
arn:aws:lambda:us-east-1:123456789012:function:HelloWorld
```

Con la funzione Lambda impostata nel back-end, procedi a configurare l'API.<a name="set-up-lambda-custom-integration-using-cli"></a>

**Per configurare l'integrazione personalizzata Lambda utilizzando il AWS CLI**

1. Usa il seguente [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando per creare un'API:

   ```
   aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'
   ```

   L'output sarà simile al seguente:

   ```
   {
       "name": "HelloWorld (AWS CLI)", 
       "id": "te6si5ach7",
       "rootResourceId" : "krznpq9xpg",
       "createdDate": 1508461860
   }
   ```

   In questo esempio si utilizza `id` dell’API (`te6si5ach7`) e `rootResourceId` (`krznpq9xpg`).

1. Utilizza il seguente comando [create-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-resource.html) per creare una [risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) `/greeting` di Gateway API:

   ```
   aws apigateway create-resource \
         --rest-api-id te6si5ach7 \
         --parent-id krznpq9xpg \
         --path-part greeting
   ```

   L'output sarà simile al seguente:

   ```
   {
       "path": "/greeting", 
       "pathPart": "greeting", 
       "id": "2jf6xt", 
       "parentId": "krznpq9xpg"
   }
   ```

   Nel passaggio successivo si utilizza il valore `id` (`2jf6xt`) della risorsa `greeting` per creare un metodo sulla risorsa `/greeting`.

1. Utilizza il seguente comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) per creare una richiesta di metodo API `GET /greeting?greeter={name}`:

   ```
   aws apigateway put-method --rest-api-id te6si5ach7 \
          --resource-id 2jf6xt \
          --http-method GET \
          --authorization-type "NONE" \
          --request-parameters method.request.querystring.greeter=false
   ```

   L'output sarà simile al seguente:

   ```
   {
       "apiKeyRequired": false, 
       "httpMethod": "GET", 
       "authorizationType": "NONE", 
       "requestParameters": {
           "method.request.querystring.greeter": false
       }
   }
   ```

   Questo metodo API permette al client di ricevere una formula di saluto dalla funzione Lambda nel back-end. Il parametro `greeter` è facoltativo perché il back-end deve gestire un chiamante anonimo o un chiamante autoidentificato.

1. Utilizzate il seguente [put-method-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method-response.html)comando per impostare la `200 OK` risposta alla richiesta del metodo di`GET /greeting?greeter={name}`:

   ```
   aws apigateway put-method-response \
           --rest-api-id te6si5ach7 \ 
           --resource-id 2jf6xt \
           --http-method GET \
           --status-code 200
   ```

   

1. Utilizza il seguente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) per configurare l’integrazione del metodo `GET /greeting?greeter={name}` con una funzione Lambda denominata `HelloWorld`. La funzione risponde alla richiesta con un messaggio `"Hello, {name}!"` se è specificato il parametro `greeter`, altrimenti con `"Hello, World!"` se il parametro della stringa di query non è impostato.

   ```
   aws apigateway put-integration \
           --rest-api-id te6si5ach7 \
           --resource-id 2jf6xt \
           --http-method GET \
           --type AWS \
           --integration-http-method POST \
           --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations \
           --request-templates '{"application/json":"{\"greeter\":\"$input.params('greeter')\"}"}' \
           --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
   ```

   Il modello di mappatura fornito qui traduce il parametro della stringa di query `greeter` nella proprietà `greeter` del payload JSON. Questo è necessario perché l'input di una funzione Lambda deve essere espresso nel corpo.
**Importante**  
Per le integrazioni Lambda, devi usare il metodo HTTP `POST` per la richiesta di integrazione, secondo la [specifica dell'operazione del servizio Lambda per le chiamate della funzione](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html). Il parametro `uri` è l'ARN dell'operazione di chiamata della funzione.  
L'output sarà simile al seguente:

   ```
   {
       "passthroughBehavior": "WHEN_NO_MATCH", 
       "cacheKeyParameters": [], 
       "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations", 
       "httpMethod": "POST", 
       "requestTemplates": {
           "application/json": "{\"greeter\":\"$input.params('greeter')\"}"
       }, 
       "cacheNamespace": "krznpq9xpg", 
       "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole", 
       "type": "AWS"
   }
   ```

   Il ruolo IAM `apigAwsProxyRole` deve includere policy che permettono al servizio `apigateway` di richiamare funzioni Lambda. Invece di specificare un ruolo IAM per `credentials`, puoi chiamare il comando [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) per aggiungere autorizzazioni basate su risorse. Questo è il modo in cui la console API Gateway aggiunge queste autorizzazioni. 

1. Utilizzate il [put-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration-response.html)comando seguente per impostare la risposta di integrazione per passare l'output della funzione Lambda al client come risposta del `200 OK` metodo:

   ```
    aws apigateway put-integration-response \
           --rest-api-id te6si5ach7 \
           --resource-id 2jf6xt \
           --http-method GET \
           --status-code 200 \
           --selection-pattern ""
   ```

   Impostando il modello di selezione su una stringa vuota, la risposta predefinita è `200 OK`. 

   L'output sarà simile al seguente:

   ```
    {
       "selectionPattern": "", 
       "statusCode": "200"
   }
   ```

1. Utilizza il seguente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) per distribuire l’API in una fase `test`.

   ```
   aws apigateway create-deployment \
           --rest-api-id te6si5ach7 \
           --stage-name test
   ```

1.  Testa l'API usando il comando cURL seguente in un terminale:

   ```
   curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=me' \
     -H 'authorization: AWS4-HMAC-SHA256 Credential={access_key}/20171020/us-west-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=f327...5751'
   ```

# Configurazione della chiamata asincrona della funzione Lambda back-end
<a name="set-up-lambda-integration-async"></a>

Nell'integrazione non proxy (personalizzata) Lambda la funzione Lambda back-end viene richiamata in modo sincrono per impostazione predefinita. Questo è il comportamento desiderato per la maggior parte delle operazioni API REST. Alcune applicazioni, tuttavia, richiedono che la chiamata venga effettuata in modo asincrono, ad esempio un'operazione batch o una con latenza elevata, in genere da un componente di back-end separato. In questo caso, la funzione Lambda back-end viene richiamata in modo asincrono e il metodo API REST front-end non restituisce il risultato.

Puoi configurare la funzione Lambda affinché un'integrazione non proxy Lambda venga richiamata in modo asincrono specificando `'Event'` come [tipo di chiamata Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html). Questo avviene così:

## Configurazione della chiamata asincrona Lambda nella console API Gateway
<a name="asynchronous-invocation-console-examples"></a>

Affinché tutte le invocazioni siano asincrone:
+ In **Richiesta di integrazione** aggiungi un'intestazione `X-Amz-Invocation-Type` con un valore statico `'Event'`.

Affinché i client decidano se le invocazioni sono asincrone o sincrone:

1. In **Richiesta metodo** aggiungi un'intestazione `InvocationType`.

1. In **Richiesta di integrazione** aggiungi un'intestazione `X-Amz-Invocation-Type` con un'espressione di mappatura `method.request.header.InvocationType`.

1. I client possono includere l'intestazione `InvocationType: Event` nelle richieste API per le invocazioni asincrone o `InvocationType: RequestResponse` per le invocazioni sincrone.

## Configurazione della chiamata asincrona Lambda utilizzando OpenAPI
<a name="asynchronous-invocation-OpenAPI-examples"></a>

Affinché tutte le invocazioni siano asincrone:
+  Aggiungi l'`X-Amz-Invocation-Type`intestazione alla **x-amazon-apigateway-integration**sezione.

  ```
  "x-amazon-apigateway-integration" : {
            "type" : "aws",
            "httpMethod" : "POST",
            "uri" : "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:123456789012:function:my-function/invocations",
            "responses" : {
              "default" : {
                "statusCode" : "200"
              }
            },
            "requestParameters" : {
              "integration.request.header.X-Amz-Invocation-Type" : "'Event'"
            },
            "passthroughBehavior" : "when_no_match",
            "contentHandling" : "CONVERT_TO_TEXT"
          }
  ```

Affinché i client decidano se le invocazioni sono asincrone o sincrone:

1.  Aggiungi la seguente intestazione su qualsiasi [oggetto OpenAPI Path Item](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#pathItemObject). 

   ```
   "parameters" : [ {
   "name" : "InvocationType",
   "in" : "header",
   "schema" : {
     "type" : "string"
   }
   } ]
   ```

1.  Aggiungi l'`X-Amz-Invocation-Type`intestazione alla sezione. **x-amazon-apigateway-integration**

   ```
   "x-amazon-apigateway-integration" : {
             "type" : "aws",
             "httpMethod" : "POST",
             "uri" : "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:123456789012:function:my-function/invocations",
             "responses" : {
               "default" : {
                 "statusCode" : "200"
               }
             },
             "requestParameters" : {
               "integration.request.header.X-Amz-Invocation-Type" : "method.request.header.InvocationType"
             },
             "passthroughBehavior" : "when_no_match",
             "contentHandling" : "CONVERT_TO_TEXT"
           }
   ```

1.  I client possono includere l'intestazione `InvocationType: Event` nelle richieste API per le invocazioni asincrone o `InvocationType: RequestResponse` per le invocazioni sincrone. 

## Configurare la chiamata asincrona Lambda utilizzando CloudFormation
<a name="asynchronous-invocation-cfn-examples"></a>

I seguenti CloudFormation modelli mostrano come configurare le chiamate asincrone. `AWS::ApiGateway::Method`

Affinché tutte le invocazioni siano asincrone:

```
AsyncMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref AsyncResource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: AWS
        RequestParameters:
          integration.request.header.X-Amz-Invocation-Type: "'Event'"
        IntegrationResponses:
            - StatusCode: '200'
        IntegrationHttpMethod: POST
        Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myfunction.Arn}$/invocations
      MethodResponses:
        - StatusCode: '200'
```

Affinché i client decidano se le invocazioni sono asincrone o sincrone:

```
AsyncMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref AsyncResource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      RequestParameters:
        method.request.header.InvocationType: false
      Integration:
        Type: AWS
        RequestParameters:
          integration.request.header.X-Amz-Invocation-Type: method.request.header.InvocationType
        IntegrationResponses:
            - StatusCode: '200'
        IntegrationHttpMethod: POST
        Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${myfunction.Arn}$/invocations
      MethodResponses:
        - StatusCode: '200'
```

 I client possono includere l'intestazione `InvocationType: Event` nelle richieste API per le invocazioni asincrone o `InvocationType: RequestResponse` per le invocazioni sincrone. 

# Gestione degli errori Lambda in API Gateway
<a name="handle-errors-in-lambda-integration"></a>

 Per le integrazioni personalizzate Lambda, devi mappare gli errori restituiti da Lambda nella risposta di integrazione alle risposte di errore HTTP standard per i client. Altrimenti, gli errori Lambda vengono restituiti come risposte `200 OK` per impostazione predefinita e il risultato non è intuitivo per gli utenti dell'API. 

 Esistono due tipi di errore che Lambda può restituire: errori standard ed errori personalizzati. Nella tua API, devi gestirli in modo diverso. 

 Con l'integrazione proxy Lambda, Lambda deve restituire un output nel formato seguente: 

```
{
  "isBase64Encoded" : "boolean",
  "statusCode": "number",
  "headers": { ... },
  "body": "JSON string"
}
```

In questo output, `statusCode` è in genere `4XX` per un errore del client e `5XX` per un errore del server. API Gateway gestisce questi errori mappando l'errore Lambda a una risposta di errore HTTP, in base al `statusCode` specificato. Affinché API Gateway passi il tipo di errore (ad esempio, `InvalidParameterException`), come parte della risposta al client, la funzione Lambda deve includere un'intestazione (ad esempio, `"X-Amzn-ErrorType":"InvalidParameterException"`) nella proprietà `headers`. 

**Topics**
+ [Gestione degli errori Lambda standard in API Gateway](#handle-standard-errors-in-lambda-integration)
+ [Gestione degli errori Lambda personalizzati in API Gateway](#handle-custom-errors-in-lambda-integration)

## Gestione degli errori Lambda standard in API Gateway
<a name="handle-standard-errors-in-lambda-integration"></a>

Un AWS Lambda errore standard ha il seguente formato:

```
{
  "errorMessage": "<replaceable>string</replaceable>",
  "errorType": "<replaceable>string</replaceable>",
  "stackTrace": [
    "<replaceable>string</replaceable>",
    ...
  ]
}
```

 Qui, `errorMessage` è un'espressione della stringa dell'errore. `errorType` è un tipo di eccezione o di errore dipendente dal linguaggio. `stackTrace` è un elenco di espressioni delle stringhe che mostrano la traccia dello stack che porta al verificarsi dell'errore. 

 Ad esempio, si consideri la seguente JavaScript funzione Lambda (Node.js). 

```
export const handler = function(event, context, callback) {
    callback(new Error("Malformed input ..."));
};
```

Questa funzione restituisce il seguente errore Lambda standard, contenente `Malformed input ...` come messaggio di errore:

```
{
  "errorMessage": "Malformed input ...",
  "errorType": "Error",
  "stackTrace": [
    "export const handler (/var/task/index.js:3:14)"
  ]
}
```

 Allo stesso modo, considera la seguente funzione Python Lambda che genera un'eccezione `Exception` con lo stesso messaggio di errore `Malformed input ...`. 

```
def lambda_handler(event, context):
    raise Exception('Malformed input ...')
```

 La funzione restituisce il seguente errore Lambda standard: 

```
{
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      3,
      "lambda_handler",
      "raise Exception('Malformed input ...')"
    ]
  ],
  "errorType": "Exception",
  "errorMessage": "Malformed input ..."
}
```

 Da notare che i valori delle proprietà `errorType` e `stackTrace` dipendono dal linguaggio. L'errore standard si applica anche a qualsiasi oggetto di errore che è un'estensione dell'oggetto `Error` o una sottoclasse della classe `Exception`. 

 Per mappare l'errore Lambda standard a una risposta del metodo, devi prima stabilire il codice di stato HTTP per un dato errore Lambda. Quindi impostate un modello di espressione regolare sulla `[selectionPattern](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html#selectionPattern)` proprietà del codice di stato HTTP [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)associato al dato codice di stato HTTP. Nella console Gateway API, questo `selectionPattern` è indicato come **Espressione regolare errore Lambda** sotto ogni risposta di integrazione nella sezione **Risposta di integrazione**.

**Nota**  
API Gateway usa le espressioni regolari basate sullo stile del modello Java per la mappatura della risposta. Per ulteriori informazioni, consulta [Pattern](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) nella documentazione Oracle.

 Ad esempio, utilizzate quanto segue [put-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration-response.html)per impostare una nuova `selectionPattern` espressione: 

```
aws apigateway put-integration-response --rest-api-id z0vprf0mdh --resource-id x3o5ih --http-method GET --status-code 400 --selection-pattern "Malformed.*" --region us-west-2
```

 Accertati di configurare anche il codice di errore corrispondente (`400`) sulla [risposta del metodo](api-gateway-method-settings-method-response.md#setup-method-response-status-code). Altrimenti, API Gateway restituisce una risposta di errore di configurazione non valida al runtime. 

**Nota**  
 Al runtime, API Gateway abbina l'elemento `errorMessage` dell'errore Lambda al modello dell'espressione regolare per la proprietà `selectionPattern`. Se c'è una corrispondenza, API Gateway restituisce l'errore Lambda come risposta HTTP del codice di stato HTTP corrispondente. Se non c'è corrispondenza, API Gateway restituisce l'errore come risposta predefinita oppure genera un'eccezione di configurazione non valida se non è stata configurata una risposta predefinita.   
 Impostare il valore `selectionPattern` su `.*` per una data risposta significa reimpostare questa risposta come risposta predefinita. Questo succede perché tale modello di selezione corrisponderà a tutti i messaggi di errore, incluso null, come, ad esempio, messaggi di errore non specificati. La mappatura che ne deriva sovrascrive la mappatura predefinita. Se si usa `.+` come modello di selezione per filtrare le risposte, potrebbe non corrispondere a una risposta contenente un carattere di nuova riga (’`\n`).

 Per aggiornare un `selectionPattern` valore esistente utilizzando AWS CLI, chiamate l'[update-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration-response.html)operazione per sostituire il valore del `/selectionPattern` percorso con l'espressione regex specificata del `Malformed*` pattern. 



Per impostare l'espressione `selectionPattern` tramite la console Gateway API, immetti l'espressione nella casella di testo **Espressione regolare errore Lambda** quando configuri o aggiorni una risposta di integrazione di un codice di stato HTTP specifico. 

## Gestione degli errori Lambda personalizzati in API Gateway
<a name="handle-custom-errors-in-lambda-integration"></a>

 Invece dell'errore standard descritto nella sezione precedente, AWS Lambda consente di restituire un oggetto di errore personalizzato come stringa JSON. L'errore può essere qualsiasi oggetto JSON valido. Ad esempio, la seguente funzione Lambda JavaScript (Node.js) restituisce un errore personalizzato: 

```
export const handler = (event, context, callback) => {
    ...
    // Error caught here:
    var myErrorObj = {
        errorType : "InternalServerError",
        httpStatus : 500,
        requestId : context.awsRequestId,
        trace : {
            "function": "abc()",
            "line": 123,
            "file": "abc.js"
        }
    }
    callback(JSON.stringify(myErrorObj));
};
```

 Devi trasformare l'oggetto `myErrorObj` in una stringa JSON prima di chiamare `callback` per uscire dalla funzione. In caso contrario, viene restituito `myErrorObj` come stringa di `"[object Object]"`. Quando un metodo dell'API è integrato con la precedente funzione Lambda, API Gateway riceve una risposta di integrazione con il seguente payload: 

```
{
    "errorMessage": "{\"errorType\":\"InternalServerError\",\"httpStatus\":500,\"requestId\":\"e5849002-39a0-11e7-a419-5bb5807c9fb2\",\"trace\":{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}}"
}
```

 Come nel caso delle risposte di integrazione, puoi passare questa risposta di errore invariata alla risposta di metodo. Oppure puoi avere un modello di mappatura per trasformare il payload in un formato diverso. Ad esempio, considera il seguente modello di mappatura del corpo per la risposta di un metodo del codice di stato `500`: 

```
{
    errorMessage: $input.path('$.errorMessage');
}
```

Questo modello traduce il corpo della risposta di integrazione che contiene la stringa JSON di errore personalizzato nel corpo di risposta del metodo seguente. Questo corpo di risposta del metodo contiene un oggetto JSON di errore personalizzato: 

```
{
    "errorMessage" : {
        errorType : "InternalServerError",
        httpStatus : 500,
        requestId : context.awsRequestId,
        trace : {
            "function": "abc()",
            "line": 123,
            "file": "abc.js"
        }
    }
};
```

 In base ai tuoi requisiti API, potresti aver bisogno di passare alcune o tutte le proprietà degli errori personalizzati come parametri dell'intestazione della risposta di metodo. Puoi farlo applicando le mappature degli errori personalizzati dal corpo della risposta di integrazione alle intestazioni della risposta di metodo. 

Ad esempio, la seguente estensione OpenAPI definisce una mappatura dalle proprietà `errorMessage.errorType`, `errorMessage.httpStatus`, `errorMessage.trace.function` ed `errorMessage.trace` alle intestazioni `error_type`, `error_status`, `error_trace_function` ed `error_trace`, rispettivamente. 

```
"x-amazon-apigateway-integration": {
    "responses": {
        "default": {
          "statusCode": "200",
          "responseParameters": {
            "method.response.header.error_trace_function": "integration.response.body.errorMessage.trace.function",
            "method.response.header.error_status": "integration.response.body.errorMessage.httpStatus",
            "method.response.header.error_type": "integration.response.body.errorMessage.errorType",
            "method.response.header.error_trace": "integration.response.body.errorMessage.trace"
          },
          ...
        }
    }
}
```

 Al runtime, API Gateway deserializza il parametro `integration.response.body` nel corso delle mappature delle intestazioni. Tuttavia, questa deserializzazione si applica solo alle body-to-header mappature per le risposte di errore personalizzate Lambda e non si applica alle mappature che utilizzano. body-to-body `$input.body` Con queste mappature custom-error-body-to -header, il client riceve le seguenti intestazioni come parte della risposta del metodo, a condizione che,, e le intestazioni siano dichiarate nella richiesta del `error_status` metodo. `error_trace` `error_trace_function` `error_type` 

```
"error_status":"500",
"error_trace":"{\"function\":\"abc()\",\"line\":123,\"file\":\"abc.js\"}",
"error_trace_function":"abc()",
"error_type":"InternalServerError"
```

La proprietà `errorMessage.trace` del corpo della risposta di integrazione è una proprietà complessa. Viene mappata all'intestazione `error_trace` come una stringa JSON. 

# Integrazioni HTTP per REST APIs in API Gateway
<a name="setup-http-integrations"></a>

 Puoi integrare un metodo API con un endpoint HTTP tramite l'integrazione proxy di HTTP o l'integrazione personalizzata di HTTP. 

API Gateway supporta le seguenti porte dell'endpoint: 80, 443 e 1024-65535.

 Con l'integrazione proxy la configurazione è semplice. Devi solo impostare il metodo HTTP e l'URI dell'endpoint HTTP, in base ai requisiti del back-end, se non sei interessato alla codifica o al caching dei contenuti. 

 Con l'integrazione personalizzata la configurazione è più complessa. Oltre alla procedura di configurazione dell'integrazione proxy, devi specificare come verranno mappati i dati della richiesta in ingresso alla richiesta di integrazione e i dati della risposta di integrazione risultante alla risposta del metodo. 

**Topics**
+ [Configurazione di integrazioni proxy HTTP in API Gateway](#api-gateway-set-up-http-proxy-integration-on-proxy-resource)
+ [Configurazione di integrazioni personalizzate HTTP in API Gateway](#set-up-http-custom-integrations)

## Configurazione di integrazioni proxy HTTP in API Gateway
<a name="api-gateway-set-up-http-proxy-integration-on-proxy-resource"></a>

Per configurare una risorsa proxy con il tipo di integrazione proxy HTTP, crea una risorsa API con un parametro di percorso greedy, ad esempio `/parent/{proxy+}`, e integra la risorsa con un endpoint di back-end HTTP, ad esempio `https://petstore-demo-endpoint.execute-api.com/petstore/{proxy}`, nel metodo `ANY`. Il parametro di percorso greedy deve trovarsi alla fine del percorso della risorsa. 

Come per una risorsa non proxy, puoi configurare una risorsa proxy con l'integrazione proxy HTTP usando la console API Gateway, importando un file di definizione OpenAPI o chiamando direttamente l'API REST di API Gateway. Per istruzioni dettagliate sull'uso della console API Gateway per configurare una risorsa proxy con l'integrazione HTTP, consulta [Tutorial: creazione di una REST API con l'integrazione proxy HTTP](api-gateway-create-api-as-simple-proxy-for-http.md).

Il seguente file di definizione OpenAPI mostra un esempio di API con una risorsa proxy integrata con il [PetStore](http://petstore-demo-endpoint.execute-api.com/petstore/pets)sito Web.

------
#### [ OpenAPI 3.0 ]

```
{
   "openapi": "3.0.0",
   "info": {
      "version": "2016-09-12T23:19:28Z",
      "title": "PetStoreWithProxyResource"
   },
   "paths": {
      "/{proxy+}": {
         "x-amazon-apigateway-any-method": {
            "parameters": [
               {
                  "name": "proxy",
                  "in": "path",
                  "required": true,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {},
            "x-amazon-apigateway-integration": {
               "responses": {
                  "default": {
                     "statusCode": "200"
                  }
               },
               "requestParameters": {
                  "integration.request.path.proxy": "method.request.path.proxy"
               },
               "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/{proxy}",
               "passthroughBehavior": "when_no_match",
               "httpMethod": "ANY",
               "cacheNamespace": "rbftud",
               "cacheKeyParameters": [
                  "method.request.path.proxy"
               ],
               "type": "http_proxy"
            }
         }
      }
   },
   "servers": [
      {
         "url": "https://4z9giyi2c1.execute-api.us-east-1.amazonaws.com/{basePath}",
         "variables": {
            "basePath": {
              "default": "/test"
            }
         }
      }
   ]
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger": "2.0",
  "info": {
    "version": "2016-09-12T23:19:28Z",
    "title": "PetStoreWithProxyResource"
  },
  "host": "4z9giyi2c1.execute-api.us-east-1.amazonaws.com",
  "basePath": "/test",
  "schemes": [
    "https"
  ],
  "paths": {
    "/{proxy+}": {
      "x-amazon-apigateway-any-method": {
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "proxy",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {},
        "x-amazon-apigateway-integration": {
          "responses": {
            "default": {
              "statusCode": "200"
            }
          },
          "requestParameters": {
            "integration.request.path.proxy": "method.request.path.proxy"
          },
          "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/{proxy}",
          "passthroughBehavior": "when_no_match",
          "httpMethod": "ANY",
          "cacheNamespace": "rbftud",
          "cacheKeyParameters": [
            "method.request.path.proxy"
          ],
          "type": "http_proxy"
        }
      }
    }
  }
}
```

------

In questo esempio, viene dichiarata una chiave cache nel parametro del percorso `method.request.path.proxy` della risorsa proxy. Questa è l'impostazione predefinita quando crei l'API tramite la console API Gateway. Il percorso di base dell'API (`/test`corrispondente a una fase) è mappato alla PetStore pagina del sito Web (`/petstore`). La singola richiesta di integrazione rispecchia l'intero PetStore sito Web utilizzando la variabile greedy path dell'API e il metodo `ANY` catch-all. Negli esempi seguenti viene illustrato questo mirroring. 
+ **Imposta `ANY` come `GET` e `{proxy+}` come `pets`**

  Richiesta di metodo iniziata dal front-end:

  ```
  GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets HTTP/1.1
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  GET http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP/1.1
  ```

  Le istanze run-time del metodo `ANY` e le risorse proxy sono entrambe valide. La chiamata restituisce una risposta `200 OK` con il payload contenente il primo batch di animali, nel modo in cui viene restituito dal back-end.
+ **Imposta `ANY` come `GET` e `{proxy+}` come `pets?type=dog`**

  ```
  GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets?type=dog HTTP/1.1
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  GET http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=dog HTTP/1.1
  ```

  Le istanze run-time del metodo `ANY` e le risorse proxy sono entrambe valide. La chiamata restituisce una risposta `200 OK` con il payload contenente il primo batch di cani specifici, nel modo in cui viene restituito dal back-end.
+ **Imposta `ANY` come `GET` e `{proxy+}` come `pets/{petId}`**

  Richiesta di metodo iniziata dal front-end:

  ```
  GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets/1 HTTP/1.1
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/1 HTTP/1.1
  ```

  Le istanze run-time del metodo `ANY` e le risorse proxy sono entrambe valide. La chiamata restituisce una risposta `200 OK` con il payload contenente l'animale specificato, nel modo in cui viene restituito dal back-end.
+ **Imposta `ANY` come `POST` e `{proxy+}` come `pets`**

  Richiesta di metodo iniziata dal front-end:

  ```
  POST https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets HTTP/1.1
  Content-Type: application/json
  Content-Length: ...
  
  {
    "type" : "dog",
    "price" : 1001.00
  }
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  POST http://petstore-demo-endpoint.execute-api.com/petstore/pets HTTP/1.1
  Content-Type: application/json
  Content-Length: ...
  
  {
    "type" : "dog",
    "price" : 1001.00
  }
  ```

  Le istanze run-time del metodo `ANY` e le risorse proxy sono entrambe valide. La chiamata restituisce una risposta `200 OK` con il payload contenente il nuovo animale creato, nel modo in cui viene restituito dal back-end.
+ **Imposta `ANY` come `GET` e `{proxy+}` come `pets/cat`**

  Richiesta di metodo iniziata dal front-end:

  ```
  GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/pets/cat
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/cat
  ```

  L'istanza run-time del percorso della risorsa del proxy non corrisponde all'endpoint di un back-end e la relativa richiesta non è valida. Di conseguenza, viene restituita una risposta `400 Bad Request` con il seguente messaggio di errore. 

  ```
  {
    "errors": [
      {
        "key": "Pet2.type",
        "message": "Missing required field"
      },
      {
        "key": "Pet2.price",
        "message": "Missing required field"
      }
    ]
  }
  ```
+ **Imposta `ANY` come `GET` e `{proxy+}` come `null`**

  Richiesta di metodo iniziata dal front-end:

  ```
  GET https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test
  ```

  Richiesta di integrazione inviata al back-end:

  ```
  GET http://petstore-demo-endpoint.execute-api.com/petstore/pets
  ```

  La risorsa di destinazione è il padre della risorsa del proxy, ma l'istanza run-time del metodo `ANY` non è definita nell'API di quella risorsa. Di conseguenza, la richiesta `GET` restituisce una risposta `403 Forbidden` con il messaggio di errore `Missing Authentication Token` restituito da API Gateway. Se l'API espone il metodo `ANY` o `GET` alla risorsa padre (`/`), la chiamata restituisce una risposta `404 Not Found` con il messaggio `Cannot GET /petstore` restituito dal back-end.

Per qualsiasi richiesta del client, se l'URL dell'endpoint di destinazione non è valido o il verbo HTTP è valido ma non è supportato, il back-end restituisce una risposta `404 Not Found`. Per un metodo HTTP non supportato, viene restituita una risposta `403 Forbidden`.

## Configurazione di integrazioni personalizzate HTTP in API Gateway
<a name="set-up-http-custom-integrations"></a>

 Con l’integrazione HTTP personalizzata, conosciuta anche come integrazione non proxy, si ha più controllo su quali dati passare tra un metodo API e un’integrazione API e su come passarli. Puoi fare questo utilizzando le mappature dei dati. 

Come parte della configurazione della richiesta del metodo, imposti la proprietà [requestParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#requestParameters) su una risorsa [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html). Questo dichiara quali parametri della richiesta di metodo, forniti dal client, devono essere mappati ai parametri di richiesta di integrazione o alle proprietà del corpo applicabili prima di essere inviati al back-end. Quindi, come parte della configurazione della richiesta di integrazione, impostate la proprietà [RequestParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#requestParameters) sulla risorsa di [integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) corrispondente per specificare le parameter-to-parameter mappature. Imposti inoltre la proprietà [requestTemplates](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#requestTemplates) per specificare i modelli di mappatura, uno per ogni tipo di contenuto supportato. I modelli di mappatura mappano i parametri della richiesta di metodo, o il corpo, al corpo della richiesta di integrazione. 

 Analogamente, come parte della configurazione della risposta del metodo, impostate la proprietà [ResponseParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html#responseParameters) sulla risorsa. [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html) Questo dichiara quali parametri della risposta di metodo, da inviare al client, devono essere mappati dai parametri della risposta di integrazione o da alcune proprietà del corpo applicabili restituite dal back-end. Quindi si configura [selectionPattern](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html#selectionPattern) per scegliere una risposta di integrazione basata sulla risposta del backend. Per un’integrazione HTTP non proxy, si tratta di un’espressione regolare. Ad esempio, per mappare tutti i codici di stato delle risposte HTTP 2xx da un endpoint HTTP a questa mappatura di output, si usa `2\d{2}`.

**Nota**  
API Gateway usa le espressioni regolari basate sullo stile del modello Java per la mappatura della risposta. Per ulteriori informazioni, consulta [Pattern](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) nella documentazione Oracle.

Quindi, come parte della configurazione della risposta di integrazione, impostate la proprietà [ResponseParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html#responseParameters) sulla risorsa [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)corrispondente per specificare le mappature. parameter-to-parameter Imposti inoltre la mappa [responseTemplates](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html#responseTemplates) per specificare i modelli di mappatura, uno per ogni tipo di contenuto supportato. I modelli di mappatura mappano i parametri della risposta di integrazione, o le proprietà del corpo della risposta di integrazione, al corpo della risposta del metodo. 

 Per ulteriori informazioni sulla configurazione dei modelli di mappatura, consulta [Trasformazioni dei dati per REST APIs in API Gateway](rest-api-data-transformations.md).

# Trasmetti in streaming la risposta di integrazione per le integrazioni proxy in API Gateway
<a name="response-transfer-mode"></a>

Puoi configurare l’integrazione del proxy per controllare in che modo API Gateway restituisce la tua risposta di integrazione. Per impostazione predefinita, API Gateway attende di ricevere la risposta completa prima di iniziare la trasmissione. Tuttavia, se imposti la modalità di trasferimento delle risposte dell'integrazione su`STREAM`, API Gateway non attende che una risposta sia completamente calcolata prima di inviarla al client. Lo streaming di risposte funziona per tutti i tipi di endpoint di REST API.

Utilizza lo streaming di risposte per i seguenti casi d'uso:
+ Riduci il time-to-first-byte valore (TTFB) per le applicazioni di intelligenza artificiale generativa come i chatbot.
+ Trasmetti in streaming immagini, video o file musicali di grandi dimensioni senza utilizzare un URL prefirmato S3.
+ Esegui operazioni di lunga durata segnalando progressi incrementali come gli eventi inviati dal server (SSE).
+ Supera il limite di payload di risposta di 10 MB di API Gateway.
+ Supera il limite di timeout di 29 secondi di API Gateway senza richiedere un aumento del limite di timeout di integrazione.
+ Ricevi un payload binario senza configurare i tipi di supporti binari.

## Considerazioni sullo streaming del payload di risposta
<a name="response-transfer-mode-considerations"></a>

Le seguenti considerazioni potrebbero influire sull'utilizzo dello streaming di payload di risposta:
+ È possibile utilizzare lo streaming di payload di risposta solo per i `HTTP_PROXY` tipi di integrazione. `AWS_PROXY` Ciò include le integrazioni proxy Lambda e le integrazioni private che utilizzano integrazioni. `HTTP_PROXY`
+ L'impostazione predefinita della modalità di trasferimento è. `BUFFERED` Per utilizzare lo streaming di risposta, è necessario modificare la modalità di trasferimento della risposta in`STREAM`.
+ Lo streaming di risposte è supportato solo per REST APIs.
+ Lo streaming delle richieste non è supportato.
+ Puoi trasmettere in streaming la tua risposta per un massimo di 15 minuti.
+ I tuoi stream sono soggetti a timeout di inattività. Per gli endpoint regionali o privati, il timeout è di 5 minuti. Per gli endpoint ottimizzati per l'edge, il timeout è di 30 secondi.
+ Se utilizzi lo streaming di risposta per un'API REST regionale con la tua CloudFront distribuzione, puoi ottenere un timeout di inattività superiore a 30 secondi aumentando il timeout di risposta della tua distribuzione. CloudFront Per ulteriori informazioni, consulta Timeout di [risposta](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout).
+ Quando la modalità di trasferimento della risposta è impostata su`STREAM`, API Gateway non può supportare funzionalità che richiedono il buffering dell'intera risposta di integrazione. Per questo motivo, le seguenti funzionalità non sono supportate con lo streaming di risposta:
  + Memorizzazione nella cache degli endpoint
  + Codifica dei contenuti. Se desideri comprimere la tua risposta di integrazione, esegui questa operazione nella tua integrazione.
  + Trasformazione della risposta con VTL
+ All'interno di ogni risposta in streaming, i primi 10 MB di payload di risposta non sono soggetti ad alcuna restrizione di larghezza di banda. I dati di payload di risposta superiori a 10 MB sono limitati a 2 MB/s.
+ Quando la connessione tra il client e API Gateway o tra API Gateway e Lambda viene chiusa a causa di un timeout, la funzione Lambda potrebbe continuare a essere eseguita. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Lo streaming delle risposte comporta un costo. Per ulteriori informazioni, consulta [Prezzi di API Gateway](https://aws.amazon.com/api-gateway/pricing/).

# Configura un'integrazione proxy HTTP con lo streaming di risposta del payload in API Gateway
<a name="response-streaming-http"></a>

Quando si configura lo streaming del payload di risposta, si specifica la modalità di trasferimento della risposta nella richiesta di integrazione del metodo. Queste impostazioni vengono configurate nella richiesta di integrazione per controllare il comportamento di API Gateway prima e durante la risposta di integrazione. Quando utilizzi lo streaming di risposte, puoi configurare il timeout di integrazione fino a 15 minuti.

Quando utilizzi lo streaming di risposta del payload con un'`HTTP_PROXY`integrazione, API Gateway non invia il codice di stato della risposta HTTP o alcuna intestazione di risposta HTTP finché non riceve completamente tutte le intestazioni.

## Crea un'integrazione proxy HTTP con lo streaming di risposta del payload
<a name="response-streaming-http-create"></a>

La procedura seguente mostra come importare una nuova API con l'`responseTransferMode`impostazione su. `STREAM` Se disponi di un'API di integrazione esistente e desideri modificarla`responseTransferMode`, consulta[Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP](#response-streaming-http-update).

------
#### [ Console di gestione AWS ]

**Per creare un'integrazione proxy HTTP con lo streaming di risposta del payload**

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

1. Scegliere una REST API.

1. Scegli **Crea risorsa**.

1. Per **Resource Name (Nome risorsa)** immetti **streaming**.

1. Scegli **Crea risorsa**.

1. **Con la risorsa **/streaming** selezionata, scegli il metodo Create.**

1. Per **Tipo di metodo**, scegliete **QUALSIASI**.

1. Per **Tipo di integrazione** scegli **Fittizio**.

1. Scegli l'**integrazione con il proxy HTTP**.

1. Per la **modalità di trasferimento Response**, scegli **Stream**.

1. Per il **metodo HTTP**, scegliete un metodo.

1. Per **Endpoint URL**, inserisci un endpoint di integrazione. Assicurati di scegliere un endpoint che produca un payload di grandi dimensioni da trasmettere in streaming.

1. Scegli **Crea metodo**.

Dopo aver creato il metodo, implementa l'API.

**Per distribuire l'API**

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

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

------
#### [ AWS CLI ]

**Per creare una nuova API con streaming di risposta al payload**

1. Copia il seguente file Open API, quindi salvalo con nome. `ResponseStreamDemoSwagger.yaml` In questo file, `responseTransferMode` è impostato su`STREAM`. L'endpoint di integrazione è impostato su`https://example.com`, ma ti consigliamo di modificarlo su un endpoint che produca un payload di grandi dimensioni da trasmettere in streaming.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /streaming:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "GET"
           uri: "https://example.com"
           type: "http_proxy"
           timeoutInMillis: 900000
           responseTransferMode: "STREAM"
   ```

1. Usa il seguente `import-rest-api` comando per importare la tua definizione OpenAPI:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Usa il seguente `create-deployment` comando per distribuire la tua nuova API in una fase:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c3 \
     --stage-name prod \
     --region us-west-1
   ```

------

## Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP
<a name="response-streaming-http-update"></a>

La procedura seguente mostra come aggiornare la modalità di trasferimento della risposta per un'integrazione con proxy HTTP.

------
#### [ Console di gestione AWS ]

**Per aggiornare la modalità di trasferimento delle risposte per un'integrazione con proxy HTTP**

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

1. Scegliere una REST API.

1. Scegliere un metodo.

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

1. **Per la **modalità di trasferimento Response**, scegli Stream.**

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

Dopo aver aggiornato il metodo, distribuisci l'API.

**Per distribuire l'API**

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

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

------
#### [ AWS CLI ]

Il `update-integration` comando seguente aggiorna la modalità di trasferimento di un'integrazione da `BUFFERED` a`STREAM`. Per tutte le integrazioni esistenti APIs, la modalità di trasferimento della risposta per tutte le integrazioni è impostata su. `BUFFERED`

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=STREAM" \
 --region us-west-1
```

È necessario ridistribuire l'API per rendere effettive le modifiche. Se hai personalizzato il timeout di integrazione, questo valore di timeout viene rimosso, poiché API Gateway trasmette la tua risposta per un massimo di 5 minuti.

Il `update-integration` comando seguente aggiorna la modalità di trasferimento di un'integrazione da a: `STREAM` `BUFFERED`

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=BUFFERED" \
 --region us-west-1
```

È necessario ridistribuire l'API per rendere effettive le modifiche.

------

# Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway
<a name="response-transfer-mode-lambda"></a>

Puoi trasmettere in streaming la risposta di una funzione Lambda per migliorare le prestazioni del time-to-first byte (TTFB) e inviare risposte parziali al client non appena diventano disponibili. API Gateway richiede l'utilizzo dell'API [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)Lambda per richiamare la funzione Lambda. API Gateway passa un oggetto evento alla funzione Lambda. La funzione Lambda back-end analizza i dati delle richieste in entrata per stabilire la risposta da restituire. Affinché API Gateway possa trasmettere l'output Lambda, la funzione Lambda deve restituire il [formato](#response-transfer-mode-lambda-format) richiesto da API Gateway.

## Differenze nelle integrazioni del proxy Lambda tra la modalità di trasferimento di risposta in streaming e bufferizzata
<a name="response-transfer-mode-lambda-comparison"></a>

L'elenco seguente descrive le differenze tra un'integrazione con proxy Lambda e un'integrazione con proxy Lambda per lo streaming di risposte:
+ API Gateway utilizza l'[InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API per richiamare l'integrazione del proxy Lambda per lo streaming delle risposte. Ciò si traduce in un URI diverso, che è il seguente:

  ```
  arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations
  ```

  Questo ARN utilizza una data diversa per la versione dell'API e un'azione di servizio diversa rispetto all'integrazione del proxy Lambda.

  Se utilizzi la console API Gateway per lo streaming delle risposte, la console utilizza l'URI corretto per te.
+ In un'integrazione con proxy Lambda, API Gateway invia la risposta al client solo dopo aver ricevuto la risposta completa da Lambda. In un'integrazione proxy Lambda per lo streaming di risposte, API Gateway avvia il flusso di payload dopo aver ricevuto i metadati e il delimitatore validi da Lambda. 
+ L'integrazione del proxy Lambda per lo streaming di risposte utilizza lo stesso formato di input dell'integrazione proxy, ma richiede un formato di output diverso.

## Formato di integrazione proxy Lambda per lo streaming delle risposte
<a name="response-transfer-mode-lambda-format"></a>

Quando API Gateway richiama una funzione Lambda con streaming di risposte, il formato di input è lo stesso di quello di una funzione Lambda per l'integrazione del proxy. Per ulteriori informazioni, consulta [Formato di input di una funzione Lambda per l'integrazione proxy](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

Quando Lambda invia una risposta a API Gateway, la risposta deve rispettare il seguente formato. Questo formato utilizza un delimitatore per separare i metadati JSON dal payload non elaborato. In questo caso, i dati del payload vengono trasmessi in streaming man mano che vengono trasmessi dalla funzione di streaming Lambda:

```
{
  "headers": {"headerName": "headerValue", ...},
  "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },
  "cookies" : ["cookie1", "cookie2"],
  "statusCode": httpStatusCode
}<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3
```

Nell'output:
+ Le `statusCode` chiavi`headers`, `multiValueHeaders``cookies`, e possono non essere specificate se non devono essere restituite intestazioni di risposta aggiuntive.
+ La chiave `headers` può contenere solo una decina di intestazioni di valore.
+ L'output prevede che le intestazioni contengano o. `Transfer-Encoding: chunked` `Content-length: number` Se la funzione non restituisce nessuna di queste intestazioni, API Gateway viene aggiunta `Transfer-Encoding: chunked` all'intestazione della risposta.
+ La chiave `multiValueHeaders` può contenere intestazioni multi-valore e il valore di una decina di intestazioni. È possibile utilizzare la chiave `multiValueHeaders` per specificare tutte le intestazioni aggiuntive, incluse quelle con valore singolo.
+ Se si specificano valori sia per `headers` che per `multiValueHeaders`, API Gateway li unisce in un unico elenco. Se la stessa coppia chiave-valore viene specificata in entrambi, solo i valori di `multiValueHeaders` verranno visualizzati nell'elenco risultante.
+ I metadati devono essere in formato JSON valido. Solo `headers``multiValueHeaders`, `cookies` e le `statusCode` chiavi sono supportate.
+ È necessario fornire un delimitatore dopo i metadati JSON. Il delimitatore deve essere composto da 8 byte nulli e deve apparire all'interno dei primi 16 KB di dati di flusso.
+ API Gateway non richiede un formato specifico per il payload di risposta del metodo.

Se utilizzi l'URL di una funzione per lo streaming della tua funzione Lambda, devi modificare l'input e l'output della funzione Lambda per soddisfare questi requisiti.

Se l'output della funzione Lambda non soddisfa i requisiti di questo formato, API Gateway potrebbe comunque richiamare la funzione Lambda. La tabella seguente mostra le combinazioni delle impostazioni della richiesta di integrazione API e del codice della funzione Lambda supportato da API Gateway. Ciò include le combinazioni supportate per la modalità di trasferimento della risposta in modalità buffered.


| Modalità di trasferimento della risposta | Il codice della funzione è conforme al formato richiesto | API di richiamo Lambda | Supportato da API Gateway | 
| --- | --- | --- | --- | 
|  Flusso  |  Sì  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Sì. API Gateway trasmette la tua risposta.  | 
|  Flusso  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway richiama la funzione Lambda e restituisce una risposta di errore 500.  | 
|  Flusso  |  Sì  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Flusso  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  Sì  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  No  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  No. API Gateway non supporta questa configurazione di integrazione.  | 
|  Bufferato  |  Sì  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  API Gateway restituisce le intestazioni HTTP e il codice di stato ma non il corpo della risposta.  | 
|  Bufferato  |  No  |   [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Sì. Si tratta di un'integrazione proxy Lambda. Per ulteriori informazioni, consulta Integrazione del [proxy Lambda](set-up-lambda-proxy-integrations.md).  | 

# Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway
<a name="response-streaming-lambda-configure"></a>

Quando configuri lo streaming del payload di risposta, specifichi la modalità di trasferimento nella richiesta di integrazione della risorsa. Queste impostazioni vengono configurate nella richiesta di integrazione per controllare il comportamento di API Gateway prima e durante la risposta di integrazione.

## Esempi di funzioni Lambda per lo streaming delle risposte
<a name="response-streaming-lambda-example"></a>

La tua funzione Lambda deve rispettare il. [Formato di integrazione proxy Lambda per lo streaming delle risposte](response-transfer-mode-lambda.md#response-transfer-mode-lambda-format) Ti consigliamo di utilizzare una delle tre funzioni Lambda di esempio per testare lo streaming delle risposte. Quando crei la tua funzione Lambda, assicurati di fare quanto segue:
+ Fornisci un timeout adeguato per la tua funzione. Ti consigliamo di configurare un timeout di almeno 1 minuto per conoscere lo streaming di risposte. Quando crei le tue risorse di produzione, assicurati che il timeout della funzione Lambda copra l'intero ciclo di richiesta. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Usa il runtime Node.js più recente.
+ Usa una regione in cui è disponibile lo streaming di risposta Lambda.

------
#### [ Using HttpResponseStream.from ]

Il seguente esempio di codice trasmette gli oggetti di metadati e i payload JSON al client utilizzando il `awslambda.HttpResponseStream()` metodo senza utilizzare il metodo pipeline. Non è necessario creare il delimitatore. Per ulteriori informazioni, consulta [Scrittura di funzioni Lambda abilitate allo streaming di risposte](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

```
export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      "statusCode": 200,
      "headers": {
        "x-foo": "bar"
      },
      "multiValueHeaders": {
        "x-mv1": ["hello", "world"],
        "Set-Cookie": ["c1=blue", "c2=red"]
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("First payload ");
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("Final payload");
    responseStream.end();
});
```

------
#### [ Using the pipeline method ]

Lambda consiglia, quando si scrivono funzioni abilitate allo streaming di risposte, di utilizzare il `awslambda.streamifyResponse()` decoratore fornito dai runtime nativi di Node.js e il metodo. `pipeline()` Quando usi il metodo pipeline, non è necessario creare il delimitatore, Lambda lo fa per te. Per ulteriori informazioni, consulta [Scrittura di funzioni Lambda abilitate allo streaming di risposte](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

Il seguente esempio di codice invia gli oggetti di metadati JSON e tre payload al client.

```
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';

export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      statusCode: 200,
      headers: {
        "Content-Type": "text/plain",
        "X-Custom-Header": "Example-Custom-Header"
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);

    const dataStream = Readable.from(async function* () {
      yield "FIRST payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "SECOND payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "THIRD payload\n";
      await new Promise(r => setTimeout(r, 1000));
    }());

    await pipeline(dataStream, responseStream);
  }
);
```

------
#### [ Without using the pipeline method ]

Il seguente esempio di codice invia gli oggetti di metadati JSON e tre payload al client senza utilizzare il metodo. `awslambda.HttpResponseStream()` Senza il `awslambda.HttpResponseStream()` metodo, è necessario includere un delimitatore di 8 byte nulli tra i metadati e il payload. 

```
export const handler = awslambda.streamifyResponse(async (event, response, ctx) => {
  response.write('{"statusCode": 200, "headers": {"hdr-x": "val-x"}}');
  response.write("\x00".repeat(8)); // DELIMITER
  await new Promise(r => setTimeout(r, 1000));

  response.write("FIRST payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("SECOND payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("FINAL payload");
  response.end();
});
```

------

## Crea un'integrazione proxy Lambda con lo streaming di risposta del payload
<a name="response-streaming-lambda-create"></a>

La procedura seguente mostra come creare un'integrazione proxy Lambda con lo streaming di risposta del payload. Usa la funzione Lambda di esempio o creane una tua.

------
#### [ Console di gestione AWS ]

**Per creare un'integrazione proxy Lambda con lo streaming di risposta del payload**

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

1. Scegliere una REST API.

1. Scegli **Crea risorsa**.

1. Per **Resource Name (Nome risorsa)** immetti **streaming**.

1. Scegli **Crea risorsa**.

1. **Con la risorsa **/streaming** selezionata, scegli il metodo Create.**

1. Per **Tipo di metodo**, scegliete **QUALSIASI**.

1. Per **Tipo di integrazione**, scegli **Lambda**.

1. Scegli l'integrazione con **proxy Lambda**.

1. Per la **modalità di trasferimento Response**, scegli **Stream**.

1. Per la **funzione Lambda**, scegli il nome della tua funzione Lambda.

   La console API Gateway utilizza automaticamente [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)l'API per richiamare la funzione Lambda. Sei responsabile della scrittura di una funzione Lambda abilitata per lo streaming di risposte. Per vedere un esempio, consulta [Esempi di funzioni Lambda per lo streaming delle risposte](#response-streaming-lambda-example).

1. Scegli **Crea metodo**.

Dopo aver creato il metodo, distribuisci l'API.

**Per distribuire l'API**

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

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

------
#### [ AWS CLI ]

La procedura seguente mostra come importare una nuova API con l'`responseTransferMode`impostazione su. `STREAM` Se disponi di un'API di integrazione esistente e desideri modificarla`responseTransferMode`, consulta[Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy Lambda](#response-streaming-lambda-update).

**Per creare una nuova API con streaming di risposta al payload**

1. Copia il seguente file Open API, quindi salvalo con nome. `ResponseStreamDemoSwagger.yaml` In questo file, `responseTransferMode` è impostato `STREAM` su e l'URI di integrazione è impostato su`arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations`.

   Sostituisci il nome della funzione `my-function` con una funzione abilitata allo streaming e sostituisci le credenziali con un ruolo IAM dotato di policy che consentono al `apigateway` servizio di richiamare le funzioni Lambda.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /lambda:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "POST"
           uri: "arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations"
           type: "aws_proxy"
           timeoutInMillis: 90000
           responseTransferMode: "STREAM"
           credentials: "arn:aws:iam::111122223333:role/apigateway-lambda-role"
   ```

   Invece di fornire un ruolo IAM per le credenziali, puoi utilizzare il `add-permission` comando per Lambda per aggiungere autorizzazioni basate sulle risorse.

1. Usa il seguente `import-rest-api` comando per importare la tua definizione OpenAPI:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Usa il seguente `create-deployment` comando per distribuire la tua nuova API in una fase:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c2 \
     --stage-name prod \
     --region us-west-1
   ```

------

### Aggiorna la modalità di trasferimento delle risposte per un'integrazione con proxy Lambda
<a name="response-streaming-lambda-update"></a>

La procedura seguente mostra come aggiornare la modalità di trasferimento delle risposte per un'integrazione proxy Lambda. Quando modifichi la modalità di trasferimento della risposta in streaming, aggiorna la funzione Lambda in modo che soddisfi i requisiti per lo streaming di risposta. Usa la funzione Lambda di esempio o creane una tua.

------
#### [ Console di gestione AWS ]

**Per aggiornare la modalità di trasferimento delle risposte per l'integrazione di un proxy Lambda**

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

1. Scegliere una REST API.

1. Scegliere un metodo.

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

1. **Per la **modalità di trasferimento Response**, scegli Stream.**

1. Per la **funzione Lambda**, scegli il nome della tua funzione Lambda.

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

Dopo aver aggiornato il metodo, distribuisci l'API.

**Per distribuire l'API**

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

1. In **Fase**, seleziona **Nuova fase**.

1. In **Stage name (Nome fase)** immettere **prod**.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

------
#### [ AWS CLI ]

1. Aggiorna la tua funzione Lambda in modo che sia abilitata allo streaming.

1. Usa il seguente AWS CLI comando per aggiornare l'URI di integrazione e la modalità di trasferimento delle risposte della tua integrazione:

   ```
   aws apigateway update-integration \
    --rest-api-id a1b2c3 \
    --resource-id aaa111 \
    --http-method ANY \
    --patch-operations "[{\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations\"}, {\"op\":\"replace\",\"path\":\"/responseTransferMode\",\"value\":\"STREAM\"}]" \
    --region us-west-1
   ```

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------

# Risolvi i problemi relativi allo streaming delle risposte in API Gateway
<a name="response-streaming-troubleshoot"></a>

La seguente guida per la risoluzione dei problemi potrebbe aiutare a risolvere i problemi relativi allo streaming di risposta APIs che utilizza.

## Risoluzione dei problemi generali
<a name="response-streaming-general-troubleshooting"></a>

Puoi utilizzare la scheda di test [TestInvokeMethod](https://docs.aws.amazon.com/apigateway/latest/api/API_TestInvokeMethod.html)o la scheda di test della console per testare la risposta dello stream. Le seguenti considerazioni potrebbero influire sull'utilizzo di test invoke per lo streaming di risposte:
+ Quando testate il vostro metodo, API Gateway memorizza nel buffer il payload di risposta in streaming. Una volta soddisfatta una delle seguenti condizioni, API Gateway restituisce una risposta unica contenente il payload bufferizzato:
  + La richiesta è completa
  + Sono trascorsi 35 secondi
  + È stato memorizzato nel buffer più di 1 MB di payload di risposta
+ Se trascorrono più di 35 secondi prima che il metodo restituisca lo stato di risposta HTTP e tutte le intestazioni, lo stato della risposta restituito è 0. TestInvokeMethod 
+ API Gateway non produce alcun log di esecuzione.

Dopo aver distribuito l'API, puoi testare la risposta dello stream utilizzando un comando curl. Ti consigliamo di utilizzare l'`-i`opzione per includere le intestazioni di risposta del protocollo nell'output. Per vedere i dati di risposta non appena arrivano, usa l'opzione curl `--no-buffer`

## Risolvi gli errori cURL
<a name="response-streaming-troubleshoot-curl-error"></a>

Se stai testando un'integrazione e ricevi l'errore`curl: (18) transfer closed with outstanding read data remaining`, assicurati che il timeout dell'integrazione sia sufficientemente lungo. Se utilizzi una funzione Lambda, devi aggiornare il timeout di risposta della funzione Lambda. Per ulteriori informazioni, consulta [Configurare il timeout della funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).

## Risolvi i problemi relativi all'utilizzo della registrazione degli accessi
<a name="response-streaming-troubleshoot-access-logging"></a>

Puoi utilizzare i log di accesso per la fase dell'API REST per registrare e risolvere i problemi del flusso di risposta. Oltre alle variabili esistenti, puoi utilizzare le seguenti variabili di registro degli accessi:

`$context.integration.responseTransferMode`  
La modalità di trasferimento delle risposte della tua integrazione. Ciò può essere `BUFFERED` o `STREAMED`.

`$context.integration.timeToAllHeaders`  
Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve tutte le intestazioni di risposta all'integrazione dal client.

`$context.integration.timeToFirstContent`  
Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve i primi byte di contenuto.

`$context.integration.latency` o `$context.integrationLatency`  
Il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui il flusso di risposta dell'integrazione è completo.

La figura seguente mostra come queste variabili di log di accesso rappresentino diversi componenti di un flusso di risposta.

![\[Accedi alle variabili di registro per lo streaming delle risposte in API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/response-streaming-figure.png)


Per ulteriori informazioni sui log degli accessi al, consultare [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md). Puoi anche usare X-Ray per monitorare il flusso di risposta. Per ulteriori informazioni, consulta [Traccia delle richieste degli utenti alle REST API utilizzando X-Ray in Gateway API](apigateway-xray.md).

# Integrazioni private per REST APIs in API Gateway
<a name="private-integration"></a>

Utilizza un'integrazione privata per esporre HTTP/HTTPS le tue risorse all'interno di un Amazon VPC per consentire l'accesso da parte di client esterni al VPC. Ciò estende l'accesso alle tue risorse VPC private oltre i confini del VPC. È possibile controllare l'accesso all'API utilizzando uno qualsiasi dei [ metodi di autorizzazione](apigateway-control-access-to-api.md) supportati da API Gateway.

Per creare un'integrazione privata, devi innanzitutto creare un collegamento VPC. API Gateway supporta i collegamenti VPC V2 per REST. APIs I collegamenti VPC V2 consentono di creare integrazioni private che collegano l'API REST agli Application Load Balancer senza utilizzare un Network Load Balancer. L'utilizzo di un Application Load Balancer ti consente di connetterti alle applicazioni ECSs basate su container Amazon e a molti altri backend. I link VPC V1 sono considerati un tipo di integrazione legacy. Sebbene siano supportati da API Gateway, ti consigliamo di non creare nuovi collegamenti VPC V1.

## Considerazioni
<a name="private-integrations-considerations"></a>

Le seguenti considerazioni potrebbero influire sull'utilizzo delle integrazioni private:
+ Tutte le risorse devono essere di proprietà dello stesso. Account AWS Ciò include il sistema di bilanciamento del carico, il collegamento VPC e l'API REST.
+ Per impostazione predefinita, il traffico di integrazione privata utilizza il protocollo HTTP. Per utilizzare HTTPS, specifica un file [https://docs.aws.amazon.com/apigateway/latest/api/API_PutIntegration.html#apigw-PutIntegration-request-uri](https://docs.aws.amazon.com/apigateway/latest/api/API_PutIntegration.html#apigw-PutIntegration-request-uri)che contenga un nome di server sicuro, ad esempio. `https://example.com:443/test`
+ In un'integrazione privata, API Gateway include la parte di [fase](set-up-stages.md) dell'endpoint API nella richiesta alle risorse di backend. Ad esempio, se richiedi la `test` fase di un'API, API Gateway include `test/path` nella richiesta alla tua integrazione privata. Per rimuovere il nome della fase dalla richiesta alle risorse di backend, utilizzate la [mappatura dei parametri](rest-api-parameter-mapping.md) per creare un override per la variabile. `$context.requestOverride.path`
+ Le integrazioni private con AWS Cloud Map non sono supportate.

**Topics**
+ [Considerazioni](#private-integrations-considerations)
+ [Configura i collegamenti VPC V2 in API Gateway](apigateway-vpc-links-v2.md)
+ [Configura un'integrazione privata](set-up-private-integration.md)
+ [Integrazione privata tramite collegamenti VPC V1 (legacy)](vpc-links-v1.md)

# Configura i collegamenti VPC V2 in API Gateway
<a name="apigateway-vpc-links-v2"></a>

I link VPC ti consentono di creare integrazioni private che collegano i tuoi percorsi API a risorse private in un VPC, come Application Load Balancers o applicazioni basate su container Amazon ECS. Un'integrazione privata utilizza un collegamento VPC V2 per incapsulare le connessioni tra API Gateway e risorse VPC mirate. Puoi riutilizzare i link VPC su diverse risorse e. APIs

Quando crei un collegamento VPC, API Gateway crea e gestisce [interfacce di rete elastiche](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) per il collegamento VPC V2 nel tuo account. Questo processo può richiedere alcuni minuti. Quando un collegamento VPC V2 è pronto per l'uso, il suo stato passa da a. `PENDING` `AVAILABLE` 

**Nota**  
Se non viene inviato alcun traffico tramite il collegamento VPC per 60 giorni, lo stato cambia in `INACTIVE`. Quando lo stato di un collegamento VPC è `INACTIVE`, API Gateway elimina tutte le interfacce di rete del collegamento VPC. In questo caso, le richieste API che dipendono dal collegamento VPC non vanno a buon fine. Se le richieste API riprendono, API Gateway effettua nuovamente il provisioning delle interfacce di rete. Potrebbero essere necessari alcuni minuti per creare le interfacce di rete e riattivare il collegamento VPC. Puoi utilizzare lo stato del collegamento VPC per monitorare lo stato del tuo collegamento VPC.

## Creare un collegamento VPC V2 utilizzando AWS CLI
<a name="apigateway-vpc-links-v2-create"></a>

Per creare un collegamento VPC V2, tutte le risorse coinvolte devono essere di proprietà dello stesso account. AWS Il [create-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-vpc-link.html)comando seguente crea un collegamento VPC:

```
aws apigatewayv2 create-vpc-link --name MyVpcLink \
    --subnet-ids subnet-aaaa subnet-bbbb \
    --security-group-ids sg1234 sg5678
```

**Nota**  
I link VPC V2 sono immutabili. Dopo aver creato un collegamento VPC V2, non puoi modificarne le sottoreti o i gruppi di sicurezza.

## Eliminare un collegamento VPC V2 utilizzando il AWS CLI
<a name="apigateway-vpc-links-v2-delete"></a>

Il [delete-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/delete-vpc-link.html)comando seguente elimina un collegamento VPC.

```
aws apigatewayv2 delete-vpc-link --vpc-link-id abcd123
```

## Disponibilità in base alla Regione
<a name="apigateway-vpc-links-v2-availability"></a>

I collegamenti VPC V2 sono supportati nelle seguenti regioni e zone di disponibilità:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/apigateway-vpc-links-v2.html)

# Configura un'integrazione privata
<a name="set-up-private-integration"></a>

Per creare un'integrazione privata con un Application Load Balancer o Network Load Balancer, devi creare un'integrazione proxy HTTP, specificare il [link VPC V2](apigateway-vpc-links-v2.md) da utilizzare e fornire l'ARN di un Network Load Balancer o di un Application Load Balancer. Per impostazione predefinita, il traffico di integrazione privata utilizza il protocollo HTTP. Per utilizzare HTTPS, specificane uno [https://docs.aws.amazon.com/apigateway/latest/api/API_PutIntegration.html#apigw-PutIntegration-request-uri](https://docs.aws.amazon.com/apigateway/latest/api/API_PutIntegration.html#apigw-PutIntegration-request-uri)che contenga un nome di server sicuro, ad esempio. `https://example.com:443/test` Per un tutorial completo su come creare un'API REST con un'integrazione privata, consulta[Tutorial: creazione di una REST API con un'integrazione privata](getting-started-with-private-integration.md).

## Creazione di un'integrazione privata
<a name="set-up-private-integration-create"></a>

La procedura seguente mostra come creare un'integrazione privata che si connette a un sistema di bilanciamento del carico utilizzando un collegamento VPC V2.

------
#### [ Console di gestione AWS ]

Per un tutorial su come creare un'integrazione privata, vedi,. [Tutorial: creazione di una REST API con un'integrazione privata](getting-started-with-private-integration.md)

------
#### [ AWS CLI ]

Il seguente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/latest/api/API_PutIntegration.html) crea un'integrazione privata che si connette a un sistema di bilanciamento del carico utilizzando un collegamento VPC V2:

```
aws apigateway put-integration \
    --rest-api-id abcdef123 \
    --resource-id aaa000 \
    --integration-target 'arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011' \
    --uri 'https://example.com:443/path' \
    --http-method GET \
    --type HTTP_PROXY \
    --integration-http-method GET \
    --connection-type VPC_LINK \
    --connection-id bbb111
```

Invece di fornire direttamente l'ID di connessione, puoi utilizzare una variabile di fase. Quando distribuisci l'API su una fase, imposti l'ID VPC link V2. Il seguente comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/latest/api/API_PutIntegration.html) crea un'integrazione privata utilizzando una variabile stage per l'ID VPC link V2:

```
aws apigateway put-integration \
    --rest-api-id abcdef123 \
    --resource-id aaa000 \
    --integration-target 'arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011' \
    --uri 'https://example.com:443/path' \
    --http-method GET \
    --type HTTP_PROXY \
    --integration-http-method GET \
    --connection-type VPC_LINK \
    --connection-id "\${stageVariables.vpcLinkV2Id}"
```

Assicurati di inserire due virgolette nell'espressione della variabile stage (\$1 \$1stageVariables.vpclinkV2ID\$1) e di evitare il carattere \$1.

------
#### [ OpenAPI ]

È possibile configurare un'API con integrazione privata importando il file OpenAPI dell'API. Le impostazioni sono simili alle definizioni di OpenAPI di un'API con integrazioni HTTP, con le eccezioni seguenti: 
+ Devi impostare esplicitamente `connectionType` su `VPC_LINK`.
+ Devi impostare esplicitamente `connectionId` sull'ID di un oggetto `VpcLinkV2` o su una variabile di fase che fa riferimento all'ID di un oggetto `VpcLinkV2`.
+ Il `uri` parametro nell'integrazione privata punta a un HTTP/HTTPS endpoint nel VPC, ma viene invece utilizzato per configurare l'intestazione della richiesta `Host` di integrazione.
+ Il parametro `uri` nell'integrazione privata con un endpoint HTTPS in VPC viene usato per verificare il nome di dominio indicato confrontandolo con quello nel certificato installato nell'endpoint VPC.

 Per fare riferimento all'ID di `VpcLinkV2`, è possibile usare una variabile di fase. In alternativa, è possibile assegnare il valore ID direttamente a `connectionId`. 

Il file OpenAPI dell'API in formato JSON seguente mostra un esempio di un'API con un collegamento VPC in base al riferimento nella variabile di fase (`${stageVariables.vpcLinkIdV2}`):

```
{
  "swagger": "2.0",
  "info": {
    "version": "2017-11-17T04:40:23Z",
    "title": "MyApiWithVpcLinkV2"
  },
  "host": "abcdef123.execute-api.us-west-2.amazonaws.com",
  "basePath": "/test",
  "schemes": [
    "https"
  ],
  "paths": {
    "/": {
      "get": {
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "responses": {
            "default": {
              "statusCode": "200"
            }
          },
          "uri": "https://example.com:443/path",
          "passthroughBehavior": "when_no_match",
          "connectionType": "VPC_LINK",
          "connectionId": "${stageVariables.vpcLinkV2Id}",
          "integration-target": "arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011",
          "httpMethod": "GET",
          "type": "http_proxy"
        }
      }
    }
  },
  "definitions": {
    "Empty": {
      "type": "object",
      "title": "Empty Schema"
    }
  }
}
```

------

## Aggiorna un'integrazione privata
<a name="set-up-private-integration-update"></a>

L'esempio seguente aggiorna il collegamento VPC V2 per un'integrazione privata.

------
#### [ Console di gestione AWS ]

**Per aggiornare un'integrazione privata**

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

1. Scegli un'API REST con un'integrazione privata.

1. Scegli la risorsa e il metodo che utilizzano un'integrazione privata.

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

1. Puoi modificare l'impostazione della tua integrazione privata. Se attualmente utilizzi un collegamento VPC V1, puoi modificare il tuo collegamento VPC in un collegamento VPC V2.

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ AWS CLI ]

Il seguente comando [update-integration](https://docs.aws.amazon.com/cli/latest/reference/latest/api/API_PutIntegration.html) aggiorna un'integrazione privata per utilizzare un collegamento VPC V2:

```
aws apigateway update-integration \
    --rest-api-id a1b2c3d4e5 \
    --resource-id a1b2c3 \
    --http-method GET \
    --patch-operations "[{\"op\":\"replace\",\"path\":\"/connectionId\",\"value\":\"pk0000\"}, {\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"http://example.com\"}, {\"op\":\"replace\",\"path\":\"/integrationTarget\",\"value\":\"arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/app/myLoadBalancerName/1234567891011\"}]"
```

------

# Integrazione privata tramite collegamenti VPC V1 (legacy)
<a name="vpc-links-v1"></a>

**Nota**  
La seguente implementazione di integrazioni private utilizza i collegamenti VPC V1. I link VPC V1 sono risorse legacy. Ti consigliamo di utilizzare i [collegamenti VPC V2](apigateway-vpc-links-v2.md) per REST. APIs

Per creare un'integrazione privata, è necessario innanzitutto creare un collegamento Network Load Balancer. Il Network Load Balancer deve disporre di un [listener](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html) che instrada le richieste alle risorse del VPC. Per migliorare la disponibilità della tua API, assicurati che il sistema di Network Load Balancer stia indirizzando il traffico alle risorse in più zone di disponibilità nella Regione AWS. Quindi, si crea un collegamento VPC che viene utilizzato per connettere l'API e il Network Load Balancer. Dopo avere creato un collegamento VPC, è possibile creare integrazioni private per instradare il traffico dall'API alle risorse del VPC tramite il collegamento VPC e il Network Load Balancer. Il Network Load Balancer e l'API devono essere di proprietà dello stesso. Account AWS

**Topics**
+ [Configurazione di un Network Load Balancer per le integrazioni private di API Gateway (legacy)](set-up-nlb-for-vpclink-using-console.md)
+ [Concedi le autorizzazioni per API Gateway per creare un collegamento VPC (legacy)](grant-permissions-to-create-vpclink.md)
+ [Configura un'API API Gateway con integrazioni private utilizzando AWS CLI (legacy)](set-up-api-with-vpclink-cli.md)
+ [Account API Gateway utilizzati per integrazioni private (legacy)](set-up-api-with-vpclink-accounts.md)

# Configurazione di un Network Load Balancer per le integrazioni private di API Gateway (legacy)
<a name="set-up-nlb-for-vpclink-using-console"></a>

**Nota**  
La seguente implementazione di integrazioni private utilizza i collegamenti VPC V1. I link VPC V1 sono risorse legacy. Ti consigliamo di utilizzare i [collegamenti VPC V2](apigateway-vpc-links-v2.md) per REST. APIs

 Nella procedura seguente vengono illustrate le fasi necessarie per configurare un sistema Network Load Balancer (NLB) per le integrazioni private di API Gateway usando la console Amazon EC2 e vengono forniti i riferimenti a istruzioni dettagliate per ogni fase. 

Per ogni VPC in cui sono presenti risorse, è sufficiente configurare un NLB e uno. VPCLink Il NLB supporta più [listener](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html) e [gruppi target](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html) per NLB. È possibile configurare ogni servizio come listener specifico sull'NLB e utilizzarne uno per connettersi all'NLB. VPCLink Al momento della creazione dell'integrazione privata in API Gateway è possibile quindi definire ciascun servizio utilizzando la porta specifica assegnata per il servizio. Per ulteriori informazioni, consulta [Tutorial: creazione di una REST API con un'integrazione privata](getting-started-with-private-integration.md). Il Network Load Balancer e l'API devono essere di proprietà dello stesso. Account AWS

**Per creare un sistema Network Load Balancer per l'integrazione privata tramite la console API Gateway**

1. Accedi Console di gestione AWS e apri la console Amazon EC2 all'indirizzo. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Configura un server Web in un'istanza di Amazon EC2. Per una configurazione di esempio, consulta [Installazione di un server Web LAMP su Amazon Linux 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html). 

1. Crea un sistema Network Load Balancer, registra l'istanza EC2 con un gruppo target e aggiungi il gruppo target a un listener del sistema Network Load Balancer. Per ulteriori informazioni, segui le istruzioni contenute in [Nozioni di base sui sistemi Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancer-getting-started.html). 

1. Dopo la creazione del Network Load Balancer, procedi come segue:

   1.  Prendi nota dell'ARN del Network Load Balancer. Sarà necessario per creare un collegamento VPC in API Gateway per l'integrazione dell'API con le risorse VPC nel sistema Network Load Balancer.

   1.  Disattiva la valutazione dei gruppi di sicurezza per PrivateLink.
      + Per disattivare la valutazione dei gruppi di sicurezza per il PrivateLink traffico che utilizza la console, puoi scegliere la scheda **Sicurezza**, quindi **Modifica**. Nelle **impostazioni di sicurezza**, deseleziona **Applica le regole in entrata al PrivateLink traffico**.
      + Usa il seguente [set-security-groups](https://docs.aws.amazon.com/cli/latest/reference/elbv2/set-security-groups.html)comando per disattivare la valutazione dei gruppi di sicurezza per il PrivateLink traffico:

        ```
        aws elbv2 set-security-groups --load-balancer-arn arn:aws:elasticloadbalancing:us-east-2:111122223333:loadbalancer/net/my-loadbalancer/abc12345 \
          --security-groups sg-123345a --enforce-security-group-inbound-rules-on-private-link-traffic off
        ```

**Nota**  
Non aggiungete alcuna dipendenza ad API Gateway CIDRs poiché sono destinate a cambiare senza preavviso.

# Concedi le autorizzazioni per API Gateway per creare un collegamento VPC (legacy)
<a name="grant-permissions-to-create-vpclink"></a>

**Nota**  
La seguente implementazione di integrazioni private utilizza i collegamenti VPC V1. I link VPC V1 sono risorse legacy. Ti consigliamo di utilizzare i [collegamenti VPC V2](apigateway-vpc-links-v2.md) per REST. APIs

Per poter creare e gestire un collegamento VPC, è necessario disporre delle autorizzazioni per creare, eliminare e visualizzare le configurazioni del servizio endpoint VPC, modificare le autorizzazioni del servizio endpoint VPC ed esaminare i sistemi di bilanciamento del carico. Per concedere tali autorizzazioni, esegui la procedura illustrata di seguito. 

**Per concedere le autorizzazioni per creare, aggiornare o eliminare un link VPC**

1. Crea una policy IAM simile alla seguente:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "apigateway:POST",
                   "apigateway:GET",
                   "apigateway:PATCH",
                   "apigateway:DELETE"
               ],
               "Resource": [
                   "arn:aws:apigateway:us-east-1::/vpclinks",
                   "arn:aws:apigateway:us-east-1::/vpclinks/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "elasticloadbalancing:DescribeLoadBalancers"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateVpcEndpointServiceConfiguration",
                   "ec2:DeleteVpcEndpointServiceConfigurations",
                   "ec2:DescribeVpcEndpointServiceConfigurations",
                   "ec2:ModifyVpcEndpointServicePermissions"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   Se desideri abilitare il tagging per il collegamento VPC, assicurati di consentire le operazioni di tagging. Per ulteriori informazioni, consulta [Consentire operazioni di assegnazione di tag](apigateway-tagging-iam-policy.md#allow-tagging).

1. Crea o scegli un ruolo IAM e collega la policy precedente al ruolo.

1. Assegna il ruolo IAM a te stesso o a un utente nell'account che sta creando collegamenti VPC.

# Configura un'API API Gateway con integrazioni private utilizzando AWS CLI (legacy)
<a name="set-up-api-with-vpclink-cli"></a>

**Nota**  
La seguente implementazione di integrazioni private utilizza i collegamenti VPC V1. I link VPC V1 sono risorse legacy. Ti consigliamo di utilizzare i [collegamenti VPC V2](apigateway-vpc-links-v2.md) per REST. APIs

Il seguente tutorial mostra come utilizzare per AWS CLI creare un collegamento VPC e un'integrazione privata. Devono essere soddisfatti i seguenti prerequisiti:
+ È necessario creare e configurare un Network Load Balancer con l'origine VPC come destinazione. Per ulteriori informazioni, consulta [Configurazione di un Network Load Balancer per le integrazioni private di API Gateway (legacy)](set-up-nlb-for-vpclink-using-console.md). Deve essere Account AWS uguale alla tua API. È necessario l'ARN del Network Load Balancer per creare il collegamento VPC.
+ Per creare e gestire un `VpcLink`, sono necessarie le autorizzazioni per creare un `VpcLink` nell'API. Non sono necessarie autorizzazioni per utilizzare il `VpcLink`. Per ulteriori informazioni, consulta [Concedi le autorizzazioni per API Gateway per creare un collegamento VPC (legacy)](grant-permissions-to-create-vpclink.md).

**Per configurare un'API con l'integrazione privata utilizzando AWS CLI**

1. Usa il [create-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-vpc-link.html)comando seguente per creare un `VpcLink` target per il Network Load Balancer specificato:

   ```
   aws apigateway create-vpc-link \
       --name my-test-vpc-link \
       --target-arns arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef
   ```

   L'output di questo comando riconosce la ricezione della richiesta e mostra lo stato `PENDING` per il `VpcLink` in fase di creazione.

   ```
   {
       "status": "PENDING", 
       "targetArns": [
           "arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/net/my-vpclink-test-nlb/1234567890abcdef"
       ], 
       "id": "gim7c3", 
       "name": "my-test-vpc-link"
   }
   ```

   Per la creazione dell'oggetto `VpcLink` in API Gateway sono necessari da 2 a 4 minuti. Dopo il completamento dell'operazione, il valore di `status` è `AVAILABLE`. È possibile verificarlo utilizzando il seguente comando: [get-vpc-link](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-vpc-link.html)

   ```
   aws apigateway get-vpc-link --vpc-link-id gim7c3
   ```

   Se l'operazione non riesce, lo stato è `FAILED` e `statusMessage` contiene il messaggio di errore. Se, ad esempio, tenti di creare un oggetto `VpcLink` con un sistema Network Load Balancer già associato a un endpoint VPC, la proprietà `statusMessage` contiene quanto segue:

   ```
   "NLB is already associated with another VPC Endpoint Service"
   ```

   Dopo la corretta creazione di `VpcLink` è possibile creare un'API e integrarla con la risorsa VPC tramite la `VpcLink`. 

   Prendi nota del valore `id` del `VpcLink` appena creato. In questo output di esempio, è `gim7c3`. Questo valore è necessario per configurare l'integrazione privata.

1. Utilizzate il seguente [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando per creare una [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa API Gateway:

   ```
   aws apigateway create-rest-api --name 'My VPC Link Test'
   ```

   Prendi nota del valore `id` di `RestApi` e del valore `rootResourceId` di `RestApi` nel risultato restituito. Questo valore è necessario per eseguire ulteriori operazioni sull'API. 

   Quindi, crea un’API con solo un metodo `GET` nella risorsa root (`/`) e integra il metodo con `VpcLink`.

1. Utilizza il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente per creare il metodo `GET /`:

   ```
   aws apigateway put-method \
          --rest-api-id  abcdef123 \
          --resource-id skpp60rab7 \
          --http-method GET \
          --authorization-type "NONE"
   ```

   Se non usi l'integrazione proxy con il `VpcLink`, devi configurare anche almeno una risposta del metodo per il codice di stato `200`. In questo caso si usa l’integrazione proxy.

1. Dopo aver creato il metodo `GET /`, viene configurata l'integrazione. Per un'integrazione privata, si utilizza il parametro `connection-id` per fornire l'ID del `VpcLink`. Puoi utilizzare una variabile di fase o inserire direttamente l'ID del `VpcLink`. Il parametro `uri` non viene usato per il routing delle richieste all'endpoint, ma viene usato per impostare l'intestazione `Host` per la convalida del certificato. 

------
#### [ Use the VPC link ID ]

   Utilizza il comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) seguente per usare l’ID del `VpcLink` direttamente nell’integrazione:

   ```
   aws apigateway put-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \
       --http-method GET \
       --type HTTP_PROXY \
       --integration-http-method GET \
       --connection-type VPC_LINK \
       --connection-id gim7c3
   ```

------
#### [ Use a stage variable ]

   Utilizza il comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) seguente per usare una variabile di fase per fare riferimento all’ID del collegamento VPC. Quando implementi l'API in una fase, viene impostato l'ID del collegamento VPC.

   ```
   aws apigateway put-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --uri 'http://my-vpclink-test-nlb-1234567890abcdef.us-east-2.amazonaws.com' \
       --http-method GET \
       --type HTTP_PROXY \
       --integration-http-method GET \
       --connection-type VPC_LINK \
       --connection-id "\${stageVariables.vpcLinkId}"
   ```

   Assicurati di racchiudere tra virgolette doppie l'espressione della variabile di fase (`${stageVariables.vpcLinkId}`) e di aggiungere il carattere di escape davanti a `$`.

------

   In qualsiasi momento, puoi anche aggiornare l'integrazione per modificare il valore `connection-id`. Utilizza il comando [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html) seguente per aggiornare l’integrazione:

   ```
    aws apigateway update-integration \
       --rest-api-id abcdef123 \
       --resource-id skpp60rab7 \
       --http-method GET \
       --patch-operations '[{"op":"replace","path":"/connectionId","value":"${stageVariables.vpcLinkId}"}]'
   ```

   Assicurati di usare un elenco JSON in formato stringa come valore del parametro `patch-operations`.

   Poiché è stata utilizzata l’integrazione proxy privata, l’API è ora pronta per l’implementazione e i test.

1. Se hai utilizzato la variabile di fase per definire il valore `connection-id`, devi implementare l'API per testarla. Utilizza il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente per implementare l’API con una variabile di fase:

   ```
   aws apigateway create-deployment \
       --rest-api-id abcdef123 \
       --stage-name test \
       --variables vpcLinkId=gim7c3
   ```

   Per aggiornare la variabile di fase con un ID del `VpcLink` diverso, ad esempio `asf9d7`, utilizza il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente:

   ```
   aws apigateway update-stage \
       --rest-api-id abcdef123 \
       --stage-name test \
       --patch-operations op=replace,path='/variables/vpcLinkId',value='asf9d7'
   ```

   Quando imposti come hardcoded la proprietà `connection-id` con il valore letterale ID di `VpcLink`, non è necessario implementare l'API per testarla. Usa il [test-invoke-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html)comando per testare l'API prima che venga distribuita. 

1. Utilizza il seguente comando per invocare l'API:

   ```
   curl -X GET https://abcdef123.execute-api.us-east-2.amazonaws.com/test
   ```

   In alternativa, puoi inserire l'URL di invocazione dell'API in un browser web per visualizzare il risultato.

# Account API Gateway utilizzati per integrazioni private (legacy)
<a name="set-up-api-with-vpclink-accounts"></a>

Il seguente account API Gateway specifico della regione IDs viene aggiunto automaticamente al tuo servizio endpoint VPC come quando `AllowedPrincipals` crei un. `VpcLink`


| **Region** | **ID account** | 
| --- | --- | 
| us-east-1 | 392220576650 | 
| us-east-2 | 718770453195 | 
| us-west-1 | 968246515281 | 
| us-west-2 | 109351309407 | 
| ca-central-1 | 796887884028 | 
| eu-west-1 | 631144002099 | 
| eu-west-2 | 544388816663 | 
| eu-west-3 | 061510835048 | 
| eu-central-1 | 474240146802 | 
| eu-central-2 | 166639821150 | 
| eu-north-1 | 394634713161 | 
| eu-south-1 | 753362059629 | 
| eu-south-2 | 359345898052 | 
| ap-northeast-1 | 969236854626 | 
| ap-northeast-2 | 020402002396 | 
| ap-northeast-3 | 360671645888 | 
| ap-southeast-1 | 195145609632 | 
| ap-southeast-2 | 798376113853 | 
| ap-southeast-3 | 652364314486 | 
| ap-southeast-4 | 849137399833 | 
| ap-south-1 | 507069717855 | 
| ap-south-2 | 644042651268 | 
| ap-east-1 | 174803364771 | 
| sa-east-1 | 287228555773 | 
| me-south-1 | 855739686837 | 
| me-central-1 | 614065512851 | 

# Integrazioni fittizie per REST APIs in API Gateway
<a name="how-to-mock-integration"></a>

Amazon API Gateway supporta le integrazioni fittizie per i metodi API. Questa caratteristica permette agli sviluppatori di API di generare risposte API da API Gateway direttamente, senza che sia necessario un back-end di integrazione. Uno sviluppatore di API può usare questa caratteristica per sbloccare team dipendenti che devono lavorare a un'API prima che lo sviluppo del progetto sia completato. Puoi anche usare questa caratteristica per allestire una pagina di destinazione per l'API, con una panoramica e comandi di navigazione per l'API. Per un esempio di pagina di destinazione di questo tipo, consulta la richiesta e la risposta di integrazione del metodo GET nella risorsa root dell'API di esempio illustrata in [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md).

Uno sviluppatore di API può decidere in che modo API Gateway risponde alle richieste di integrazione fittizia. A tale scopo, è necessario configurare la richiesta e la risposta di integrazione del metodo per associare una risposta a un codice di stato specifico. Affinché un metodo con l'integrazione fittizia restituisca una risposta `200`, configura il modello di mappatura del corpo della richiesta di integrazione per restituire quanto segue.

```
{"statusCode": 200}
```

Configura una risposta di integrazione `200` con il modello di mappatura del corpo seguente, ad esempio:

```
{
    "statusCode": 200,
    "message": "Go ahead without me."
}
```

 Analogamente, affinché il metodo restituisca, ad esempio, una risposta di errore `500`, configura il modello di mappatura del corpo della richiesta di integrazione per restituire quanto segue.

```
{"statusCode": 500}
```

Configura, ad esempio, una risposta di integrazione `500` con il modello di mappatura seguente: 

```
{
    "statusCode": 500,
    "message": "The invoked method is not supported on the API resource."
}
```

In alternativa, puoi fare in modo che un metodo dell'integrazione fittizia restituisca la risposta di integrazione predefinita senza definire il modello di mappatura della richiesta di integrazione. La risposta di integrazione predefinita è quella con valore **HTTP status regex (Regex stato HTTP)** non definito. Assicurati che siano impostati i comportamenti di passthrough appropriati.

**Nota**  
Le integrazioni fittizie non sono concepite per supportare modelli di risposta di grandi dimensioni. Se ne hai bisogno per il caso d'uso specifico, dovresti valutare invece l'utilizzo di un'integrazione Lambda.

Usando un modello di mappatura della richiesta di integrazione puoi inserire la logica dell'applicazione per stabilire quale risposta di integrazione fittizia restituire in base a determinate condizioni. Puoi ad esempio usare un parametro di query `scope` nella richiesta in ingresso per determinare se restituire una risposta di esito positivo o di errore:

```
{
  #if( $input.params('scope') == "internal" )
    "statusCode": 200
  #else
    "statusCode": 500
  #end
}
```

In questo modo, il metodo dell'integrazione fittizia consente alle chiamate interne di passare, mentre gli altri tipi di chiamate vengono rifiutati con una risposta di errore. 



Questa sezione descrive come utilizzare la console API Gateway per abilitare l'integrazione fittizia per un metodo API.

**Topics**
+ [Abilitazione dell'integrazione fittizia tramite la console API Gateway](how-to-mock-integration-console.md)

# Abilitazione dell'integrazione fittizia tramite la console API Gateway
<a name="how-to-mock-integration-console"></a>

In Gateway API deve essere disponibile un metodo. Segui le istruzioni in [Tutorial: creazione di una REST API con un'integrazione non proxy HTTP](api-gateway-create-api-step-by-step.md).

1. Seleziona una risorsa API e scegli **Crea metodo**.

   Per creare il metodo, procedi nel seguente modo:

   1. Per **Tipo di metodo** seleziona un metodo. 

   1. Per **Tipo di integrazione** seleziona **Fittizio**.

   1. Scegli **Crea metodo**. 

   1. Nella scheda **Richiesta metodo** scegli **Modifica** in **Impostazioni della richiesta del metodo**.

   1. Scegli **Parametri della stringa di query URL**. Scegli **Aggiungi stringa di query** e per **Nome** immetti **scope**. Questo parametro di query determina se il chiamante è interno o meno.

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

1. Nella scheda **Risposta metodo** scegli **Crea risposta**, quindi procedi come indicato di seguito:

   1. Per **Stato HTTP** immetti **500**.

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

1. Nella scheda **Richiesta di integrazione** seleziona **Modifica** per **Impostazioni della richiesta di integrazione**.

1. Scegli **Modelli di mappatura** e procedi come indicato di seguito:

   1. Scegliere **Add mapping template (Aggiungi modello di mappatura)**.

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

   1. Per **Corpo del modello** inserisci quanto segue:

      ```
      {
        #if( $input.params('scope') == "internal" )
          "statusCode": 200
        #else
          "statusCode": 500
        #end
      }
      ```

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

1. Nella scheda **Risposta di integrazione** scegli **Modifica** per **Predefinito - Risposta**.

1. Scegli **Modelli di mappatura** e procedi come indicato di seguito:

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

   1. Per **Corpo del modello** inserisci quanto segue:

      ```
      {
          "statusCode": 200,
          "message": "Go ahead without me"
      }
      ```

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

1. Scegli **Crea risposta**.

   Per creare una risposta 500, procedi come descritto qui di seguito:

   1. Per **HTTP status regex (Regex stato HTTP)**, immettere **5\$1d\$12\$1**. 

   1. Per **Stato metodo risposta** seleziona **500**.

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

   1. Per **5\$1d\$12\$1 - Risposta** scegli **Modifica**. 

   1. Scegli **Modelli di mappatura**, quindi seleziona **Aggiungi modello di mappatura**.

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

   1. Per **Corpo del modello** inserisci quanto segue:

      ```
      {
          "statusCode": 500,
          "message": "The invoked method is not supported on the API resource."
      }
      ```

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

1.  Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda. Per testare l'integrazione fittizia, procedi come indicato di seguito:

   1. Immetti `scope=internal` in **Stringhe di query**. Scegli **Test (Esegui test)**. Viene visualizzato il risultato del test:

      ```
      Request: /?scope=internal
      Status: 200
      Latency: 26 ms
      Response Body
      
      {
        "statusCode": 200,
        "message": "Go ahead without me"
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

   1. Immettere `scope=public` in `Query strings` oppure lasciare vuoto il campo. Scegli **Test (Esegui test)**. Viene visualizzato il risultato del test:

      ```
      Request: /
      Status: 500
      Latency: 16 ms
      Response Body
      
      {
        "statusCode": 500,
        "message": "The invoked method is not supported on the API resource."
      }
      
      Response Headers
      
      {"Content-Type":"application/json"}
      ```

Puoi anche restituire le intestazioni in una risposta di integrazione fittizia aggiungendo prima di tutto un'intestazione a una risposta del metodo e quindi configurando una mappatura dell'intestazione nella risposta di integrazione. È in questo modo che la console API Gateway abilita il supporto CORS restituendo le intestazioni richieste da CORS.

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

 Puoi configurare API Gateway per l'esecuzione di una convalida di base di una richiesta API prima di procedere con la richiesta di integrazione. Quando la convalida fallisce, API Gateway fallisce immediatamente la richiesta, restituisce una risposta di errore 400 al chiamante e pubblica i risultati della convalida in Logs. CloudWatch Questo comportamento riduce le chiamate non necessarie al back-end. Aspetto ancora più importante, ti permette di concentrarti sulle attività di convalida specifiche dell'applicazione. È possibile convalidare il corpo di una richiesta verificando che i parametri obbligatori della richiesta siano validi e diversi da null oppure specificando uno schema di modello per una convalida dei dati più complessa.

**Topics**
+ [Panoramica della convalida di base delle richieste in API Gateway](#api-gateway-request-validation-basic-definitions)
+ [Modelli di dati per REST APIs](models-mappings-models.md)
+ [Configurazione della convalida di base delle richieste in API Gateway](api-gateway-request-validation-set-up.md)
+ [AWS CloudFormation modello di un'API di esempio con convalida delle richieste di base](api-gateway-request-validation-sample-cloudformation.md)

## Panoramica della convalida di base delle richieste in API Gateway
<a name="api-gateway-request-validation-basic-definitions"></a>

 Gateway Amazon API può eseguire la convalida di base delle richieste, in modo che sia possibile concentrarsi sulla convalida specifica dell'app nel back-end. Per la convalida, Gateway Amazon API verifica una o entrambe le condizioni seguenti: 
+ I parametri della richiesta obbligatori nell'URI, nella stringa di query e nelle intestazioni di una richiesta in entrata sono inclusi e non sono vuoti. Gateway API verifica solo l’esistenza di un parametro e non controlla il tipo o il formato.
+  Il payload della richiesta applicabile soddisfa la richiesta configurata dello [schema JSON](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) del metodo per un tipo di contenuto specifico. Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuto, impostare il tipo di contenuto per il modello di dati su `$default`.

Per attivare la convalida di base, è necessario specificare regole di convalida in un [validatore di richieste](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html), aggiungere il validatore alla [mappa di validatori di richieste](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html) dell'API e assegnare il validatore a singoli metodi API. 

**Nota**  
La convalida del corpo della richiesta e [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md) sono due argomenti separati. Quando il payload di una richiesta non dispone di uno schema di modello corrispondente, puoi scegliere di eseguire il transito o il blocco del payload originale. Per ulteriori informazioni, consulta [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md).

# Modelli di dati per REST APIs
<a name="models-mappings-models"></a>

In API Gateway, un modello definisce la struttura dei dati di un payload. In Gateway Amazon API i modelli sono definiti utilizzando lo [schema JSON bozza 4](https://tools.ietf.org/html/draft-zyp-json-schema-04). Il seguente oggetto JSON è un esempio di dati nell'esempio di Pet Store.

```
{
    "id": 1,
    "type": "dog",
    "price": 249.99
}
```

I dati contengono i valori `id`, `type` e `price` dell'animale domestico. Un modello di questi dati consente di:
+ Usare la convalida di base delle richieste.
+ Creare modelli di mappatura per la trasformazione dei dati.
+ Creare un tipo di dati definito dall'utente (UDT) quando viene generato un SDK.

![\[Esempio di modello di dati JSON per PetStore API.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/how-to-validate-requests.png)


In questo modello:

1. L'oggetto `$schema` rappresenta un identificatore valido della versione dello schema JSON. Questo schema è lo schema JSON bozza v4.

1. L'oggetto `title` è un identificatore in formato leggibile del modello. Questo titolo è `PetStoreModel`.

1.  La parola chiave di convalida `required` richiede `type` e `price` per la convalida di base della richiesta.

1. La variabile `properties` del modello è `id`, `type` e`price`. Ogni oggetto ha proprietà che vengono descritte nel modello.

1. L'oggetto `type` può avere solo i valori `dog`, `cat` o `fish`.

1. L'oggetto `price` è un numero ed è vincolato con un valore `minimum` di 25 e un valore `maximum` di 500.

## PetStore modello
<a name="PetStore-model-text"></a>

```
1 {
2 "$schema": "http://json-schema.org/draft-04/schema#",
3  "title": "PetStoreModel",
4  "type" : "object",
5  "required" : [ "price", "type" ],
6  "properties" : {
7    "id" : {
8      "type" : "integer"
9    },
10    "type" : {
11      "type" : "string",
12      "enum" : [ "dog", "cat", "fish" ]
13    },
14    "price" : {
15      "type" : "number",
16      "minimum" : 25.0,
17      "maximum" : 500.0
18    }
19  }
20 }
```

In questo modello:

1. Alla riga 2, l'oggetto `$schema` rappresenta un identificatore valido della versione dello schema JSON. Questo schema è lo schema JSON bozza v4.

1. Alla riga 3, l'oggetto `title` è un identificatore in formato leggibile del modello. Questo titolo è `PetStoreModel`.

1.  Alla riga 5, la parola chiave di convalida `required` richiede `type` e `price` per la convalida di base della richiesta.

1.  Alle righe da 6 a 17, la variabile `properties` del modello è `id`. `type` e `price`. Ogni oggetto ha proprietà che vengono descritte nel modello.

1. Alla riga 12, l'oggetto `type` può avere solo i valori `dog`, `cat` o `fish`.

1. Alle righe da 14 a 17, l'oggetto `price` è un numero ed è vincolato con un valore `minimum` di 25 e un valore `maximum` di 500.

## Creazione di modelli più complessi
<a name="api-gateway-request-validation-model-more-complex"></a>

 È possibile utilizzare la primitiva `$ref` per creare definizioni riutilizzabili per modelli più lunghi. Ad esempio, è possibile creare una definizione chiamata `Price` nella sezione `definitions` che descrive l'oggetto `price`. Il valore di `$ref` è la definizione `Price`. 

```
{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "PetStoreModelReUsableRef",
  "required" : ["price", "type" ],
  "type" : "object",
  "properties" : {
    "id" : {
      "type" : "integer"
    },
    "type" : {
      "type" : "string",
      "enum" : [ "dog", "cat", "fish" ]
    },
    "price" : {
        "$ref": "#/definitions/Price"
    }
  },
  "definitions" : {
      "Price": {
        "type" : "number",
        "minimum" : 25.0,
        "maximum" : 500.0
            }
      }
}
```

È inoltre possibile fare riferimento a un altro schema del modello definito in un file di modello esterno. Impostare il valore della proprietà `$ref` sulla posizione del modello. Nell'esempio seguente, il modello `Price` è definito nel modello `PetStorePrice` nell'API `a1234`.

```
{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "PetStorePrice",
  "type": "number",
  "minimum": 25,
  "maximum": 500
}
```

Il modello più lungo può fare riferimento al modello `PetStorePrice`.

```
{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "PetStoreModelReusableRefAPI",
  "required" : [ "price", "type" ],
  "type" : "object",
  "properties" : {
    "id" : {
      "type" : "integer"
    },
    "type" : {
      "type" : "string",
      "enum" : [ "dog", "cat", "fish" ]
    },
    "price" : {
        "$ref": "https://apigateway.amazonaws.com/restapis/a1234/models/PetStorePrice"
    }
  }
}
```

## Utilizzo di modelli di dati di output
<a name="api-gateway-request-validation-output-model"></a>

In caso di trasformazione dei dati, è possibile definire un modello di payload nella risposta dell'integrazione. È possibile utilizzare un modello di payload quando si genera un SDK. Per linguaggi fortemente tipizzati, come Java, Objective-C o Swift, l'oggetto corrisponde a un tipo di dati definito dall'utente (UDT). Gateway Amazon API crea un tipo di dati definito dall'utente se viene specificato con un modello di dati durante la generazione di un SDK. Per ulteriori informazioni sulle trasformazioni dei dati, consultare [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).

L'esempio seguente indica i dati di output di una risposta di integrazione.

```
{
[
  {
    "description" : "Item 1 is a dog.",
    "askingPrice" : 249.99
  },
  {
    "description" : "Item 2 is a cat.",
    "askingPrice" : 124.99
  },
  {
    "description" : "Item 3 is a fish.",
    "askingPrice" : 0.99
  }
]
}
```

L'esempio seguente indica un modello di payload che descrive i dati di output.

```
{
"$schema": "http://json-schema.org/draft-04/schema#",
  "title": "PetStoreOutputModel",
  "type" : "object",
  "required" : [ "description", "askingPrice" ],
  "properties" : {
    "description" : {
      "type" : "string"
    },
    "askingPrice" : {
      "type" : "number",
      "minimum" : 25.0,
      "maximum" : 500.0
    }
  }
}
```

Con questo modello, è possibile eseguire una chiamata a un SDK per recuperare i valori delle proprietà `description`, `askingPrice` leggendo le proprietà `PetStoreOutputModel[i].description` e `PetStoreOutputModel[i].askingPrice`. Se non viene fornito alcun modello, API Gateway utilizzerà il modello vuoto per creare un UDT predefinito. 

## Fasi successive
<a name="api-gateway-request-validation-model-next-steps"></a>
+ Questa sezione fornisce risorse che è possibile utilizzare per acquisire maggiori conoscenze sui concetti trattati in questo argomento.

  È possibile seguire i tutorial relativi alla convalida delle richieste:
  + [Configurazione della convalida delle richieste tramite la console Gateway Amazon API](api-gateway-request-validation-set-up.md#api-gateway-request-validation-setup-in-console)
  +  [Imposta la convalida delle richieste di base utilizzando il AWS CLI](api-gateway-request-validation-set-up.md#api-gateway-request-validation-setup-cli)
  +  [Configurazione della convalida di base delle richieste utilizzando una definizione OpenAPI](api-gateway-request-validation-set-up.md#api-gateway-request-validation-setup-importing-swagger)
+  Per ulteriori informazioni sulla trasformazione dei dati e sui modelli di mappatura, consultare [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).

# Configurazione della convalida di base delle richieste in API Gateway
<a name="api-gateway-request-validation-set-up"></a>

 Questa sezione mostra come configurare la convalida delle richieste per API Gateway utilizzando la console e una definizione OpenAPI. AWS CLI

**Topics**
+ [Configurazione della convalida delle richieste tramite la console Gateway Amazon API](#api-gateway-request-validation-setup-in-console)
+ [Imposta la convalida delle richieste di base utilizzando il AWS CLI](#api-gateway-request-validation-setup-cli)
+ [Configurazione della convalida di base delle richieste utilizzando una definizione OpenAPI](#api-gateway-request-validation-setup-importing-swagger)

## Configurazione della convalida delle richieste tramite la console Gateway Amazon API
<a name="api-gateway-request-validation-setup-in-console"></a>

 È possibile utilizzare la console Gateway Amazon API per convalidare una richiesta selezionando uno dei tre validatori per una richiesta API: 
+ **Convalida del corpo**.
+ **Convalida dei parametri e delle intestazioni delle stringhe di query**.
+ **Convalida del corpo, dei parametri delle stringhe di query e delle intestazioni**.

 Quando applichi uno dei validatori a un metodo API, la console API Gateway aggiunge il validatore alla mappa dell'[RequestValidators](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html)API.

Per seguire questo tutorial, utilizzerai un CloudFormation modello per creare un'API API Gateway API incompleta. Questa API ha una risorsa `/validator` con i metodi `GET` e `POST`. Entrambi i metodi sono integrati con l'endpoint HTTP `http://petstore-demo-endpoint.execute-api.com/petstore/pets`. Configurare due tipi di convalida delle richieste:
+ Nel metodo `GET`, verrà configurata la convalida delle richieste per i parametri della stringa di query URL.
+ Nel metodo `POST`, verrà configurata la convalida delle richieste per il corpo della richiesta.

 Ciò consentirà solo a determinate chiamate API di eseguire il transito all'API. 

Scarica e decomprimi [il modello di creazione dell'app per CloudFormation](samples/request-validation-tutorial-console.zip). Verrà utilizzato questo modello per creare un'API incompleta. Il resto della procedura verrà completato nella console Gateway Amazon API. 

**Per creare una pila CloudFormation**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Scegliere **Create stack (Crea stack)**, quindi **With new resources (standard) (Con nuove risorse (standard))**.

1. In **Specificare modello**, scegliere **Carica un file modello**.

1. Selezionare il modello scaricato.

1. Scegli **Next (Successivo)**. 

1. Per **Stack name (Nome stack)**, inserire **request-validation-tutorial-console**, quindi scegliere **Next (Avanti)**.

1. Per **Configure stack options (Configura opzioni di stack)**, scegliere **Next (Successivo)**.

1. Per quanto riguarda **le funzionalità**, riconosci che CloudFormation puoi creare risorse IAM nel tuo account.

1. Scegli **Avanti**, quindi scegli **Invia**.

CloudFormation fornisce le risorse specificate nel modello. Per completare il provisioning delle risorse, potrebbero essere necessari alcuni minuti. Quando lo stato del tuo CloudFormation stack è **CREATE\$1COMPLETE**, sei pronto per passare alla fase successiva.

**Selezione dell'API appena creata**

1. Selezionare lo stack **request-validation-tutorial-console** appena creato.

1. Scegliere **Resources** (Risorse).

1. In **ID fisico**, scegliere l'API. Questo link consente di venire reindirizzati alla console di Gateway Amazon API.

Prima di modificare i metodi `GET` e `POST`, è necessario creare un modello.

**Creazione di un modello**

1. È necessario che un modello utilizzi la convalida della richiesta nel corpo di una richiesta in arrivo. Per creare un modello seleziona **Modelli** nel pannello di navigazione principale.

1. Scegli **Crea modello**.

1. In **Nome**, inserisci **PetStoreModel**.

1. In **Tipo di contenuto**, inserire **application/json**. Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuti, inserisci **\$1default**.

1. Per **Descrizione** immetti **My PetStore Model** come descrizione del modello.

1. Per **Schema modello** incolla il seguente modello nell'editor di codice e scegli **Crea**. 

   ```
   {
     "type" : "object",
     "required" : [ "name", "price", "type" ],
     "properties" : {
       "id" : {
         "type" : "integer"
       },
       "type" : {
         "type" : "string",
         "enum" : [ "dog", "cat", "fish" ]
       },
       "name" : {
         "type" : "string"
       },
       "price" : {
         "type" : "number",
         "minimum" : 25.0,
         "maximum" : 500.0
       }
     }
   }
   ```

Per ulteriori informazioni sul modello, consulta [Modelli di dati per REST APIs](models-mappings-models.md). 

**Per configurare la convalida della richiesta per un metodo `GET`**

1. Nel pannello di navigazione principale scegli **Risorse**, quindi seleziona il metodo **GET**. 

1. Nella scheda **Richiesta metodo**, in **Impostazioni richiesta metodo**, scegli **Modifica**.

1. Per **Validatore richiesta** seleziona **Convalida parametri di stringa query e intestazioni**.

1. In **Parametri della stringa di query URL** ed effettua le seguenti operazioni: 

   1. Scegliere **Add query string (Aggiungi stringa di query)**.

   1. In **Nome**, inserisci **petType**.

   1. Attiva **Campo obbligatorio**.

   1. Mantieni disattivata l'opzione **Caching**. 

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

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

1. In **Parametri della stringa di query URL** ed effettua le seguenti operazioni: 

   1. Scegliere **Add query string (Aggiungi stringa di query)**.

   1. In **Nome**, inserisci **petType**.

   1. In **Mappato da**, inserire **method.request.querystring.petType**. Questa operazione associa **petType** al tipo di animale domestico.

      Per ulteriori informazioni sulla mappatura dei dati, consultare il [tutorial relativo alla mappatura dei dati](set-up-data-transformations-in-api-gateway.md#mapping-example-console).

   1. Mantieni disattivata l'opzione **Caching**. 

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

**Per eseguire il test della convalida della richiesta per il metodo `GET`**

1. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. In **Stringhe di query** immetti **petType=dog** e scegli **Test**.

1. Il test del metodo restituirà `200 OK` e un elenco di cani.

   Per informazioni su come trasformare questi dati di output, consultare il [tutorial sulla mappatura dei dati](set-up-data-transformations-in-api-gateway.md#mapping-example-console).

1. Rimuovere **petType=dog** e scegliere **Test**. 

1.  Il test del metodo restituirà un errore `400` con il seguente messaggio di errore: 

   ```
   {
     "message": "Missing required request parameters: [petType]"
   }
   ```

**Per configurare la convalida della richiesta per il metodo `POST`**

1. Nel pannello di navigazione principale scegli **Risorse**, quindi seleziona il metodo **POST**. 

1. Nella scheda **Richiesta metodo**, in **Impostazioni richiesta metodo**, scegli **Modifica**.

1. Per **Validatore richiesta** seleziona **Convalida corpo**.

1. In **Corpo della richiesta** scegli **Aggiungi modello**.

1. Per **Tipo di contenuto** inserisci **application/json**. Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuti, inserisci `$default`.

    **Per Modello, seleziona. **PetStoreModel****

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

**Per eseguire il test della convalida della richiesta per un metodo `POST`**

1. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. In **Corpo della richiesta** incolla quanto segue nell'editor di codice:

   ```
   {
     "id": 2,
     "name": "Bella",
     "type": "dog",
     "price": 400
   }
   ```

    Scegli **Test (Esegui test)**.

1. Il test del metodo restituirà `200 OK` e un messaggio di operazione riuscita. 

1. In **Corpo della richiesta** incolla quanto segue nell'editor di codice:

   ```
   {
     "id": 2,
     "name": "Bella",
     "type": "dog",
     "price": 4000
   }
   ```

    Scegli **Test (Esegui test)**. 

1.  Il test del metodo restituirà un errore `400` con il seguente messaggio di errore:

   ```
   {
    "message": "Invalid request body"
   }
   ```

    Nella parte inferiore dei log del test viene restituito il motivo del corpo della richiesta non valido. In questo caso, il prezzo dell'animale era maggiore del valore massimo specificato nel modello. 

**Per eliminare una CloudFormation pila**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Seleziona il tuo stack. CloudFormation 

1. Scegli **Elimina** e conferma la tua scelta.

### Fasi successive
<a name="next-steps-request-validation-tutorial"></a>
+ Per informazioni su come trasformare i dati di output ed eseguire ulteriori mappature dei dati, consultare il [tutorial sulla mappatura dei dati](set-up-data-transformations-in-api-gateway.md#mapping-example-console).
+ Eseguire il tutorial [Configurazione della convalida di base delle richieste in AWS CLI](#api-gateway-request-validation-setup-cli) per eseguire passaggi simili utilizzando la  AWS CLI. 

## Imposta la convalida delle richieste di base utilizzando il AWS CLI
<a name="api-gateway-request-validation-setup-cli"></a>

È possibile creare un validatore per configurare la convalida della richiesta utilizzando la  AWS CLI. Per seguire questo tutorial, utilizzerai un CloudFormation modello per creare un'API API Gateway API incompleta. 

**Nota**  
Questo non è lo stesso CloudFormation modello del tutorial della console.

 Utilizzando una risorsa `/validator` precedentemente esposta, verranno creati i metodi `GET` e `POST`. Entrambi i metodi saranno integrati con l'endpoint HTTP `http://petstore-demo-endpoint.execute-api.com/petstore/pets`. Verranno configurate le due convalide delle richieste seguenti:
+ Nel metodo `GET`, verrà creato un validatore `params-only` per convalidare i parametri della stringa di query URL.
+ Nel metodo `POST`, verrà creato un validatore `body-only` per convalidare il corpo della richiesta.

 Ciò consentirà solo a determinate chiamate API di eseguire il transito all'API. 

**Per creare una CloudFormation pila**

Scarica e decomprimi [il modello di creazione dell'app](samples/request-validation-tutorial-cli.zip) per. CloudFormation

Per completare il tutorial seguente, è necessario disporre della [AWS Command Line Interface (AWS CLI) versione 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). 

Per i comandi lunghi viene utilizzato un carattere di escape (`\`) per dividere un comando su più righe.
**Nota**  
In Windows, alcuni comandi della CLI Bash utilizzati comunemente (ad esempio, `zip`) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una versione integrata su Windows di Ubuntu e Bash, [installa il sottosistema Windows per Linux](https://learn.microsoft.com/en-us/windows/wsl/install). I comandi della CLI di esempio in questa guida utilizzano la formattazione Linux. Se si utilizza la CLI di Windows, i comandi che includono documenti JSON in linea dovranno essere riformattati. 

1.  Usa il seguente comando per creare lo CloudFormation stack.

   ```
   aws cloudformation create-stack --stack-name request-validation-tutorial-cli --template-body file://request-validation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM 
   ```

1. CloudFormation fornisce le risorse specificate nel modello. Per completare il provisioning delle risorse, potrebbero essere necessari alcuni minuti. Usa il comando seguente per vedere lo stato del tuo CloudFormation stack.

   ```
   aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli
   ```

1. Quando lo stato dello CloudFormation stack è`StackStatus: "CREATE_COMPLETE"`, usa il seguente comando per recuperare i valori di output pertinenti per i passaggi futuri.

   ```
    aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
   ```

   Di seguito sono riportati i valori di output:
   + ApiId, che è l'ID dell'API. Per questo tutorial, l'ID API è `abc123`.
   + ResourceId, che è l'ID della risorsa di validazione in cui sono esposti `POST` i metodi `GET` and. Per questo tutorial, l'ID risorsa è `efg456`.

**Creazione dei validatori della richiesta e importazione di un modello**

1. Per utilizzare la convalida della richiesta con la  AWS CLI, è necessario un validatore. Usare il seguente comando per creare un validatore che convalidi solo i parametri della richiesta. 

   ```
   aws apigateway create-request-validator --rest-api-id abc123 \
         --no-validate-request-body \
         --validate-request-parameters \
         --name params-only
   ```

   Annotare l'ID del validatore `params-only`.

1.  Usare il seguente comando per creare un validatore che convalidi solo il corpo della richiesta. 

   ```
   aws apigateway create-request-validator --rest-api-id abc123 \
         --validate-request-body \
         --no-validate-request-parameters \
         --name body-only
   ```

   Annotare l'ID del validatore `body-only`.

1.  È necessario che un modello utilizzi la convalida della richiesta nel corpo di una richiesta in arrivo. Utilizzare il comando seguente per importare un modello.

   ```
   aws apigateway create-model --rest-api-id abc123 --name PetStoreModel --description 'My PetStore Model' --content-type 'application/json' --schema '{"type": "object", "required" : [ "name", "price", "type" ], "properties" : { "id" : {"type" : "integer"},"type" : {"type" : "string", "enum" : [ "dog", "cat", "fish" ]},"name" : { "type" : "string"},"price" : {"type" : "number","minimum" : 25.0, "maximum" : 500.0}}}}' 
   ```

   Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuto, specifica `$default` come chiave.

**Creazione dei metodi `GET` e `POST`**

1. Utilizzare il seguente comando per aggiungere il metodo HTTP `GET` per la risorsa `/validate`. Questo comando crea il metodo `GET`, aggiunge il validatore `params-only` e imposta la stringa di query `petType` come richiesto. 

   ```
   aws apigateway put-method --rest-api-id abc123 \
          --resource-id efg456 \
          --http-method GET \
          --authorization-type "NONE" \
          --request-validator-id aaa111 \
          --request-parameters "method.request.querystring.petType=true"
   ```

   Utilizzare il seguente comando per aggiungere il metodo HTTP `POST` per la risorsa `/validate`. Questo comando crea il metodo `POST`, aggiunge il validatore `body-only` e collega il modello al validatore solo del corpo. 

   ```
   aws apigateway put-method --rest-api-id abc123 \
          --resource-id efg456 \
          --http-method POST \
          --authorization-type "NONE" \
          --request-validator-id bbb222 \
          --request-models 'application/json'=PetStoreModel
   ```

1.  Utilizzare il comando seguente per configurare la risposta `200 OK` del metodo `GET /validate`. 

   ```
   aws apigateway put-method-response --rest-api-id abc123  \
               --resource-id efg456 \
               --http-method GET \
               --status-code 200
   ```

    Utilizzare il comando seguente per configurare la risposta `200 OK` del metodo `POST /validate`.

   ```
   aws apigateway put-method-response --rest-api-id abc123  \
               --resource-id efg456 \
               --http-method POST \
               --status-code 200
   ```

1.  Utilizzare il comando seguente per configurare una variabile `Integration` con un endpoint HTTP specificato per il metodo `GET /validation`. 

   ```
   aws apigateway put-integration --rest-api-id abc123  \
               --resource-id efg456 \
               --http-method GET \
               --type HTTP \
               --integration-http-method GET \
               --request-parameters '{"integration.request.querystring.type" : "method.request.querystring.petType"}' \
               --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets'
   ```

    Utilizzare il comando seguente per configurare una variabile `Integration` con un endpoint HTTP specificato per il metodo `POST /validation`. 

   ```
   aws apigateway put-integration --rest-api-id abc123  \
                 --resource-id efg456 \
                 --http-method POST \
                 --type HTTP \
                 --integration-http-method GET \
                 --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets'
   ```

1.  Utilizzare il comando seguente per configurare una risposta di integrazione per il metodo `GET /validation`. 

   ```
   aws apigateway put-integration-response --rest-api-id abc123 \
                 --resource-id efg456\
                 --http-method GET \
                 --status-code 200 \
                 --selection-pattern ""
   ```

    Utilizzare il comando seguente per configurare una risposta di integrazione per il metodo `POST /validation`.

   ```
   aws apigateway put-integration-response --rest-api-id abc123 \
               --resource-id efg456 \
               --http-method POST \
               --status-code 200 \
               --selection-pattern ""
   ```

**Per testare l'API**

1. Per testare il metodo `GET`, che eseguirà la convalida della richiesta per le stringhe di query, usare il seguente comando:

   ```
   aws apigateway test-invoke-method --rest-api-id abc123 \
               --resource-id efg456 \
               --http-method GET \
               --path-with-query-string '/validate?petType=dog'
   ```

   Il risultato restituirà `200 OK` e l'elenco dei cani.

1. Utilizzare il seguente comando per eseguire il test senza includere la stringa di query `petType`.

   ```
   aws apigateway test-invoke-method --rest-api-id abc123 \
               --resource-id efg456 \
               --http-method GET
   ```

   Il risultato restituirà un errore `400`.

1. Per testare il metodo `POST`, che eseguirà la convalida della richiesta per il corpo della richiesta, usare il seguente comando:

   ```
    aws apigateway test-invoke-method --rest-api-id abc123 \
               --resource-id efg456 \
               --http-method POST \
               --body '{"id": 1, "name": "bella", "type": "dog", "price" : 400 }'
   ```

   Il risultato restituirà `200 OK` e un messaggio di operazione riuscita. 

1. Usare il seguente comando per testare l'utilizzo di un corpo non valido.

   ```
    aws apigateway test-invoke-method --rest-api-id abc123 \
                 --resource-id efg456 \
                 --http-method POST \
                 --body '{"id": 1, "name": "bella", "type": "dog", "price" : 1000 }'
   ```

   Il risultato restituirà un errore `400`, perché il prezzo del cane supera il prezzo massimo definito dal modello.

**Per eliminare uno stack CloudFormation**
+ Usa il seguente comando per eliminare le tue CloudFormation risorse.

  ```
  aws cloudformation delete-stack  --stack-name request-validation-tutorial-cli
  ```

## Configurazione della convalida di base delle richieste utilizzando una definizione OpenAPI
<a name="api-gateway-request-validation-setup-importing-swagger"></a>

 È possibile dichiarare un validatore di richiesta a livello di API specificando un set di oggetti [x-amazon-apigateway-request-Validators.RequestValidator oggetto](api-gateway-swagger-extensions-request-validators.requestValidator.md) nella mappa [x-amazon-apigateway-requestoggetto -validators](api-gateway-swagger-extensions-request-validators.md) per selezionare la parte della richiesta che verrà convalidata. Nell'esempio di definizione OpenAPI, sono presenti due validatori: 
+ Il validatore `all`, che convalida sia il corpo, mediante il modello di dati `RequestBodyModel`, sia i parametri.

  In base al modello di dati `RequestBodyModel`, l'oggetto JSON di input deve contenere le proprietà `name`, `type` e `price`. La proprietà `name` può essere qualsiasi stringa, `type` deve essere uno dei campi dell'enumerazione specificati (`["dog", "cat", "fish"]`) e `price` deve essere compreso tra 25 e 500. Il parametro `id` non è obbligatorio. 
+ Il validatore `param-only`, che convalida solo i parametri.

 Per attivare un validatore di richieste in tutti i metodi di un'API, specificare una proprietà [x-amazon-apigateway-requestproprietà -validator](api-gateway-swagger-extensions-request-validator.md) a livello di API della definizione OpenAPI. Nell'esempio di definizione OpenAPI, il validatore `all` viene utilizzato su tutti i metodi API, salvo diversamente definito. Quando si utilizza un modello per convalidare il corpo, se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuto, specifica `$default` come chiave.

Per attivare un validatore di richieste in un singolo metodo, specificare la proprietà `x-amazon-apigateway-request-validator` a livello di metodo. Nell'esempio di definizione OpenAPI, il validatore `param-only` sovrascrive il validatore `all` nel metodo `GET`.



Per importare l'esempio OpenAPI in Gateway Amazon API, consultare le seguenti istruzioni per eseguire una [Importazione di un'API regionale in Gateway API](import-export-api-endpoints.md) o una [Importazione di un'API ottimizzata per l'edge in API Gateway](import-edge-optimized-api.md).

------
#### [ OpenAPI 3.0 ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "ReqValidators Sample",
    "version" : "1.0.0"
  },
  "servers" : [ {
    "url" : "/{basePath}",
    "variables" : {
      "basePath" : {
        "default" : "/v1"
      }
    }
  } ],
  "paths" : {
    "/validation" : {
      "get" : {
        "parameters" : [ {
          "name" : "q1",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "test-method-response-header" : {
                "schema" : {
                  "type" : "string"
                }
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ArrayOfError"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "params-only",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.type" : "method.request.querystring.q1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      },
      "post" : {
        "parameters" : [ {
          "name" : "h1",
          "in" : "header",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RequestBodyModel"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "test-method-response-header" : {
                "schema" : {
                  "type" : "string"
                }
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ArrayOfError"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "all",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "POST",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.custom_h1" : "method.request.header.h1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "RequestBodyModel" : {
        "required" : [ "name", "price", "type" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer"
          },
          "type" : {
            "type" : "string",
            "enum" : [ "dog", "cat", "fish" ]
          },
          "name" : {
            "type" : "string"
          },
          "price" : {
            "maximum" : 500.0,
            "minimum" : 25.0,
            "type" : "number"
          }
        }
      },
      "ArrayOfError" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/Error"
        }
      },
      "Error" : {
        "type" : "object"
      }
    }
  },
  "x-amazon-apigateway-request-validators" : {
    "all" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : true
    },
    "params-only" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : false
    }
  }
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger" : "2.0",
  "info" : {
    "version" : "1.0.0",
    "title" : "ReqValidators Sample"
  },
  "basePath" : "/v1",
  "schemes" : [ "https" ],
  "paths" : {
    "/validation" : {
      "get" : {
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "q1",
          "in" : "query",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "schema" : {
              "$ref" : "#/definitions/ArrayOfError"
            },
            "headers" : {
              "test-method-response-header" : {
                "type" : "string"
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "params-only",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.type" : "method.request.querystring.q1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      },
      "post" : {
        "consumes" : [ "application/json" ],
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "h1",
          "in" : "header",
          "required" : true,
          "type" : "string"
        }, {
          "in" : "body",
          "name" : "RequestBodyModel",
          "required" : true,
          "schema" : {
            "$ref" : "#/definitions/RequestBodyModel"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "schema" : {
              "$ref" : "#/definitions/ArrayOfError"
            },
            "headers" : {
              "test-method-response-header" : {
                "type" : "string"
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "all",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "POST",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.custom_h1" : "method.request.header.h1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  },
  "definitions" : {
    "RequestBodyModel" : {
      "type" : "object",
      "required" : [ "name", "price", "type" ],
      "properties" : {
        "id" : {
          "type" : "integer"
        },
        "type" : {
          "type" : "string",
          "enum" : [ "dog", "cat", "fish" ]
        },
        "name" : {
          "type" : "string"
        },
        "price" : {
          "type" : "number",
          "minimum" : 25.0,
          "maximum" : 500.0
        }
      }
    },
    "ArrayOfError" : {
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Error"
      }
    },
    "Error" : {
      "type" : "object"
    }
  },
  "x-amazon-apigateway-request-validators" : {
    "all" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : true
    },
    "params-only" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : false
    }
  }
}
```

------

# AWS CloudFormation modello di un'API di esempio con convalida delle richieste di base
<a name="api-gateway-request-validation-sample-cloudformation"></a>

 La seguente definizione di modello di CloudFormation esempio definisce un'API di esempio con la convalida della richiesta abilitata. L'API [PetStore è un subset dell'API ](http://petstore-demo-endpoint.execute-api.com/petstore/pets). L'API espone un metodo `POST` per aggiungere un animale domestico alla raccolta `pets` e un metodo `GET` per l'esecuzione di query relative agli animali domestici in base a un tipo specificato. 

 Sono dichiarati due validatori di richiesta:

**`GETValidator`**  
Questo validatore è abilitato nel metodo `GET`. Permette a Gateway API di verificare che il parametro di query obbligatorio (`q1`) sia incluso e non vuoto nella richiesta in entrata. 

**`POSTValidator`**  
Questo validatore è abilitato nel metodo `POST`. Consente a Gateway API di verificare che il formato di payload della richiesta sia conforme all'impostazione `RequestBodyModel` specificata quando il tipo di contenuto è `application/json`. Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuto, specifica `$default`. `RequestBodyModel` contiene un modello aggiuntivo, `RequestBodyModelId`, per definire l'ID dell'animale domestico.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  StageName:
    Type: String
    Default: v1
    Description: Name of API stage.
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: ReqValidatorsSample
  RequestBodyModelId:
    Type: 'AWS::ApiGateway::Model'
    Properties:
      RestApiId: !Ref Api
      ContentType: application/json
      Description: Request body model for Pet ID.
      Schema:
        $schema: 'http://json-schema.org/draft-04/schema#'
        title: RequestBodyModelId
        properties:
            id:
              type: integer
  RequestBodyModel: 
    Type: 'AWS::ApiGateway::Model'
    Properties:
      RestApiId: !Ref Api
      ContentType: application/json
      Description: Request body model for Pet type, name, price, and ID.
      Schema:
        $schema: 'http://json-schema.org/draft-04/schema#'
        title: RequestBodyModel
        required:
          - price
          - name
          - type
        type: object
        properties:
            id:
              "$ref": !Sub 
                - 'https://apigateway.amazonaws.com/restapis/${Api}/models/${RequestBodyModelId}'
                - Api: !Ref Api
                  RequestBodyModelId: !Ref RequestBodyModelId
            price: 
              type: number
              minimum: 25
              maximum: 500
            name:
              type: string
            type:
              type: string
              enum:
                - "dog"
                - "cat"
                - "fish"
  GETValidator:
    Type: AWS::ApiGateway::RequestValidator
    Properties:
      Name: params-only
      RestApiId: !Ref Api
      ValidateRequestBody: False
      ValidateRequestParameters: True 
  POSTValidator:
    Type: AWS::ApiGateway::RequestValidator
    Properties:
      Name: body-only
      RestApiId: !Ref Api
      ValidateRequestBody: True
      ValidateRequestParameters: False
  ValidationResource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'validation'
  ValidationMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref ValidationResource
      HttpMethod: GET
      AuthorizationType: NONE
      RequestValidatorId: !Ref GETValidator
      RequestParameters:
        method.request.querystring.q1: true
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  ValidationMethodPost:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref ValidationResource
      HttpMethod: POST
      AuthorizationType: NONE
      RequestValidatorId: !Ref POSTValidator
      RequestModels:
        application/json : !Ref RequestBodyModel 
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: POST
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - ValidationMethodGet
      - RequestBodyModel 
    Properties:
      RestApiId: !Ref Api
      StageName: !Sub '${StageName}'
Outputs:
  ApiRootUrl:
    Description: Root Url of the API
    Value: !Sub 'https://${Api}.execute-api.${AWS::Region}.amazonaws.com/${StageName}'
```

# Trasformazioni dei dati per REST APIs in API Gateway
<a name="rest-api-data-transformations"></a>

**Nota**  
In questa sezione vengono illustrate le funzionalità da utilizzare con un’integrazione non proxy. Tuttavia, è consigliabile, ove possibile, usare un’integrazione proxy per la REST API. L’integrazione proxy ha una configurazione di integrazione più semplice e può evolvere con il backend senza annullare le impostazioni esistenti. Per ulteriori informazioni, consulta [Scegliere un tipo di integrazione API Gateway API](api-gateway-api-integration-types.md).

Se si utilizza un’integrazione non proxy, è possibile usare due funzionalità di Gateway API per trasformare la richiesta di metodo e la risposta di integrazione. È possibile trasformare la richiesta di metodo se utilizza un formato di payload diverso rispetto al payload della richiesta di integrazione. È possibile trasformare la risposta di integrazione se restituisce un formato di payload diverso da quello che deve essere restituito nella risposta di metodo. Per ulteriori informazioni sul ciclo di vita della richiesta, consultare [Risorsa di esempio per una REST API](rest-api-develop.md#rest-api-develop-example).

L’esempio seguente mostra una trasformazione di dati in cui per l’intestazione `"x-version:beta"`, il parametro di intestazione `x-version` viene trasformato nel parametro di intestazione `app-version`. La trasformazione di dati da `x-version` a `app-version` avviene nella richiesta di integrazione. In questo modo, l’endpoint di integrazione riceve il valore del parametro di intestazione trasformato. Quando l’endpoint di integrazione restituisce un codice di stato, il codice di stato viene trasformato da `200` a `204` prima della risposta di metodo.

![\[Diagramma della trasformazione di dati di Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/develop-non-proxy.png)


Per creare una trasformazione di dati, è possibile utilizzare le seguenti funzionalità:

**Mappatura dei parametri**  
Nella mappatura dei parametri, è possibile modificare i parametri del percorso URL della richiesta di integrazione, i parametri della stringa di query URL o i valori dell’intestazione HTTP, ma non è possibile modificare il payload della richiesta di integrazione. È inoltre possibile modificare i valori dell’intestazione della risposta HTTP. La mappatura dei parametri si utilizza per creare valori di intestazione statici per CORS (Cross-Origin Resource Sharing).   
È possibile utilizzare la mappatura dei parametri nella richiesta di integrazione per integrazioni proxy e non proxy, ma per usarla per una risposta di integrazione, è necessaria un’integrazione non proxy. La mappatura dei parametri non richiede script in [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html). Per ulteriori informazioni, consulta [Mappatura dei parametri per REST APIs in API Gateway](rest-api-parameter-mapping.md).

**Trasformazioni dei modelli di mappatura**  
Nelle trasformazioni dei modelli di mappatura, si usa un modello di mappatura per mappare i parametri del percorso URL, i parametri della stringa di query URL, le intestazioni HTTP e la richiesta di integrazione o il corpo della risposta di integrazione. Un *modello di mappatura* è uno script espresso in [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) utilizzando [JSONPath espressioni](https://goessner.net/articles/JsonPath/) e applicato al payload in base all'intestazione. `Content-type`  
Con un modello di mappatura è possibile eseguire le seguenti operazioni:  
+ Seleziona i dati da inviare utilizzando l'integrazione Servizi AWS, ad esempio le funzioni Amazon DynamoDB o Lambda o gli endpoint HTTP. Per ulteriori informazioni, consulta [Tutorial: modifica la richiesta e la risposta di integrazione per le integrazioni ai servizi AWS](set-up-data-transformations-in-api-gateway.md).
+ Sostituire in modo condizionale i parametri di richiesta e risposta di integrazione di un’API, creare nuovi valori di intestazione e sostituire i codici di stato. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).
È anche possibile specificare il comportamento dell’API quando il corpo di una richiesta di integrazione ha un’intestazione `Content-type` senza modelli di mappatura corrispondenti. Questo processo è chiamato comportamento passthrough di integrazione. Per ulteriori informazioni, consulta [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md). 

## Scelta tra mappatura dei parametri e trasformazioni dei modelli di mappatura
<a name="rest-api-data-transformations-choose"></a>

Quando possibile, è consigliabile utilizzare la mappatura dei parametri per trasformare i dati. Se l’API richiede la modifica del corpo o l’esecuzione di sostituzioni e modifiche condizionali in base alla richiesta o alla risposta di integrazione in entrata e non è possibile utilizzare un’integrazione proxy, si usano le trasformazioni dei modelli di mappatura.

# Mappatura dei parametri per REST APIs in API Gateway
<a name="rest-api-parameter-mapping"></a>

**Nota**  
Se si utilizza un’API HTTP, consultare [Trasformazione delle richieste e delle risposte API per API HTTP in Gateway API](http-api-parameter-mapping.md).

Nella mappatura dei parametri si mappano i parametri della richiesta o della risposta. È possibile mappare i parametri utilizzando valori statici o espressioni di mappatura dei parametri. Per l’elenco delle espressioni di mappatura, consultare [Riferimento alla fonte di mappatura dei parametri per REST APIs in API Gateway](rest-api-parameter-mapping-sources.md). È possibile utilizzare la mappatura dei parametri nella richiesta di integrazione per integrazioni proxy e non proxy, ma per usarla per una risposta di integrazione, è necessaria un’integrazione non proxy.

Ad esempio, è possibile mappare il parametro di intestazione della richiesta di metodo `puppies` al parametro di intestazione della richiesta di integrazione `DogsAge0`. Quindi, se un client invia l’intestazione `puppies:true` all’API, la richiesta di integrazione invia l’intestazione della richiesta `DogsAge0:true` all’endpoint di integrazione. Nel diagramma seguente viene illustrato il ciclo di vita della richiesta di questo esempio.

![\[Diagramma dell’esempio di mappatura dei parametri di Gateway API per una richiesta\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/parameter-mapping-example1.png)


Per eseguire questo esempio utilizzando Gateway API, consultare [Esempio 1: mappare un parametro della richiesta di metodo a un parametro della richiesta di integrazione](request-response-data-mappings.md#request-response-data-mappings-example-1).

 Inoltre, è possibile mappare il parametro di intestazione `kittens` della risposta di integrazione al parametro di intestazione `CatsAge0` della risposta di metodo. Quindi, se l’endpoint di integrazione restituisce `kittens:false`, il client riceve l’intestazione `CatsAge0:false`. Nel diagramma seguente viene illustrato il ciclo di vita della richiesta di questo esempio.

![\[Diagramma dell’esempio di mappatura dei parametri di Gateway API per una risposta\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/parameter-mapping-example2.png)


**Topics**
+ [Esempi di mappatura dei parametri per REST APIs in API Gateway](request-response-data-mappings.md)
+ [Riferimento alla fonte di mappatura dei parametri per REST APIs in API Gateway](rest-api-parameter-mapping-sources.md)

# Esempi di mappatura dei parametri per REST APIs in API Gateway
<a name="request-response-data-mappings"></a>

Gli esempi seguenti mostrano come creare espressioni di mappatura dei parametri utilizzando la console Gateway API, OpenAPI e modelli CloudFormation . Per un esempio di come utilizzare la mappatura dei parametri per creare le intestazioni CORS richieste, consultare [CORS per REST APIs in API Gateway](how-to-cors.md). 

## Esempio 1: mappare un parametro della richiesta di metodo a un parametro della richiesta di integrazione
<a name="request-response-data-mappings-example-1"></a>

L’esempio seguente mappa il parametro di intestazione `puppies` della richiesta di metodo al parametro di intestazione `DogsAge0`della richiesta di integrazione. 

------
#### [ Console di gestione AWS ]

**Per mappare il parametro della richiesta di metodo**

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

1. Scegliere una REST API.

1. Scegliere un metodo.

   Il metodo deve disporre di un’integrazione non proxy.

1. Per **Impostazioni della richiesta del metodo** scegliere **Modifica**.

1. Scegli **Intestazioni di richiesta HTTP**.

1. Seleziona **Add header (Aggiungi intestazione)**.

1. In **Nome**, inserisci **puppies**.

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

1. Scegli la scheda **Richiesta di integrazione**, quindi seleziona **Modifica** per **Impostazioni della richiesta di integrazione**.

   Aggiunge Console di gestione AWS automaticamente una mappatura dei parametri da `method.request.header.puppies ` a `puppies` per te, ma devi modificare il **nome** in modo che corrisponda al parametro di intestazione della richiesta previsto dall'endpoint di integrazione.

1. In **Nome**, inserisci **DogsAge0**.

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

I passaggi seguenti mostrano come verificare che la mappatura dei parametri sia stata completata correttamente.

**(Facoltativo) Test della mappatura dei parametri**

1. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. In Intestazioni, immetti **puppies:true**.

1. Scegli **Test (Esegui test)**.

1. Nella sezione **Log**, il risultato sarà simile al seguente:

   ```
   Tue Feb 04 00:28:36 UTC 2025 : Method request headers: {puppies=true}
   Tue Feb 04 00:28:36 UTC 2025 : Method request body before transformations: 
   Tue Feb 04 00:28:36 UTC 2025 : Endpoint request URI: http://petstore-demo-endpoint.execute-api.com/petstore/pets
   Tue Feb 04 00:28:36 UTC 2025 : Endpoint request headers: {DogsAge0=true, x-amzn-apigateway-api-id=abcd1234, Accept=application/json, User-Agent=AmazonAPIGateway_aaaaaaa, X-Amzn-Trace-Id=Root=1-abcd-12344}
   ```

   Il parametro dell’intestazione della richiesta è cambiato da `puppies` a `DogsAge0`.

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body:
        openapi: 3.0.1
        info:
          title: ParameterMappingExample
          version: "2025-02-04T00:30:41Z"
        paths:
          /pets:
            get:
              parameters:
                - name: puppies
                  in: header
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.header.DogsAge0: method.request.header.puppies
                passthroughBehavior: when_no_match
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "ParameterMappingExample",
    "version" : "2025-02-04T00:30:41Z"
  },
  "paths" : {
    "/pets" : {
      "get" : {
        "parameters" : [ {
          "name" : "puppies",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.DogsAge0" : "method.request.header.puppies"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Esempio 2: mappare più parametri di richiesta di metodo a diversi parametri di richiesta di integrazione
<a name="request-response-data-mappings-example-2"></a>

L’esempio seguente mappa il parametro della stringa di query della richiesta di metodo con più valori `methodRequestQueryParam` al parametro della stringa di query della richiesta di integrazione `integrationQueryParam` e mappa il parametro dell’intestazione della richiesta di metodo `methodRequestHeaderParam` al parametro del percorso della richiesta di integrazione `integrationPathParam`.

------
#### [ Console di gestione AWS ]

**Per mappare i parametri della richiesta di metodo**

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

1. Scegliere una REST API.

1. Scegliere un metodo.

   Il metodo deve disporre di un’integrazione non proxy.

1. Per **Impostazioni della richiesta del metodo** scegliere **Modifica**.

1. Scegli **Parametri della stringa di query URL**.

1. Scegliere **Add query string (Aggiungi stringa di query)**.

1. In **Nome**, inserisci **methodRequestQueryParam**.

1. Scegli **Intestazioni di richiesta HTTP**.

1. Seleziona **Add header (Aggiungi intestazione)**.

1. In **Nome**, inserisci **methodRequestHeaderParam**.

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

1. Scegli la scheda **Richiesta di integrazione**, quindi seleziona **Modifica** per **Impostazioni della richiesta di integrazione**.

1. Scegli **Parametri di percorso URL**.

1. Scegli **Aggiungi parametro di percorso**.

1. In **Nome**, inserisci **integrationPathParam**.

1. In **Mappato da**, inserire **method.request.header.methodRequestHeaderParam**.

   In questo modo l’intestazione della richiesta di metodo specificata nella richiesta di metodo viene mappata a un nuovo parametro del percorso della richiesta di integrazione.

1. Scegli **Parametri della stringa di query URL**.

1. Scegliere **Add query string (Aggiungi stringa di query)**.

1. In **Nome**, inserisci **integrationQueryParam**.

1. In **Mappato da**, inserire **method.request.multivaluequerystring.methodRequestQueryParam**.

   In questo modo il parametro della stringa di query con più valori viene mappato a un nuovo parametro della stringa di query della richiesta di integrazione a valore singolo.

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

La seguente definizione OpenAPI crea le mappature dei parametri per un’integrazione HTTP:
+ L’intestazione della richiesta di metodo `methodRequestHeaderParam` nel parametro di percorso della richiesta di integrazione `integrationPathParam`
+ La stringa di query della richiesta di metodo con più valori `methodRequestQueryParam` nella stringa di query della richiesta di integrazione `integrationQueryParam`

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: Parameter mapping example 2
          version: "2025-01-15T19:12:31Z"
        paths:
          /:
            post:
              parameters:
                - name: methodRequestQueryParam
                  in: query
                  schema:
                    type: string
                - name: methodRequestHeaderParam
                  in: header
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.querystring.integrationQueryParam: method.request.multivaluequerystring.methodRequestQueryParam
                  integration.request.path.integrationPathParam: method.request.header.methodRequestHeaderParam
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La seguente definizione OpenAPI crea le mappature dei parametri per un’integrazione HTTP:
+ L’intestazione della richiesta di metodo `methodRequestHeaderParam` nel parametro di percorso della richiesta di integrazione `integrationPathParam`
+ La stringa di query della richiesta di metodo con più valori `methodRequestQueryParam` nella stringa di query della richiesta di integrazione `integrationQueryParam`

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example 2",
    "version" : "2025-01-15T19:12:31Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "parameters" : [ {
          "name" : "methodRequestQueryParam",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "methodRequestHeaderParam",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.integrationQueryParam" : "method.request.multivaluequerystring.methodRequestQueryParam",
            "integration.request.path.integrationPathParam" : "method.request.header.methodRequestHeaderParam"
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000,
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Esempio 3: mappare i campi dal corpo della richiesta JSON ai parametri della richiesta di integrazione
<a name="request-response-data-mappings-example-3"></a>

[Puoi anche mappare i parametri della richiesta di integrazione dai campi del corpo della richiesta JSON utilizzando un'espressione. JSONPath ](http://goessner.net/articles/JsonPath/index.html#e2) L’esempio seguente mappa il corpo della richiesta di metodo a un’intestazione della richiesta di integrazione denominata `body-header` e mappa parte del corpo della richiesta, come indicato da un’espressione JSON, a un’intestazione della richiesta di integrazione denominata `pet-price`.

Per testare questo esempio è necessario fornire un input che contenga una categoria di prezzo, come la seguente:

```
[ 
  { 
    "id": 1, 
    "type": "dog", 
    "price": 249.99 
  }
]
```

------
#### [ Console di gestione AWS ]

**Per mappare i parametri della richiesta di metodo**

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

1. Scegliere una REST API.

1. Scegliere un metodo `POST`, `PUT`, `PATCH` o `ANY`.

   Il metodo deve disporre di un’integrazione non proxy.

1. Per **Impostazioni della richiesta di integrazione**, scegliere **Modifica**.

1. Scegliere **Parametri delle intestazioni delle richieste URL**.

1. Scegliere **Aggiungi parametro dell’intestazione della richiesta**.

1. In **Nome**, inserisci **body-header**.

1. In **Mappato da**, inserire **method.request.body**.

   In questo modo il corpo della richiesta di metodo viene mappato a un nuovo parametro di intestazione della richiesta di integrazione.

1. Scegliere **Aggiungi parametro dell’intestazione della richiesta**.

1. In **Nome**, inserisci **pet-price**.

1. In **Mappato da**, inserire ** method.request.body[0].price**.

   In questo modo una parte del corpo della richiesta di metodo viene mappata a un nuovo parametro di intestazione della richiesta di integrazione.

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: Parameter mapping example 3
          version: "2025-01-15T19:19:14Z"
        paths:
          /:
            post:
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.header.pet-price: method.request.body[0].price
                  integration.request.header.body-header: method.request.body
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
                type: http
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La seguente definizione OpenAPI mappa i parametri della richiesta di integrazione dai campi del corpo della richiesta JSON.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example 3",
    "version" : "2025-01-15T19:19:14Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.pet-price" : "method.request.body[0].price",
            "integration.request.header.body-header" : "method.request.body"
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000,
          "type" : "http"
        }
      }
    }
  }
}
```

------

## Esempio 4: mappare la risposta di integrazione alla risposta di metodo
<a name="request-response-data-mappings-example-4"></a>

È anche possibile mappare la risposta di integrazione alla risposta di metodo. L’esempio seguente mappa il corpo della risposta di integrazione a un’intestazione della risposta di metodo denominata `location`, mappa l’intestazione della risposta di integrazione `x-app-id` all’intestazione della risposta di metodo e mappa l’intestazione `id` della risposta di integrazione con più valori `item` all’intestazione della risposta del metodo `items`.

------
#### [ Console di gestione AWS ]

**Per mappare la risposta di integrazione**

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

1. Scegliere una REST API.

1. Scegliere un metodo.

   Il metodo deve disporre di un’integrazione non proxy.

1. Scegliere la scheda **Metodo di risposta**, quindi per **Risposta 200** scegliere **Modifica**.

1. Per **Nome intestazione**, scegliere **Aggiungi intestazione**.

1. Creare tre intestazioni denominate **id**, **item** e **location**.

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

1. Nella scheda **Risposta di integrazione** scegliere **Modifica** per **Predefinito - Risposta**.

1. In **Mappature intestazione** immettere i seguenti valori.

   1. Per **id**, immettere **integration.response.header.x-app-id**

   1. Per **elemento**, immettere **integration.response.multivalueheader.item**

   1. Per **percorso**, immettere **integration.response.body.redirect.url**

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body:
        openapi: 3.0.1
        info:
          title: Parameter mapping example
          version: "2025-01-15T19:21:35Z"
        paths:
          /:
            post:
              responses:
                "200":
                  description: 200 response
                  headers:
                    item:
                      schema:
                        type: string
                    location:
                      schema:
                        type: string
                    id:
                      schema:
                        type: string
              x-amazon-apigateway-integration:
                type: http
                httpMethod: GET
                uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                    responseParameters:
                      method.response.header.id: integration.response.header.x-app-id
                      method.response.header.location: integration.response.body.redirect.url
                      method.response.header.item: integration.response.multivalueheader.item
                requestTemplates:
                  application/json: '{"statusCode": 200}'
                passthroughBehavior: when_no_templates
                timeoutInMillis: 29000
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La definizione OpenAPI seguente mappa la risposta di integrazione alla risposta di metodo.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Parameter mapping example",
    "version" : "2025-01-15T19:21:35Z"
  },
  "paths" : {
    "/" : {
      "post" : {
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "item" : {
                "schema" : {
                  "type" : "string"
                }
              },
              "location" : {
                "schema" : {
                  "type" : "string"
                }
              },
              "id" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "http",
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseParameters" : {
                "method.response.header.id" : "integration.response.header.x-app-id",
                "method.response.header.location" : "integration.response.body.redirect.url",
                "method.response.header.item" : "integration.response.multivalueheader.item"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_templates",
          "timeoutInMillis" : 29000
        }
      }
    }
  }
}
```

------

# Riferimento alla fonte di mappatura dei parametri per REST APIs in API Gateway
<a name="rest-api-parameter-mapping-sources"></a>

Quando si crea una mappatura dei parametri, è possibile specificare i parametri della richiesta di metodo o della risposta di integrazione da modificare e le modalità con cui si desidera modificare tali parametri.

La tabella seguente mostra i parametri della richiesta di metodo che è possibile mappare e l’espressione per creare la mappatura. In queste espressioni, *name* è il nome di un parametro di richiesta del metodo. Ad esempio, per mappare il parametro dell’intestazione della richiesta `puppies`, si utilizza l’espressione `method.request.header.puppies`. L’espressione deve corrispondere all’espressione regolare `'^[a-zA-Z0-9._$-]+$]'`. È possibile utilizzare la mappatura dei parametri nella richiesta di integrazione per le integrazioni proxy e non proxy. 


| **Origine dati mappata** | **Espressione di mappatura** | 
| --- | --- | 
| Percorso della richiesta di metodo | method.request.path.name | 
| Stringa di query della richiesta di metodo | method.request.querystring.name | 
| Stringa di query multi-valore della richiesta del metodo | method.request.multivaluequerystring.name | 
| Intestazione della richiesta di metodo | method.request.header.name | 
| Intestazione multi-valore della richiesta di metodo | method.request.multivalueheader.name | 
| Corpo della richiesta di metodo | method.request.body | 
| Corpo della richiesta del metodo (JsonPath) | `method.request.body.JSONPath_EXPRESSION`. *JSONPath\$1EXPRESSION*è un' JSONPath espressione per un campo JSON del corpo di una richiesta. Per ulteriori informazioni, vedere [JSONPath expression](http://goessner.net/articles/JsonPath/index.html#e2).  | 
| Variabili di fase | stageVariables.name | 
| Variabili di contesto |  `context.name` Il nome deve essere una delle [variabili di contesto supportate](api-gateway-mapping-template-reference.md#context-variable-reference). | 
| Valore statico | `'static_value'`. La *static\$1value* è una stringa letterale e deve essere racchiusa tra virgolette singole. Ad esempio, `'https://www.example.com'`. | 

La tabella seguente mostra i parametri della risposta di integrazione che è possibile mappare e l’espressione per creare la mappatura. In queste espressioni, *name* è il nome di un parametro di risposta di integrazione. È possibile mappare le intestazioni della risposta di metodo da qualsiasi intestazione o corpo della risposta di integrazione, variabili \$1context o valori statici. Per utilizzare la mappatura dei parametri per una risposta di integrazione, è necessaria un’integrazione non proxy.


| Origine dati mappata | Espressione di mappatura | 
| --- | --- | 
| Intestazione della risposta di integrazione | integration.response.header.name | 
| Intestazione della risposta di integrazione | integration.response.multivalueheader.name | 
| Corpo della risposta di integrazione | integration.response.body | 
| Corpo della risposta di integrazione (JsonPath) | `integration.response.body.JSONPath_EXPRESSION` *JSONPath\$1EXPRESSION*è un' JSONPath espressione per un campo JSON del corpo di una risposta. Per ulteriori informazioni, vedere [JSONPath expression](http://goessner.net/articles/JsonPath/index.html#e2). | 
| Variabile di fase | stageVariables.name | 
| Variabile di contesto |  `context.name` Il nome deve essere una delle [variabili di contesto supportate](api-gateway-mapping-template-reference.md#context-variable-reference). | 
| Valore statico | ` 'static_value'` La *static\$1value* è una stringa letterale e deve essere racchiusa tra virgolette singole. Ad esempio, `'https://www.example.com'`. | 

# Trasformazioni dei modelli di mappatura per REST APIs in API Gateway
<a name="models-mappings"></a>

Una trasformazione del modello di mappatura utilizza un modello di mappatura per modificare la richiesta o la risposta di integrazione. Un *modello di mappatura* è uno script espresso in [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) e applicato a un payload utilizzando un codice basato sull'intestazione. [JSONPath ](https://goessner.net/articles/JsonPath/)`Content-type` Si utilizzano i modelli di mappatura per le trasformazioni dei modelli di mappatura. Questa sezione descrive le informazioni concettuali relative ai modelli di mappatura.

Il diagramma seguente mostra il ciclo di vita della richiesta per una `POST /pets` risorsa che ha un'integrazione con un endpoint di integrazione. PetStore In questa API, un utente invia i dati su un animale domestico e l’endpoint di integrazione restituisce la tariffa di adozione associata all’animale domestico. In questo ciclo di vita della richiesta, le trasformazioni dei modelli di mappatura filtrano il corpo della richiesta all’endpoint di integrazione e il corpo della risposta dall’endpoint di integrazione.

![\[Esempio di ciclo di vita della richiesta\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/mapping-template-transforms.png)


Le sezioni seguenti illustrano il ciclo di vita della richiesta e della risposta.

## Richiesta di metodo e richiesta di integrazione
<a name="models-mappings-request"></a>

Nell’esempio precedente, se il corpo della richiesta inviato alla richiesta di metodo è:

```
POST /pets
    HTTP/1.1
    Host:abcd1234.us-west-2.amazonaws.com
    Content-type: application/json
    
  {
    "id": 1,
    "type": "dog",
    "Age": 11,
  }
```

Questo corpo della richiesta non è nel formato corretto per essere utilizzato dall’endpoint di integrazione, pertanto Gateway API esegue una trasformazione del modello di mappatura. Gateway API esegue solo una trasformazione del modello di mappatura perché esiste un modello di mappatura definito per Content-Type `application/json`. Se non si definisce un modello di mappatura per Content-Type, per impostazione predefinita, Gateway API passa il corpo all’endpoint di integrazione tramite la richiesta di integrazione. Per modificare questo comportamento, consultare [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md).

Il seguente modello di mappatura trasforma i dati della richiesta di metodo nella richiesta di integrazione prima che vengano inviati all’endpoint di integrazione:

```
#set($inputRoot = $input.path('$'))
  {
    "dogId" : "dog_"$elem.id,
    "Age": $inputRoot.Age
  }
```

1. La variabile `$inputRoot` rappresenta l'oggetto radice nei dati JSON originali della sezione precedente. Le direttive iniziano con il simbolo `#`.

1. `dog` è una concatenazione di `id` dell’utente e di un valore di stringa.

1. `Age` proviene dal corpo della richiesta di metodo.

Quindi, il seguente output viene inoltrato all’endpoint di integrazione:

```
{
    "dogId" : "dog_1",
    "Age": 11
  }
```

## Risposta di integrazione e risposta di metodo
<a name="models-mappings-response"></a>

Dopo l’esito positivo della richiesta all’endpoint di integrazione, l’endpoint invia una risposta alla risposta di integrazione di Gateway API. L’esempio seguente indica i dati di output di un endpoint di integrazione:

```
{
    "dogId" : "dog_1",
    "adoptionFee": 19.95,
}
```

La risposta di metodo prevede un payload diverso da quello restituito dalla risposta di integrazione. Gateway API esegue una trasformazione del modello di mappatura. Gateway API esegue solo una trasformazione del modello di mappatura perché esiste un modello di mappatura definito per Content-Type `application/json`. Se non si definisce un modello di mappatura per Content-Type, per impostazione predefinita, Gateway API passa il corpo alla risposta di metodo tramite la risposta di integrazione. Per modificare questo comportamento, consultare [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md).

```
#set($inputRoot = $input.path('$'))
  {
    "adoptionFee" : $inputRoot.adoptionFee,
  }
```

Il seguente output viene inviato alla risposta di metodo:

```
{"adoptionFee": 19.95}
```

L’esempio di trasformazione del modello di mappatura è completato. Se possibile, anziché utilizzare trasformazioni di modelli di mappatura, è consigliabile un’integrazione proxy per trasformare i dati. Per ulteriori informazioni, consulta [Scegliere un tipo di integrazione API Gateway API](api-gateway-api-integration-types.md).

# Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway
<a name="integration-passthrough-behaviors"></a>

Se la richiesta di metodo ha un payload senza modello di mappatura definito per l’intestazione `Content-Type`, è possibile scegliere di passare il payload della richiesta fornito dal client tramite la richiesta di integrazione al backend senza trasformazione. Il processo è noto come passthrough di integrazione. 

 L’effettivo comportamento del passthrough di una richiesta in entrata è determinato da questa impostazione. Sono disponibili tre opzioni: 

**Opzione Quando nessun modello corrisponde all'intestazione Content-Type della richiesta**  
Selezionare questa opzione se si desidera che venga eseguito il passthrough del corpo della richiesta di metodo nella richiesta di integrazione al back-end senza trasformazione quando il tipo di contenuto della richiesta di metodo non corrisponde ai tipi di contenuto associati ai modelli di mappatura.  
Durante la chiamata all'API Gateway API, scegli questa opzione impostando `WHEN_NO_MATCH` come valore della proprietà `passthroughBehavior` in [Integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html).

**Quando non ci sono modelli definiti (consigliato)**  
Selezionare questa opzione se si desidera che venga eseguito il passthrough del corpo della richiesta di metodo nella richiesta di integrazione al back-end senza trasformazione quando nella richiesta di integrazione non è stato definito un modello di mappatura. Se viene definito un modello con questa opzione selezionata, la richiesta di metodo con un payload e un tipo di contenuto che non corrispondono ad alcun modello di mappatura definito verrà rifiutata con una risposta HTTP 415 Tipo di supporto non compatibile.  
Durante la chiamata all'API Gateway API, scegli questa opzione impostando `WHEN_NO_TEMPLATES` come valore della proprietà `passthroughBehavior` in [Integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html).

**Mai**  
Selezionare questa opzione se non si desidera che venga eseguito il passthrough del corpo della richiesta di metodo nella richiesta di integrazione al back-end senza trasformazione quando nella richiesta di integrazione non è stato definito un modello di mappatura. Se viene definito un modello al momento della selezione di questa opzione, la richiesta di metodo di un tipo di contenuto non mappato sarà rifiutata con la risposta Tipo di supporto non supportato HTTP 415.   
Durante la chiamata all'API Gateway API, scegli questa opzione impostando `NEVER` come valore della proprietà `passthroughBehavior` in [Integrazione](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html).

 Gli esempi seguenti illustrano i possibili comportamenti del passthrough. 

Esempio 1: viene definito un modello di mappatura nella richiesta di integrazione per il tipo di contenuto `application/json`.


| Content-type | Opzione passthrough | Comportamento | 
| --- | --- | --- | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1MATCH | Il payload della richiesta viene trasformato utilizzando il modello. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta viene trasformato utilizzando il modello. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | NEVER | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/json | WHEN\$1NO\$1MATCH | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/json | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/json | NEVER | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/xml | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/xml | WHEN\$1NO\$1TEMPLATES | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/xml | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 

Esempio 2: viene definito un modello di mappatura nella richiesta di integrazione per il tipo di contenuto `application/xml`.


| Content-type | Opzione passthrough | Comportamento | 
| --- | --- | --- | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1TEMPLATES | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/json | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/json | WHEN\$1NO\$1TEMPLATES | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/json | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/xml | WHEN\$1NO\$1MATCH | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/xml | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta viene trasformato utilizzando il modello. | 
| application/xml | NEVER | Il payload della richiesta viene trasformato utilizzando il modello. | 

Esempio 3: nessun modello di mappatura viene definito nella richiesta di integrazione


| Content-type | Opzione passthrough | Comportamento | 
| --- | --- | --- | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| Nessuno Gateway API utilizza l’impostazione predefinita `application/json` | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/json | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/json | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/json | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 
| application/xml | WHEN\$1NO\$1MATCH | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/xml | WHEN\$1NO\$1TEMPLATES | Il payload della richiesta non viene trasformato e viene inviato al back-end inalterato. | 
| application/xml | NEVER | La richiesta viene respinta con una risposta HTTP 415 Unsupported Media Type. | 

# Esempio di modello di mappatura aggiuntivo per REST APIs in API Gateway
<a name="example-photos"></a>

L’esempio seguente mostra un’API per album fotografico in Gateway API che utilizza modelli di mappatura per trasformare i dati delle richieste e delle risposte di integrazione. Utilizza anche modelli di dati per definire i payload della richiesta di metodo e della risposta di integrazione. Per ulteriori informazioni sui modelli di dati, consulta [Modelli di dati per REST APIs](models-mappings-models.md).

## Richiesta di metodo e richiesta di integrazione
<a name="example-photos-request"></a>

Di seguito è riportato un modello che definisce il corpo della richiesta di metodo. Questo modello di input richiede che il chiamante carichi una pagina di foto con un minimo di 10 foto per ogni pagina. È possibile utilizzare questo modello di input per generare un SDK o per usare la convalida della richiesta per l’API. Quando si utilizza la convalida della richiesta, se il corpo della richiesta di metodo non aderisce alla struttura dei dati del modello, Gateway API non esegue la richiesta. 

```
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "PhotosInputModel",
  "type": "object",
  "properties": {
    "photos": {
      "type": "object",
      "required" : [
      "photo"
      ],
      "properties": {
        "page": { "type": "integer" },
        "pages": { "type": "string" },
        "perpage": { "type": "integer", "minimum" : 10 },
        "total": { "type": "string" },
        "photo": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": { "type": "string" },
              "owner": { "type": "string" },
              "photographer_first_name" : {"type" : "string"},
              "photographer_last_name" : {"type" : "string"},
              "secret": { "type": "string" },
              "server": { "type": "string" },
              "farm": { "type": "integer" },
              "title": { "type": "string" },
              "ispublic": { "type": "boolean" },
              "isfriend": { "type": "boolean" },
              "isfamily": { "type": "boolean" }
            }
          }
        }
      }
    }
  }
}
```

Di seguito è riportato un esempio di corpo della richiesta di metodo che aderisce alla struttura dei dati del modello di dati precedente.

```
{
  "photos": {
    "page": 1,
    "pages": "1234",
    "perpage": 100,
    "total": "123398",
    "photo": [
      {
        "id": "12345678901",
        "owner": "23456789@A12",
        "photographer_first_name" : "Saanvi",
        "photographer_last_name" : "Sarkar",
        "secret": "abc123d456",
        "server": "1234",
        "farm": 1,
        "title": "Sample photo 1",
        "ispublic": true,
        "isfriend": false,
        "isfamily": false
      },
      {
        "id": "23456789012",
        "owner": "34567890@B23",
        "photographer_first_name" : "Richard",
        "photographer_last_name" : "Roe",
        "secret": "bcd234e567",
        "server": "2345",
        "farm": 2,
        "title": "Sample photo 2",
        "ispublic": true,
        "isfriend": false,
        "isfamily": false
      }
    ]
  }
}
```

In questo esempio, quando il corpo della richiesta di metodo precedente viene inviato dal client, il modello di mappatura trasforma il payload in modo che corrisponda al formato richiesto dall’endpoint di integrazione.

```
#set($inputRoot = $input.path('$'))
{
  "photos": [
#foreach($elem in $inputRoot.photos.photo)
    {
      "id": "$elem.id",
      "photographedBy": "$elem.photographer_first_name $elem.photographer_last_name",
      "title": "$elem.title",
      "ispublic": $elem.ispublic,
      "isfriend": $elem.isfriend,
      "isfamily": $elem.isfamily
    }#if($foreach.hasNext),#end
		
#end
  ]
}
```

L’esempio seguente fornisce i dati di output della trasformazione:

```
{
  "photos": [
    {
      "id": "12345678901",
      "photographedBy": "Saanvi Sarkar",
      "title": "Sample photo 1",
      "ispublic": true,
      "isfriend": false,
      "isfamily": false
    },		
    {
      "id": "23456789012",
      "photographedBy": "Richard Roe",
      "title": "Sample photo 2",
      "ispublic": true,
      "isfriend": false,
      "isfamily": false
    }		
  ]
}
```

Questi dati vengono inviati alla richiesta di integrazione e quindi all’endpoint di integrazione.

## Risposta di integrazione e risposta di metodo
<a name="photos-example-response"></a>

Di seguito è riportato un esempio di modello di output per i dati delle foto dall’endpoint di integrazione. È possibile utilizzare questo metodo per un modello di risposta del metodo, che è necessario quando si genera un SDK tipizzato in modo sicuro per l'API. Ciò garantisce che l'output venga trasmesso in una classe appropriata in Java o Objective-C.

```
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "PhotosOutputModel",
  "type": "object",
  "properties": {
    "photos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "photographedBy": { "type": "string" },
          "title": { "type": "string" },
          "ispublic": { "type": "boolean" },
          "isfriend": { "type": "boolean" },
          "isfamily": { "type": "boolean" }
        }
      }
    }
  }
}
```

L’endpoint di integrazione potrebbe non generare una risposta che aderisce alla struttura dei dati di questo modello. Ad esempio, la risposta di integrazione potrebbe essere simile alla seguente:

```
  "photos": [
    {
      "id": "12345678901",
      "photographedBy": "Saanvi Sarkar",
      "title": "Sample photo 1",
      "description": "My sample photo 1",
      "public": true,
      "friend": false,
      "family": false
    },		
    {
      "id": "23456789012",
      "photographedBy": "Richard Roe",
      "title": "Sample photo 2",
      "description": "My sample photo 1",
      "public": true,
      "friend": false,
      "family": false
    }		
  ]
}
```

Il modello di mappatura di esempio seguente trasforma i dati della risposta di integrazione nel formato previsto dalla risposta di metodo:

```
#set($inputRoot = $input.path('$'))
{
  "photos": [
#foreach($elem in $inputRoot.photos.photo)
    {
      "id": "$elem.id",
      "photographedBy": "$elem.photographer_first_name $elem.photographer_last_name",
      "title": "$elem.title",
      "ispublic": $elem.public,
      "isfriend": $elem.friend,
      "isfamily": $elem.family
    }#if($foreach.hasNext),#end
		
#end
  ]
}
```

L’esempio seguente fornisce i dati di output della trasformazione:

```
{
  "photos": [
    {
      "id": "12345678901",
      "photographedBy": "Saanvi Sarkar",
      "title": "Sample photo 1",
      "ispublic": true,
      "isfriend": false,
      "isfamily": false
    },		
    {
      "id": "23456789012",
      "photographedBy": "Richard Roe",
      "title": "Sample photo 2",
      "ispublic": true,
      "isfriend": false,
      "isfamily": false
    }		
  ]
}
```

Questi dati vengono inviati alla risposta di metodo e quindi nuovamente al client.

# Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway
<a name="apigateway-override-request-response-parameters"></a>

È possibile utilizzare le trasformazioni dei modelli di mappatura per sostituire qualsiasi tipo di parametro della richiesta, intestazione della risposta o codice di stato della risposta. Per utilizzare il modello di mappatura:
+ Esegui mappature many-to-one dei parametri
+ Sostituire i parametri dopo l'applicazione delle mappature standard di Gateway API
+ Mappare i parametri in modo condizionale in base al contenuto del corpo o ad altri valori dei parametri
+ Creare nuovi parametri in modo programmatico
+ Sostituire i codici di stato restituiti dall'endpoint di integrazione

Le sovrascritture sono finali. Una sovrascrittura può essere applicata a ciascun parametro una sola volta. Se si prova a sovrascrivere lo stesso parametro più volte, Gateway API restituisce una risposta `5XX`. Se occorre sovrascrivere lo stesso parametro più volte in tutto il modello, ti consigliamo di creare una variabile e applicare la sovrascrittura alla fine del modello. Il modello viene applicato solo dopo che l'intero modello è stato analizzato.

## Esempio 1: sostituire il codice di stato in base al corpo di integrazione
<a name="apigateway-override-request-response-examples"></a>

L’esempio seguente utilizza l’[API di esempio](api-gateway-create-api-from-example.md) per sostituire il codice di stato in base al corpo della risposta di integrazione.

------
#### [ Console di gestione AWS ]

**Per sostituire un codice di stato in base al corpo della risposta di integrazione**

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

1. Seleziona **Create API** (Crea API).

1. Per **API REST**, scegliere **Crea**.

1. Per **Dettagli API**, scegliere **API di esempio**.

1. Seleziona **Create API** (Crea API).

   Gateway API crea un’API PetStore di esempio. Per recuperare le informazioni su un animale domestico, si utilizza la richiesta di metodo dell’API `GET /pets/{petId}`, dove `{petId}` è un parametro di percorso corrispondente al numero ID di un animale domestico.

   In questo esempio, si sostituisce il codice di risposta del metodo `GET` con `400` quando viene rilevata una condizione di errore.

1. Nella struttura **Risorse**, scegli il metodo `GET` in `/{petId}`.

1. Innanzitutto, esegui il test dell’attuale implementazione dell’API. 

   Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. Per **petId** immetti **-1**, quindi seleziona **Test**.

   Il **corpo della risposta indica** un errore: out-of-range

   ```
   {
     "errors": [
       {
         "key": "GetPetRequest.petId",
         "message": "The value is out of range."
       }
     ]
   }
   ```

   Inoltre, l’ultima riga nella sezione **Log** termina con: `Method completed with status: 200`.

   L’integrazione è stata completata, ma si è verificato un errore. Ora si sostituisce il codice di stato in base alla risposta di integrazione.

1. Nella scheda **Risposta di integrazione** scegli **Modifica** per **Predefinito - Risposta**.

1. Scegli **Modelli di mappatura**.

1. Scegliere **Add mapping template (Aggiungi modello di mappatura)**.

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

1. Per **Corpo del modello** inserisci quanto segue:

   ```
   #set($inputRoot = $input.path('$'))
   $input.json("$")
   #if($inputRoot.toString().contains("error"))
   #set($context.responseOverride.status = 400)
   #end
   ```

   Questo modello di mappatura utilizza la variabile `$context.responseOverride.status` per sostituire il codice di stato con `400` se la risposta di integrazione contiene la stringa `error`.

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

1. Seleziona la scheda **Test**.

1. Per **petId** immetti **-1**.

1. Nei risultati, il **Response Body** indica un out-of-range errore:

   ```
   {
     "errors": [
       {
         "key": "GetPetRequest.petId",
         "message": "The value is out of range."
       }
     ]
   }
   ```

   Tuttavia, l’ultima riga nella sezione **Log** termina ora con: `Method completed with status: 400`.

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: PetStore Example 1
          description: Example pet store API.
          version: "2025-01-14T00:13:18Z"
        paths:
          /pets/{petId}:
            get:
              parameters:
                - name: petId
                  in: path
                  required: true
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets/{petId}
                responses:
                  default:
                    statusCode: "200"
                    responseTemplates:
                      application/json: |-
                        #set($inputRoot = $input.path('$'))
                        $input.json("$")
                        #if($inputRoot.toString().contains("error"))
                        #set($context.responseOverride.status = 400)
                        #end
                requestParameters:
                  integration.request.path.petId: method.request.path.petId
                passthroughBehavior: when_no_match
                type: http
        components:
          schemas:
            Pet:
              type: object
              properties:
                id:
                  type: integer
                type:
                  type: string
                price:
                  type: number
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

La seguente definizione OpenAPI crea la risorsa `GET pets/{petId}` e sostituisce il codice di stato in base al corpo di integrazione.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "PetStore Example 1",
    "description" : "Example pet store API.",
    "version" : "2025-01-14T00:13:18Z"
  },
  "paths" : {
    "/pets/{petId}" : {
      "get" : {
        "parameters" : [ {
          "name" : "petId",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets/{petId}",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseTemplates" : {
                "application/json" : "#set($inputRoot = $input.path('$'))\n$input.json(\"$\")\n#if($inputRoot.toString().contains(\"error\"))\n#set($context.responseOverride.status = 400)\n#end"
              }
            }
          },
          "requestParameters" : {
            "integration.request.path.petId" : "method.request.path.petId"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "Pet" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer"
          },
          "type" : {
            "type" : "string"
          },
          "price" : {
            "type" : "number"
          }
        }
      }
    }
  }
}
```

------

## Esempio 2: sostituire l’intestazione della richiesta e creare nuove intestazioni
<a name="apigateway-override-request-response-examples-2"></a>

L’esempio seguente utilizza l’[API di esempio](api-gateway-create-api-from-example.md) per sostituire l’intestazione della richiesta e creare nuove intestazioni.

------
#### [ Console di gestione AWS ]

**Per sostituire un’intestazione della richiesta di metodo creando una nuova intestazione**

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

1. Scegli l’API di esempio creata nel tutorial precedente. Il nome dell'API dovrebbe essere. **PetStore**

1. Nella struttura **Risorse**, scegli il metodo `GET` in `/pet`.

1. Nella scheda **Richiesta metodo** scegli **Modifica** in **Impostazioni della richiesta del metodo**.

1. Scegli **Intestazioni di richiesta HTTP**, quindi seleziona **Aggiungi intestazione**.

1. In **Nome**, inserisci **header1**.

1. Scegli **Aggiungi intestazione**, quindi crea una seconda intestazione chiamata **header2**.

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

   Ora, si combinano queste intestazioni in un unico valore di intestazione utilizzando un modello di mappatura.

1. Nella scheda **Richiesta di integrazione** seleziona **Modifica** per **Impostazioni della richiesta di integrazione**.

1. Per **Richiesta corpo passthrough** scegli **Quando non ci sono modelli definiti (consigliato)**.

1. Scegli **Modelli di mappatura** e procedi come indicato di seguito:

   1. Scegliere **Add mapping template (Aggiungi modello di mappatura)**.

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

   1. Per **Corpo del modello** inserisci quanto segue:

      ```
      #set($header1Override = "pets")
      #set($header3Value = "$input.params('header1')$input.params('header2')")
      $input.json("$")
      #set($context.requestOverride.header.header3 = $header3Value)
      #set($context.requestOverride.header.header1 = $header1Override)
      #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
      ```

      Questo modello di mappatura sostituisce `header1` con la stringa `pets` e crea un’intestazione con più valori chiamata `$header3Value` che combina `header1` e `header2`.

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

1. Seleziona la scheda **Test**.

1. In **Intestazioni**, copiare il codice seguente:

   ```
   header1:header1Val
   header2:header2Val
   ```

1. Scegli **Test (Esegui test)**.

   Nella sezione **Log** è presente una voce che include questo testo:

   ```
   Endpoint request headers: {header3=header1Valheader2Val, 
   header2=header2Val, header1=pets, x-amzn-apigateway-api-id=api-id,
   Accept=application/json, multivalueheader=pets,header1Valheader2Val}
   ```

------
#### [ CloudFormation ]

 In questo esempio, si utilizza la proprietà [body](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html#cfn-apigateway-restapi-body) per importare un file di definizione OpenAPI in Gateway API. 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Body: 
        openapi: 3.0.1
        info:
          title: PetStore Example 2
          description: Example pet store API.
          version: "2025-01-14T00:36:18Z"
        paths:
          /pets:
            get:
              parameters:
                - name: header2
                  in: header
                  schema:
                    type: string
                - name: page
                  in: query
                  schema:
                    type: string
                - name: type
                  in: query
                  schema:
                    type: string
                - name: header1
                  in: header
                  schema:
                    type: string
              responses:
                "200":
                  description: 200 response
              x-amazon-apigateway-integration:
                httpMethod: GET
                uri: http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets
                responses:
                  default:
                    statusCode: "200"
                requestParameters:
                  integration.request.header.header1: method.request.header.header1
                  integration.request.header.header2: method.request.header.header2
                  integration.request.querystring.page: method.request.querystring.page
                  integration.request.querystring.type: method.request.querystring.type
                requestTemplates:
                  application/json: |-
                    #set($header1Override = "pets")
                    #set($header3Value = "$input.params('header1')$input.params('header2')")
                    $input.json("$")
                    #set($context.requestOverride.header.header3 = $header3Value)
                    #set($context.requestOverride.header.header1 = $header1Override)
                    #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
                passthroughBehavior: when_no_match
                type: http
        components:
          schemas:
            Pet:
              type: object
              properties:
                id:
                  type: integer
                type:
                  type: string
                price:
                  type: number
  ApiGatewayDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  ApiGatewayDeployment20250219:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn: Api 
    Properties: 
      RestApiId: !Ref Api
  Stage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
       DeploymentId: !Ref ApiGatewayDeployment20250219
       RestApiId: !Ref Api
       StageName: prod
```

------
#### [ OpenAPI ]

 La seguente definizione OpenAPI crea la risorsa `GET pets`, sostituisce l’intestazione della richiesta e crea nuove intestazioni.

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "PetStore Example 2",
    "description" : "Example pet store API.",
    "version" : "2025-01-14T00:36:18Z"
  },
  "paths" : {
    "/pets" : {
      "get" : {
        "parameters" : [ {
          "name" : "header2",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "type",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "header1",
          "in" : "header",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response"
          }
        },
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.header1" : "method.request.header.header1",
            "integration.request.header.header2" : "method.request.header.header2",
            "integration.request.querystring.page" : "method.request.querystring.page",
            "integration.request.querystring.type" : "method.request.querystring.type"
          },
          "requestTemplates" : {
            "application/json" : "#set($header1Override = \"pets\")\n#set($header3Value = \"$input.params('header1')$input.params('header2')\")\n$input.json(\"$\")\n#set($context.requestOverride.header.header3 = $header3Value)\n#set($context.requestOverride.header.header1 = $header1Override)\n#set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  }
}
```

------

Per utilizzare la sostituzione di un modello di mappatura, si aggiunge una o più delle seguenti variabili `$context`. Per l’elenco delle variabili `$context`, consultare [Variabili di contesto per le trasformazioni dei dati](api-gateway-mapping-template-reference.md#context-variable-reference).

# Tutorial: modifica la richiesta e la risposta di integrazione per le integrazioni ai servizi AWS
<a name="set-up-data-transformations-in-api-gateway"></a>

Il seguente tutorial mostra come utilizzare le trasformazioni dei modelli di mappatura per configurare i modelli di mappatura per trasformare le richieste e le risposte di integrazione utilizzando la console e la CLI. AWS 

**Topics**
+ [Configurare la trasformazione dei dati utilizzando la console Gateway Amazon API](#mapping-example-console)
+ [Configura la trasformazione dei dati utilizzando la AWS CLI](#mapping-example-cli)
+ [CloudFormation Modello di trasformazione dei dati completato](#api-gateway-data-transformations-full-cfn-stack)

## Configurare la trasformazione dei dati utilizzando la console Gateway Amazon API
<a name="mapping-example-console"></a>

[In questo tutorial, creerai un'API incompleta e una tabella DynamoDB utilizzando il seguente file.zip .zip. data-transformation-tutorial-console](samples/data-transformation-tutorial-console.zip) Questa API incompleta dispone di una risorsa `/pets`  con i metodi `GET` e `POST`. 
+ Il metodo `GET` otterrà i dati dall'endpoint HTTP `http://petstore-demo-endpoint.execute-api.com/petstore/pets`. I dati di output verranno trasformati in base al modello di mappatura in [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).
+ Il metodo `POST` consentirà all'utente di pubblicare (`POST`) le informazioni sugli animali domestici in una tabella Amazon DynamoDB utilizzando un modello di mappatura.

Scarica e decomprimi il modello di creazione [dell'](samples/data-transformation-tutorial-console.zip)app per. CloudFormation Verrà utilizzato questo modello per creare una tabella DynamoDB per pubblicare informazioni sugli animali domestici e un'API incompleta. Il resto della procedura verrà completato nella console Gateway Amazon API. 

**Per creare una pila CloudFormation**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Scegliere **Create stack (Crea stack)**, quindi **With new resources (standard) (Con nuove risorse (standard))**.

1. In **Specificare modello**, scegliere **Carica un file modello**.

1. Selezionare il modello scaricato.

1. Scegli **Next (Successivo)**. 

1. Per **Stack name (Nome stack)**, inserire **data-transformation-tutorial-console**, quindi scegliere **Next (Avanti)**.

1. Per **Configure stack options (Configura opzioni di stack)**, scegliere **Next (Successivo)**.

1. Per quanto riguarda **le funzionalità**, riconosci che CloudFormation puoi creare risorse IAM nel tuo account.

1. Scegli **Avanti**, quindi scegli **Invia**.

CloudFormation fornisce le risorse specificate nel modello. Per completare il provisioning delle risorse, potrebbero essere necessari alcuni minuti. Quando lo stato del tuo CloudFormation stack è **CREATE\$1COMPLETE**, sei pronto per passare alla fase successiva.

**Test della risposta di integrazione `GET`**

1. Nella scheda **Risorse** dello CloudFormation stack di**data-transformation-tutorial-console**, seleziona l'ID fisico della tua API.

1. Nel pannello di navigazione principale scegli **Risorse**, quindi seleziona il metodo **GET**. 

1. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

   L'output del test mostrerà quanto segue: 

   ```
   [
     {
       "id": 1,
       "type": "dog",
       "price": 249.99
     },
     {
       "id": 2,
       "type": "cat",
       "price": 124.99
     },
     {
       "id": 3,
       "type": "fish",
       "price": 0.99
     }
   ]
   ```

   Questo output verrà trasformato in base al modello di mappatura in [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).

**Trasformazione della risposta di integrazione `GET`**

1. Scegli la scheda **Risposta di integrazione**.

   Attualmente non sono definiti modelli di mappatura, quindi la risposta di integrazione non verrà trasformata. 

1. Per **Predefinito - Risposta** scegli **Modifica**.

1. Scegli **Modelli di mappatura** e procedi come indicato di seguito:

   1. Scegliere **Add mapping template (Aggiungi modello di mappatura)**.

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

   1. Per **Corpo del modello** inserisci quanto segue:

      ```
      #set($inputRoot = $input.path('$'))
      [
      #foreach($elem in $inputRoot)
        {
          "description" : "Item $elem.id is a $elem.type.",
          "askingPrice" : $elem.price
        }#if($foreach.hasNext),#end
      
      #end
      ]
      ```

   Scegli **Save** (Salva).

**Test della risposta di integrazione `GET`**
+ Scegli la scheda **Test**, quindi seleziona **Test**.

  L'output del test mostrerà la risposta trasformata. 

  ```
  [
    {
      "description" : "Item 1 is a dog.",
      "askingPrice" : 249.99
    },
    {
      "description" : "Item 2 is a cat.",
      "askingPrice" : 124.99
    },
    {
      "description" : "Item 3 is a fish.",
      "askingPrice" : 0.99
    }
  ]
  ```

**Trasformazione dei dati di input dal metodo `POST`**

1. Scegli il metodo **POST**.

1. Scegli la scheda **Richiesta di integrazione**, quindi seleziona **Modifica** per **Impostazioni della richiesta di integrazione**.

   Il CloudFormation modello ha compilato alcuni campi di richiesta di integrazione. 
   +  Il tipo di integrazione è Servizio AWS. 
   +  Servizio AWS Si tratta di DynamoDB. 
   +  Il metodo HTTP è `POST`. 
   +  L'operazione è `PutItem`. 
   +  Il ruolo di esecuzione che consente ad API Gateway di inserire un elemento nella tabella DynamoDB è. `data-transformation-tutorial-console-APIGatewayRole` CloudFormation ha creato questo ruolo per consentire ad API Gateway di disporre delle autorizzazioni minime per interagire con DynamoDB. 

    Il nome della tabella DynamoDB non è stato specificato. Il nome verrà specificato nei passaggi seguenti. 

1. Per **Richiesta corpo passthrough** seleziona **Mai**.

   Ciò significa che l'API rifiuterà i dati con Content-Types che non dispongono di un modello di mappatura.

1. Scegli **Modelli di mappatura**.

1. **Tipo di contenuto** è impostato su `application/json`. Ciò significa che i tipi di contenuto che non lo sono application/json verranno rifiutati dall'API. Per ulteriori informazioni sui comportamenti passthrough di integrazione, consultare [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md).

1. Inserire il codice seguente nell'editor di testo.

   ```
   {
       "TableName":"data-transformation-tutorial-console-ddb",
       "Item": {
           "id": {
               "N": $input.json("$.id")
           },
           "type": {
               "S": $input.json("$.type")
           },
           "price": {
               "N": $input.json("$.price")
           }
       }
   }
   ```

    Questo modello specifica la tabella come `data-transformation-tutorial-console-ddb` e imposta gli elementi come `id`, `type` e`price`. Gli elementi proverranno dal corpo del metodo `POST`. È anche possibile utilizzare un modello di dati per creare un modello di mappatura. Per ulteriori informazioni, consulta [Richiedi la convalida per REST APIs in API Gateway](api-gateway-method-request-validation.md). 

1. Scegliere il pulsante **Salva** per salvare il modello di mappatura. 

**Aggiunta di un metodo e una risposta di integrazione dal metodo `POST`**

Hanno CloudFormation creato un metodo vuoto e una risposta di integrazione. Questa risposta verrà modificata per fornire ulteriori informazioni. Per ulteriori informazioni su come modificare le risposte, consultare [Esempi di mappatura dei parametri per REST APIs in API Gateway](request-response-data-mappings.md).

1. Nella scheda **Risposta di integrazione** scegli **Modifica** per **Predefinito - Risposta**.

1. Scegli **Modelli di mappatura**, quindi seleziona **Aggiungi modello di mappatura**.

1. Per **Content-type** immetti **application/json**.

1. Nell'editor di codice, inserire il seguente modello di mappatura di output per inviare un messaggio di output:

   ```
   { "message" : "Your response was recorded at $context.requestTime" }
   ```

   Per ulteriori informazioni sulle variabili di contesto, consultare [Variabili di contesto per le trasformazioni dei dati](api-gateway-mapping-template-reference.md#context-variable-reference).

1. Scegliere il pulsante **Salva** per salvare il modello di mappatura. 

**Test del metodo `POST`**

Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. Nel corpo della richiesta, inserire il seguente esempio.

   ```
   {
             "id": "4",
             "type" : "dog",
             "price": "321"
   }
   ```

1. Scegli **Test (Esegui test)**.

   L'output dovrebbe mostrare il messaggio di operazione riuscita.

    Puoi aprire la console DynamoDB [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)all'indirizzo per verificare che l'elemento di esempio sia nella tua tabella. 

**Per eliminare uno stack CloudFormation**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Seleziona il tuo stack. CloudFormation 

1. Scegli **Elimina** e conferma la tua scelta.

## Configura la trasformazione dei dati utilizzando la AWS CLI
<a name="mapping-example-cli"></a>

[In questo tutorial, creerai un'API incompleta e una tabella DynamoDB utilizzando il seguente file.zip .zip. data-transformation-tutorial-cli](samples/data-transformation-tutorial-cli.zip) Questa API incompleta dispone di una risorsa `/pets` con un metodo `GET` integrato con l'endpoint HTTP `http://petstore-demo-endpoint.execute-api.com/petstore/pets`. Verrà creato un metodo `POST` per connettersi a una tabella DynamoDB e si useranno modelli di mappatura per inserire dati in una tabella DynamoDB. 
+ I dati di output verranno quindi trasformati in base al modello di mappatura in [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).
+ Verrà creato un metodo `POST` per consentire all'utente di pubblicare (`POST`) le informazioni sugli animali domestici in una tabella Amazon DynamoDB utilizzando un modello di mappatura.

**Per creare uno stack CloudFormation**

Scarica e decomprimi [il modello di creazione dell'app](samples/data-transformation-tutorial-cli.zip) per. CloudFormation

Per completare il tutorial seguente, è necessario disporre della [AWS Command Line Interface (AWS CLI) versione 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). 

Per i comandi lunghi viene utilizzato un carattere di escape (`\`) per dividere un comando su più righe.
**Nota**  
In Windows, alcuni comandi della CLI Bash utilizzati comunemente (ad esempio, `zip`) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una versione integrata su Windows di Ubuntu e Bash, [installa il sottosistema Windows per Linux](https://learn.microsoft.com/en-us/windows/wsl/install). I comandi della CLI di esempio in questa guida utilizzano la formattazione Linux. Se si utilizza la CLI di Windows, i comandi che includono documenti JSON in linea dovranno essere riformattati. 

1.  Usa il seguente comando per creare lo CloudFormation stack.

   ```
   aws cloudformation create-stack --stack-name data-transformation-tutorial-cli --template-body file://data-transformation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM 
   ```

1. CloudFormation fornisce le risorse specificate nel modello. Per completare il provisioning delle risorse, potrebbero essere necessari alcuni minuti. Usa il comando seguente per vedere lo stato del tuo CloudFormation stack.

   ```
   aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli
   ```

1. Quando lo stato dello CloudFormation stack è`StackStatus: "CREATE_COMPLETE"`, usa il seguente comando per recuperare i valori di output pertinenti per i passaggi futuri.

   ```
    aws cloudformation describe-stacks --stack-name data-transformation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
   ```

   Di seguito sono riportati i valori di output:
   + ApiRole, che è il nome del ruolo che consente ad API Gateway di inserire elementi nella tabella DynamoDB. Per questo tutorial, il nome del ruolo è `data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG`.
   + DDBTableNome, che è il nome della tabella DynamoDB. Per questo tutorial il nome della tabella è `data-transformation-tutorial-cli-ddb`.
   + ResourceId, che è l'ID della risorsa pets in cui sono esposti i `POST` metodi `GET` and. Per questo tutorial, l'ID risorsa è `efg456`.
   + ApiId, che è l'ID dell'API. Per questo tutorial, l'ID API è `abc123`.

**Test del metodo `GET` prima della trasformazione dei dati**
+ Utilizzare il seguente comando per eseguire il test del metodo `GET`. 

  ```
  aws apigateway test-invoke-method --rest-api-id abc123 \
            --resource-id efg456 \
            --http-method GET
  ```

  L'output del test riporterà le seguenti informazioni.

  ```
  [
    {
      "id": 1,
      "type": "dog",
      "price": 249.99
    },
    {
      "id": 2,
      "type": "cat",
      "price": 124.99
    },
    {
      "id": 3,
      "type": "fish",
      "price": 0.99
    }
  ]
  ```

  Questo output verrà trasformato in base al modello di mappatura in [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).

**Trasformazione della risposta di integrazione `GET`**
+ Utilizzare il comando seguente per aggiornare una risposta di integrazione per il metodo `GET`. Sostituisci *rest-api-id* e *resource-id* con i tuoi valori.

  Per creare una risposta di integrazione, utilizzare il comando seguente.

  ```
  aws apigateway put-integration-response --rest-api-id abc123 \
    --resource-id efg456 \
    --http-method GET \
    --status-code 200 \
    --selection-pattern "" \
    --response-templates '{"application/json": "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n  \"description\": \"Item $elem.id is a $elem.type\",\n  \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]"}'
  ```

**Test del metodo `GET`**
+ Utilizzare il seguente comando per eseguire il test del metodo `GET`.

  ```
  aws apigateway test-invoke-method --rest-api-id abc123 \
    --resource-id efg456 \
    --http-method GET \
  ```

  L'output del test mostrerà la risposta trasformata. 

  ```
  [
    {
      "description" : "Item 1 is a dog.",
      "askingPrice" : 249.99
    },
    {
      "description" : "Item 2 is a cat.",
      "askingPrice" : 124.99
    },
    {
      "description" : "Item 3 is a fish.",
      "askingPrice" : 0.99
    }
  ]
  ```

**Creazione di un metodo `POST`**

1. Utilizzare il seguente comando per creare un nuovo metodo nella risorsa `/pets`.

   ```
   aws apigateway put-method --rest-api-id abc123 \
     --resource-id efg456 \
     --http-method POST \
     --authorization-type "NONE" \
   ```

   Questo metodo ti consentirà di inviare informazioni sugli animali domestici alla tabella DynamoDB che hai creato nello stack. CloudFormation 

1.  Utilizzate il seguente comando per creare un' Servizio AWS integrazione sul metodo. `POST`

   ```
   aws apigateway put-integration --rest-api-id abc123 \
     --resource-id efg456 \
     --http-method POST \
     --type AWS \
     --integration-http-method POST \
     --uri "arn:aws:apigateway:us-east-2:dynamodb:action/PutItem" \
     --credentials arn:aws:iam::111122223333:role/data-transformation-tutorial-cli-APIGatewayRole-ABCDEFG \
     --request-templates '{"application/json":"{\"TableName\":\"data-transformation-tutorial-cli-ddb\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}"}'
   ```

1.  Utilizzare il comando seguente per creare una risposta del metodo per una corretta chiamata del metodo `POST`. 

   ```
   aws apigateway put-method-response --rest-api-id abc123 \
     --resource-id efg456 \
     --http-method POST \
     --status-code 200
   ```

1. Utilizzare il comando seguente per creare una risposta dell'integrazione per una corretta chiamata del metodo `POST`.

   ```
   aws apigateway put-integration-response --rest-api-id abc123 \
     --resource-id efg456 \
     --http-method POST \
     --status-code 200 \
     --selection-pattern "" \
     --response-templates '{"application/json": "{\"message\": \"Your response was recorded at $context.requestTime\"}"}'
   ```

**Test del metodo `POST`**
+ Utilizzare il seguente comando per eseguire il test del metodo `POST`.

  ```
  aws apigateway test-invoke-method --rest-api-id abc123 \
    --resource-id efg456 \
    --http-method POST \
    --body '{\"id\": \"4\", \"type\": \"dog\", \"price\": \"321\"}'
  ```

  L'output mostrerà il messaggio di operazione riuscita.

**Per eliminare una CloudFormation pila**
+ Usa il seguente comando per eliminare le tue CloudFormation risorse.

  ```
  aws cloudformation delete-stack  --stack-name data-transformation-tutorial-cli
  ```

## CloudFormation Modello di trasformazione dei dati completato
<a name="api-gateway-data-transformations-full-cfn-stack"></a>

L'esempio seguente è un CloudFormation modello completo, che crea un'API e una tabella DynamoDB con `/pets` una risorsa `GET` con metodi and. `POST` 
+ Il metodo `GET` recupererà i dati dall'endpoint HTTP `http://petstore-demo-endpoint.execute-api.com/petstore/pets`. I dati di output verranno trasformati in base al modello di mappatura in [Trasformazioni dei modelli di mappatura per REST APIs in API Gateway](models-mappings.md).
+ Il metodo `POST` consentirà all'utente di pubblicare (`POST`) le informazioni sugli animali domestici in una tabella DynamoDB utilizzando un modello di mappatura.

### Modello di esempio CloudFormation
<a name="mapping-template-cfn-example"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Description: A completed Amazon API Gateway REST API that uses non-proxy integration to POST to an Amazon DynamoDB table and non-proxy integration to GET transformed pets data.
Parameters:
  StageName:
    Type: String
    Default: v1
    Description: Name of API stage.
Resources:
  DynamoDBTable:
    Type: 'AWS::DynamoDB::Table'
    Properties:
      TableName: !Sub data-transformation-tutorial-complete
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: N
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 5
  APIGatewayRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - apigateway.amazonaws.com
      Policies:
        - PolicyName: APIGatewayDynamoDBPolicy
          PolicyDocument:
            Version: 2012-10-17		 	 	 
            Statement:
              - Effect: Allow
                Action:
                  - 'dynamodb:PutItem'
                Resource: !GetAtt DynamoDBTable.Arn
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: data-transformation-complete-api
      ApiKeySourceType: HEADER
  PetsResource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'pets'
  PetsMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: GET
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: HTTP
        Credentials: !GetAtt APIGatewayRole.Arn
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
        PassthroughBehavior: WHEN_NO_TEMPLATES
        IntegrationResponses:
          - StatusCode: '200'
            ResponseTemplates:
              application/json: "#set($inputRoot = $input.path(\"$\"))\n[\n#foreach($elem in $inputRoot)\n {\n  \"description\": \"Item $elem.id is a $elem.type\",\n  \"askingPrice\": \"$elem.price\"\n }#if($foreach.hasNext),#end\n\n#end\n]"
      MethodResponses:
        - StatusCode: '200'
  PetsMethodPost:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: POST
      ApiKeyRequired: false
      AuthorizationType: NONE
      Integration:
        Type: AWS
        Credentials: !GetAtt APIGatewayRole.Arn
        IntegrationHttpMethod: POST
        Uri: arn:aws:apigateway:us-west-1:dynamodb:action/PutItem
        PassthroughBehavior: NEVER
        RequestTemplates: 
          application/json: "{\"TableName\":\"data-transformation-tutorial-complete\",\"Item\":{\"id\":{\"N\":$input.json(\"$.id\")},\"type\":{\"S\":$input.json(\"$.type\")},\"price\":{\"N\":$input.json(\"$.price\")} }}"
        IntegrationResponses:
          - StatusCode: 200
            ResponseTemplates:
              application/json: "{\"message\": \"Your response was recorded at $context.requestTime\"}"
      MethodResponses:
        - StatusCode: '200'

  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - PetsMethodGet
    Properties:
      RestApiId: !Ref Api
      StageName: !Sub '${StageName}'
Outputs:
  ApiId:
    Description: API ID for CLI commands
    Value: !Ref Api
  ResourceId:
    Description: /pets resource ID for CLI commands
    Value: !Ref PetsResource
  ApiRole:
    Description: Role ID to allow API Gateway to put and scan items in DynamoDB table
    Value: !Ref APIGatewayRole
  DDBTableName:
    Description: DynamoDB table name
    Value: !Ref DynamoDBTable
```

# Esempi di utilizzo di variabili per trasformazioni dei modelli di mappatura per Gateway API
<a name="api-gateway-mapping-variable-examples"></a>

L’esempio seguente mostra come utilizzare le variabili `$context`, `input` e `util` nei modelli di mappatura. È possibile utilizzare un’integrazione fittizia o un’integrazione non proxy Lambda che restituisce l’evento di input a Gateway API. Per l’elenco di tutte le variabili supportate per le trasformazioni dei dati, consultare [Variabili per le trasformazioni dei dati per Gateway API](api-gateway-mapping-template-reference.md).

## Esempio 1: passare più variabili `$context` all’endpoint di integrazione
<a name="context-variables-template-example"></a>

L'esempio seguente mostra un modello di mappatura che mappa variabili `$context` in ingresso a variabili back-end con nomi leggermente diversi nel payload di una richiesta di integrazione:

```
{
    "stage" : "$context.stage",
    "request_id" : "$context.requestId",
    "api_id" : "$context.apiId",
    "resource_path" : "$context.resourcePath",
    "resource_id" : "$context.resourceId",
    "http_method" : "$context.httpMethod",
    "source_ip" : "$context.identity.sourceIp",
    "user-agent" : "$context.identity.userAgent",
    "account_id" : "$context.identity.accountId",
    "api_key" : "$context.identity.apiKey",
    "caller" : "$context.identity.caller",
    "user" : "$context.identity.user",
    "user_arn" : "$context.identity.userArn"
}
```

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{
  stage: 'prod',
  request_id: 'abcdefg-000-000-0000-abcdefg',
  api_id: 'abcd1234',
  resource_path: '/',
  resource_id: 'efg567',
  http_method: 'GET',
  source_ip: '192.0.2.1',
  user-agent: 'curl/7.84.0',
  account_id: '111122223333',
  api_key: 'MyTestKey',
  caller: 'ABCD-0000-12345',
  user: 'ABCD-0000-12345',
  user_arn: 'arn:aws:sts::111122223333:assumed-role/Admin/carlos-salazar'
}
```

Una delle variabili è una chiave API. L'esempio presuppone che il metodo richieda una chiave API.

## Esempio 2: passare tutti i parametri della richiesta all’endpoint di integrazione tramite un payload JSON
<a name="input-examples-mapping-templates"></a>

L’esempio seguente passa tutti i parametri della richiesta, inclusi `path`, `querystring` e `header`, all’endpoint di integrazione tramite un payload JSON:

```
#set($allParams = $input.params())
{
  "params" : {
    #foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
    "$type" : {
      #foreach($paramName in $params.keySet())
      "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
      #if($foreach.hasNext),#end
      #end
    }
    #if($foreach.hasNext),#end
    #end
  }
}
```

Se una richiesta ha i seguenti parametri di input:
+ Un parametro di percorso denominato `myparam`
+ Parametri della stringa di query `querystring1=value1,value2`
+ Intestazioni `"header1" : "value1"`.

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{"params":{"path":{"example2":"myparamm"},"querystring":{"querystring1":"value1,value2"},"header":{"header1":"value1"}}}
```

## Esempio 3: passare una sezione secondaria di una richiesta di metodo all’endpoint di integrazione
<a name="input-example-json-mapping-template"></a>

 L’esempio seguente utilizza il parametro di input `name` per recuperare solo il parametro `name` e il parametro di input `input.json('$')` per recuperare l’intero corpo della richiesta di metodo:

```
{
    "name" : "$input.params('name')",
    "body" : $input.json('$') 
}
```

Per una richiesta che include i parametri della stringa di query `name=Bella&type=dog` e il corpo seguente:

```
{
    "Price" : "249.99",
    "Age": "6"
}
```

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{
    "name" : "Bella",
    "body" : {"Price":"249.99","Age":"6"}
}
```

Questo modello di mappatura rimuove il parametro della stringa di query `type=dog`.

 Se l'input JSON contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta 400. Applica `$util.escapeJavaScript($input.json('$'))` per assicurare che l'input JSON possa essere analizzato correttamente. 

L'esempio precedente con `$util.escapeJavaScript($input.json('$'))` applicato risulta come segue:

```
{
    "name" : "$input.params('name')",
    "body" : "$util.escapeJavaScript($input.json('$'))"
}
```

In questo caso, l'output di questo modello di mappatura deve essere analogo al seguente:

```
{
    "name" : "Bella",
    "body": {"Price":"249.99","Age":"6"}
}
```

## Esempio 4: usa l' JSONPath espressione per passare una sottosezione di una richiesta di metodo all'endpoint di integrazione
<a name="input-example-inputs-mapping-template"></a>

L'esempio seguente utilizza le JSONPath espressioni per recuperare solo il parametro di input `name` e il testo `Age` dal corpo della richiesta:

```
{
    "name" : "$input.params('name')",
    "body" : $input.json('$.Age')  
}
```

Per una richiesta che include i parametri della stringa di query `name=Bella&type=dog` e il corpo seguente:

```
{
    "Price" : "249.99",
    "Age": "6"
}
```

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{
    "name" : "Bella",
    "body" : "6"
}
```

Questo modello di mappatura rimuove il parametro della stringa di query `type=dog` e il campo `Price` dal corpo.

 Se il payload di una richiesta di metodo contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta. `400` Applica `$util.escapeJavaScript()` per assicurare che l'input JSON possa essere analizzato correttamente.

L'esempio precedente con `$util.escapeJavaScript($input.json('$.Age'))` applicato risulta come segue:

```
{
    "name" : "$input.params('name')",
    "body" : "$util.escapeJavaScript($input.json('$.Age'))" 
}
```

In questo caso, l'output di questo modello di mappatura deve essere analogo al seguente:

```
{
    "name" : "Bella",
    "body": "\"6\""
}
```

## Esempio 5: utilizzare un' JSONPath espressione per passare informazioni su una richiesta di metodo all'endpoint di integrazione
<a name="input-example-request-and-response"></a>

L’esempio seguente utilizza `$input.params()`, `$input.path()` e `$input.json()` per inviare informazioni su una richiesta di metodo all’endpoint di integrazione. Questo modello di mappatura utilizza il metodo `size()` per fornire il numero di elementi di un elenco.

```
{
    "id" : "$input.params('id')",
    "count" : "$input.path('$.things').size()",
    "things" : $input.json('$.things')
}
```

Per una richiesta che include il parametro di percorso `123` e il corpo seguente:

```
{
      "things": {
            "1": {},
            "2": {},
            "3": {}
      }
}
```

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{"id":"123","count":"3","things":{"1":{},"2":{},"3":{}}}
```

 Se il payload di una richiesta di metodo contiene caratteri senza escape che non possono essere analizzati, API JavaScript Gateway potrebbe restituire una risposta. `400` Applica `$util.escapeJavaScript()` per assicurare che l'input JSON possa essere analizzato correttamente.

L'esempio precedente con `$util.escapeJavaScript($input.json('$.things'))` applicato risulta come segue:

```
{
     "id" : "$input.params('id')",
     "count" : "$input.path('$.things').size()",
     "things" : "$util.escapeJavaScript($input.json('$.things'))"
}
```

L'output di questo modello di mappatura deve essere analogo al seguente:

```
{"id":"123","count":"3","things":"{\"1\":{},\"2\":{},\"3\":{}}"}
```

# Variabili per le trasformazioni dei dati per Gateway API
<a name="api-gateway-mapping-template-reference"></a>

Quando si crea una mappatura dei parametri, è possibile utilizzare le variabili di contesto come origine dati. Per creare le trasformazioni di modelli di mappatura, è possibile utilizzare variabili di contesto, input e util negli script scritti in [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html). Per modelli di mappatura di esempio che utilizzano queste variabili di riferimento, consultare [Esempi di utilizzo di variabili per trasformazioni dei modelli di mappatura per Gateway API](api-gateway-mapping-variable-examples.md).

Per l’elenco delle variabili di riferimento per la registrazione degli accessi, consultare [Variabili per la registrazione dei log degli accessi per Gateway API](api-gateway-variables-for-access-logging.md).

## Variabili di contesto per le trasformazioni dei dati
<a name="context-variable-reference"></a>

È possibile utilizzare le seguenti variabili `$context` con distinzione tra maiuscole e minuscole per le trasformazioni dei dati.


| Parametro | Description | 
| --- | --- | 
| \$1context.accountId |  L'ID dell' AWS account del proprietario dell'API.  | 
| \$1context.apiId |  Identificatore assegnato da API Gateway all'API.  | 
| \$1context.authorizer.claims.property |  Proprietà delle richieste restituite dal pool di utenti di Amazon Cognito dopo che l'intermediario del metodo viene autenticato correttamente. Per ulteriori informazioni, consulta [Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore](apigateway-integrate-with-cognito.md).  La chiamata di `$context.authorizer.claims` restituisce null.   | 
| \$1context.authorizer.principalId |  Identificazione dell'utente dell'entità principale associata al token inviata dal client e restituita da un'autorizzazione Lambda in API Gateway (precedentemente noto come autorizzazione ad hoc). Per ulteriori informazioni, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.authorizer.property |  Valore in formato stringa della coppia chiave/valore specificata della mappa `context` restituita da una funzione delle autorizzazioni Lambda di API Gateway. Ad esempio, se le autorizzazioni restituiscono la mappa `context` seguente:  <pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre> La chiamata di `$context.authorizer.key` restituisce la stringa `"value"`, la chiamata di `$context.authorizer.numKey` restituisce la stringa `"1"` e la chiamata di `$context.authorizer.boolKey` restituisce la stringa `"true"`. Infatti*property*, l'unico carattere speciale supportato è il carattere di sottolineatura`(_)`. Per ulteriori informazioni, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.awsEndpointRequestId |  L'ID della richiesta dell' AWS endpoint.  | 
| \$1context.deploymentId | ID dell'implementazione API. | 
| \$1context.domainName |  Nome di dominio completo usato per richiamare l'API. Deve essere lo stesso dell'intestazione `Host` in ingresso.  | 
| \$1context.domainPrefix |  Prima etichetta di `$context.domainName`.  | 
| \$1context.error.message |  Stringa contenente un messaggio di errore di API Gateway. Questa variabile può essere utilizzata solo per la semplice sostituzione di variabili in un modello di [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)body mapping, che non viene elaborato dal motore Velocity Template Language, e nella registrazione degli accessi. Per ulteriori informazioni, consultare [Monitora l'esecuzione delle WebSocket API con CloudWatch metriche](apigateway-websocket-api-logging.md) e [Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.messageString | Valore \$1context.error.message tra virgolette, ovvero "\$1context.error.message". | 
| \$1context.error.responseType |  [Un tipo di. [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseType) Questa variabile può essere utilizzata solo per la semplice sostituzione di variabili in un modello di [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)body mapping, che non viene elaborato dal motore Velocity Template Language, e nella registrazione degli accessi. Per ulteriori informazioni, consultare [Monitora l'esecuzione delle WebSocket API con CloudWatch metriche](apigateway-websocket-api-logging.md) e [Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.validationErrorString |  Stringa contenente un messaggio dettagliato di errore di convalida.  | 
| \$1context.extendedRequestId | ID esteso generato da API Gateway e assegnato alla richiesta API. L’ID della richiesta esteso contiene ulteriori informazioni utili per il debug e la risoluzione dei problemi. | 
| \$1context.httpMethod |  Metodo HTTP usato. I valori validi sono: `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST` e `PUT`.  | 
| \$1context.identity.accountId |  L'ID dell'account associato alla richiesta. AWS   | 
| \$1context.identity.apiKey |  Per i metodi API che richiedono una chiave API, questa variabile è la chiave API associata alla richiesta del metodo. Per i metodi che non richiedono una chiave API, questa variabile è null. Per ulteriori informazioni, consulta [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md).  | 
| \$1context.identity.apiKeyId | ID chiave API associato a una richiesta API che richiede una chiave API. | 
| \$1context.identity.caller |  Identificatore dell'entità principale dell'intermediario che ha firmato la richiesta. Supportato per risorse che utilizzano l'autorizzazione IAM.  | 
| \$1context.identity.cognitoAuthenticationProvider |  Un elenco separato da virgole con tutti i provider di autenticazione Amazon Cognito utilizzati dal chiamante che effettua la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  Ad esempio, per un'identità di un pool di utenti Amazon Cognito, `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` Per informazioni sui provider di autenticazione Amazon Cognito disponibili, consulta [Using Federated Identities](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) nella *Guida per gli sviluppatori di Amazon Cognito*. | 
| \$1context.identity.cognitoAuthenticationType |  Tipo di autenticazione Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito. I valori possibili includono `authenticated` per le identità autenticate e `unauthenticated` per le identità non autenticate. | 
| \$1context.identity.cognitoIdentityId |  ID identità di Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  | 
| \$1context.identity.cognitoIdentityPoolId |  ID pool di identità di Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  | 
| \$1context.identity.principalOrgId |  L'[ID organizzazione AWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html).  | 
| \$1context.identity.sourceIp |  L'indirizzo IP di origine della connessione TCP immediata da cui proviene la richiesta all'endpoint di Gateway API.  | 
| \$1context.identity.clientCert.clientCertPem |  Certificato client codificato PEM che il client ha presentato durante l'autenticazione TLS reciproca. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.subjectDN |  Nome distinto dell'oggetto del certificato presentato da un client. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.issuerDN |  Nome distinto dell'approvatore del certificato presentato da un cliente. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.serialNumber |  Il numero di serie del certificato. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.validity.notBefore |  La data prima della quale il certificato non è valido. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.validity.notAfter |  La data dopo la quale il certificato non è valido. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
|  \$1context.identity.vpcId | L'ID VPC del VPC da cui proviene la richiesta all'endpoint Gateway API. | 
|  \$1context.identity.vpceId |  L'ID endpoint VPC dell'endpoint VPC da cui proviene la richiesta all'endpoint Gateway API. Presente solo quando si dispone di un'API privata.  | 
| \$1context.identity.user |  Identificatore dell'entità principale dell'utente che sarà autorizzato per l'accesso alle risorse. Supportato per risorse che utilizzano l'autorizzazione IAM.  | 
| \$1context.identity.userAgent |  Intestazione [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) del chiamante API.  | 
| \$1context.identity.userArn |  Amazon Resource Name (ARN) dell'utente valido identificato dopo l'autenticazione. Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html).  | 
| \$1context.isCanaryRequest |  Restituisce `true` se la richiesta era indirizzata al canary e `false` se la richiesta non era indirizzata al canary. Presente solo quando è abilitato un canary. | 
| \$1context.path | Percorso della richiesta. Ad esempio, per un URL di richiesta non proxy https://\$1rest-api-id\$1.execute-api.\$1region\$1.amazonaws.com/\$1stage\$1/root/child, il valore di \$1context.path è /\$1stage\$1/root/child.  | 
| \$1context.protocol | Protocollo della richiesta, ad esempi, HTTP/1.1.  API Gateway APIs può accettare richieste HTTP/2, ma API Gateway invia richieste alle integrazioni di backend utilizzando HTTP/1.1. Di conseguenza, il protocollo di richiesta viene registrato come HTTP/1.1 anche se un client invia una richiesta che utilizza HTTP/2.   | 
| \$1context.requestId |  L'ID della richiesta. I client possono sovrascrivere questo ID di richiesta. Utilizza `$context.extendedRequestId` per un ID di richiesta univoco generato da API Gateway.  | 
| \$1context.requestOverride.header.header\$1name |  Sovrascrittura intestazione della richiesta. Se definito, questo parametro contiene le intestazioni da utilizzare al posto delle **intestazioni HTTP** che sono definite nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.path.path\$1name |  Sovrascrittura percorso della richiesta. Se definito, questo parametro contiene il percorso della richiesta da utilizzare al posto dei **parametri di percorso URL** che sono definiti nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.querystring.querystring\$1name |  Sovrascrittura stringa di query della richiesta. Se definito, questo parametro contiene la stringa di query della richiesta da utilizzare al posto dei **URL Query String Parameters (Parametri stringa di query URL)** che sono definiti nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.responseOverride.header.header\$1name | Sovrascrittura intestazione della risposta. Se definito, questo parametro contiene l'intestazione da restituire al posto della Response header (Intestazione di risposta) che è definita come la Default mapping (mappatura predefinita) nel riquadro Integration Response (Risposta integrazione). Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.responseOverride.status | Sovrascrittura codice di stato della risposta. Se definito, questo parametro contiene il codice di stato da restituire al posto di Method response status (Stato risposta metodo) che è definito come la Default mapping (Mappatura predefinita) nel riquadro Integration Response (Risposta integrazione). Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.requestTime | Ora della richiesta in formato [CLF](https://httpd.apache.org/docs/current/logs.html#common) (dd/MMM/yyyy:HH:mm:ss \$1-hhmm). | 
| \$1context.requestTimeEpoch | L'ora della richiesta in formato [epoca (Unix epoch)](https://en.wikipedia.org/wiki/Unix_time) in millisecondi. | 
| \$1context.resourceId |  Identificatore assegnato da API Gateway alla risorsa.  | 
| \$1context.resourcePath |  Percorso della risorsa. Ad esempio, per l'URI della richiesta non proxy di `https://{rest-api-id}.execute-api.{region}.amazonaws.com/{stage}/root/child`, il valore di `$context.resourcePath` è `/root/child`. Per ulteriori informazioni, consulta [Tutorial: creazione di una REST API con un'integrazione non proxy HTTP](api-gateway-create-api-step-by-step.md).   | 
| \$1context.stage |  La fase di distribuzione della richiesta API (ad esempio `Beta` o `Prod`).  | 
| \$1context.wafResponseCode |  La risposta ricevuta da [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html): `WAF_ALLOW` o `WAF_BLOCK`. Non verrà impostata se la fase non è associata a un ACL Web. Per ulteriori informazioni, consulta [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md).  | 
| \$1context.webaclArn |  ARN completo della lista di controllo accessi Web usata per stabilire se consentire o bloccare la richiesta. Non verrà impostata se la fase non è associata a un ACL Web. Per ulteriori informazioni, consulta [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md).  | 

## Variabili input
<a name="input-variable-reference"></a>

È possibile utilizzare le seguenti variabili `$input` con distinzione tra maiuscole e minuscole per fare riferimento ai parametri e al payload della richiesta di metodo. Sono disponibili le funzioni seguenti:


| Variabile e funzione | Descrizione | 
| --- | --- | 
| \$1input.body |  Restituisce il payload della richiesta non elaborata come stringa. È possibile utilizzare `$input.body` per conservare interi numeri in virgola mobile, ad esempio `10.00`. | 
| \$1input.json(x) | Questa funzione valuta un' JSONPath espressione e restituisce i risultati come stringa JSON. Ad esempio, `$input.json('$.pets')` restituisce una stringa JSON che rappresenta la struttura `pets`. Per ulteriori informazioni su JSONPath, vedere [JSONPath](https://goessner.net/articles/JsonPath/)or [JSONPath for](https://github.com/json-path/JsonPath) Java. | 
| \$1input.params() |  Restituisce una mappa di tutti i parametri della richiesta. Si consiglia di utilizzare `$util.escapeJavaScript` per sanificare il risultato ed evitare un potenziale attacco di iniezione. Per il pieno controllo della sanificazione delle richieste, utilizzare un'integrazione proxy senza un modello e gestire la sanificazione delle richieste nell'integrazione. | 
| \$1input.params(x) | Restituisce il valore di un parametro della richiesta del metodo dal percorso, dalla stringa di query o dal valore dell'intestazione (cercati in questo ordine) a partire da una stringa del nome del parametro `x`. Si consiglia di utilizzare `$util.escapeJavaScript` per sanificare il parametro ed evitare un potenziale attacco di iniezione. Per il controllo completo della sanificazione dei parametri, utilizzare un'integrazione proxy senza un modello e gestire la sanificazione delle richieste nell'integrazione. | 
| \$1input.path(x) | Accetta una stringa di JSONPath espressione (`x`) e restituisce una rappresentazione in oggetto JSON del risultato. In questo modo, puoi accedere agli elementi del payload e modificarli in modo nativo in [Apache Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html). Ad esempio, se l'espressione `$input.path('$.pets')` restituisce un oggetto in questo modo: <pre>[<br />  { <br />    "id": 1, <br />    "type": "dog", <br />    "price": 249.99 <br />  }, <br />  { <br />    "id": 2, <br />    "type": "cat", <br />    "price": 124.99 <br />  }, <br />  { <br />    "id": 3, <br />    "type": "fish", <br />    "price": 0.99 <br />  } <br />]</pre> `$input.path('$.pets').size()` restituisce `"3"`. Per ulteriori informazioni su JSONPath, vedere [JSONPath](https://goessner.net/articles/JsonPath/)or [JSONPath for Java](https://github.com/json-path/JsonPath). | 

## Variabili di fase
<a name="stagevariables-template-reference"></a>

È possibile utilizzare le seguenti variabili di fase come segnaposto per ARNs e URLs nelle integrazioni di metodi. Per ulteriori informazioni, consulta [Utilizzo delle variabili di fase per una REST API in Gateway API](stage-variables.md).


| Sintassi | Description | 
| --- | --- | 
| \$1stageVariables.variable\$1name, \$1stageVariables['variable\$1name'] o \$1\$1stageVariables['variable\$1name']\$1  |  *variable\$1name*rappresenta il nome di una variabile di fase.  | 

## Variabili util
<a name="util-template-reference"></a>

È possibile utilizzare le seguenti variabili `$util` con distinzione tra maiuscole e minuscole per usare le funzioni di utilità per i modelli di mappatura. Se non diversamente specificato, il set di caratteri predefinito è UTF-8.


| Funzione | Description | 
| --- | --- | 
| \$1util.escapeJavaScript() |  Sfugge ai caratteri di una stringa utilizzando le regole delle JavaScript stringhe.  Questa funzione trasforma qualsiasi virgoletta singola (`'`) in virgoletta preceduta da un carattere escape (`\'`). Tuttavia, le virgolette singole con escape non sono valide in JSON. Di conseguenza, quando l'output di questa funzione viene usato in una proprietà JSON, devi modificare di nuovo qualsiasi virgoletta singola con carattere escape (`\'`) in virgoletta singola normale (`'`). Questo viene mostrato nell'esempio seguente:  <pre> "input" : "$util.escapeJavaScript(data).replaceAll("\\'","'")"</pre>   | 
| \$1util.parseJson() |   Da una stringa JSON restituisce una rappresentazione oggetto del risultato. Puoi usare il risultato di questa funzione per accedere agli elementi del payload e modificarli in modo nativo in Apache Velocity Template Language (VTL). Ad esempio, in presenza del payload seguente:  <pre>{"errorMessage":"{\"key1\":\"var1\",\"key2\":{\"arr\":[1,2,3]}}"}</pre>  E se usi il modello di mappatura seguente:  <pre>#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))<br />{<br />   "errorMessageObjKey2ArrVal" : $errorMessageObj.key2.arr[0]<br />}<br /></pre> Otterrai l'output seguente: <pre>{<br />   "errorMessageObjKey2ArrVal" : 1<br />}<br /></pre>  | 
| \$1util.urlEncode() | Converte una stringa nel formato «application/x-www-form-urlencoded». | 
| \$1util.urlDecode() | Decodifica una stringa «application/». x-www-form-urlencoded | 
| \$1util.base64Encode() | Codifica i dati in una stringa con codifica base64. | 
| \$1util.base64Decode() | Decodifica i dati da una stringa con codifica base64. | 

# Risposte gateway per REST APIs in API Gateway
<a name="api-gateway-gatewayResponse-definition"></a>

 Una risposta del gateway è identificata da un tipo di risposta definito da API Gateway. La risposta consiste in un codice di stato HTTP, un insieme di intestazioni aggiuntive specificate dalle mappature dei parametri e un payload generato da un modello di mappatura non [VTL](https://velocity.apache.org/engine/devel/vtl-reference.html). 

 Nell'API REST di API Gateway, una risposta del gateway è rappresentata da [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html). In OpenAPI, un'`GatewayResponse`istanza è descritta dall'estensione [x-amazon-apigateway-gateway-Response.gatewayResponse](api-gateway-swagger-extensions-gateway-responses.gatewayResponse.md). 

Per abilitare una risposta del gateway, dei impostare una risposta del gateway per un [tipo di risposta supportato](supported-gateway-response-types.md) a livello di API. Ogni volta che API Gateway restituisce una risposta di questo tipo, vengono applicate le mappature delle intestazioni e i modelli di mappatura del payload definiti nel gateway per restituire i risultati mappati all'intermediario dell'API. 

 Nella sezione seguente viene illustrato come impostare le risposte del gateway tramite la console API Gateway e l'API REST API Gateway. 

## Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori
<a name="customize-gateway-responses"></a>

Se API Gateway non riesce a elaborare una richiesta in entrata, restituisce al client una risposta di errore senza inoltrare la richiesta al back-end di integrazione. Per impostazione predefinita, la risposta di errore contiene un breve messaggio di errore descrittivo. Ad esempio, se tenti di chiamare un'operazione da una risorsa API non definita, riceverai una risposta di errore con il messaggio `{ "message": "Missing Authentication Token" }`. Se sei nuovo su API Gateway, potrebbe essere difficile capire che cosa esattamente non sia andato a buon fine. 

 Per alcune delle risposte di errore, API Gateway consente agli sviluppatori API di personalizzare le risposte in formati differenti. Per l'esempio `Missing Authentication Token`, puoi aggiungere un suggerimento al payload originale della risposta con la possibile causa, come in questo esempio: `{"message":"Missing Authentication Token", "hint":"The HTTP method or resources may not be supported."}`. 

 Quando l'API fa da intermediario tra uno scambio esterno e il AWS Cloud, utilizzi modelli di mappatura VTL per la richiesta di integrazione o la risposta di integrazione per mappare il payload da un formato all'altro. Tuttavia, i modelli di mappatura VTL funzionano solo per le richieste valide con risposte andate a buon fine. 

Per le richieste non valide, API Gateway ignora completamente l'integrazione e restituisce una risposta di errore. Devi utilizzare la personalizzazione per rendere le risposte di errore in un formato conforme allo scambio. Qui, la personalizzazione viene realizzata in un modello di mappatura non-VTL che supporta solo le sostituzioni semplici delle variabili. 

 Per generalizzare la risposta di errore generata da API Gateway e qualsiasi risposta generata da API Gateway, usiamo il termine *risposte del gateway*. In questo modo facciamo distinzione tra le risposte generate da API Gateway e le risposte di integrazione. Un modello di mappatura di una risposta del gateway può accedere ai valori della variabile `$context` e ai valori della proprietà `$stageVariables`, nonché ai parametri della richiesta di metodo, sotto forma di `method.request.param-position.param-name`. 

Per ulteriori informazioni sulle variabili `$context`, consulta [Variabili di contesto per le trasformazioni dei dati](api-gateway-mapping-template-reference.md#context-variable-reference). Per ulteriori informazioni su `$stageVariables`, consulta [Variabili di fase](api-gateway-mapping-template-reference.md#stagevariables-template-reference). Per ulteriori informazioni sui parametri di richiesta del metodo, consulta [Variabili input](api-gateway-mapping-template-reference.md#input-variable-reference).

**Topics**
+ [Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori](#customize-gateway-responses)
+ [Impostare una risposta del gateway per un'API REST utilizzando la console API Gateway](set-up-gateway-response-using-the-console.md)
+ [Configurazione di una risposta del gateway mediante l'API REST API Gateway](set-up-gateway-response-using-the-api.md)
+ [Configurazione della personalizzazione di una risposta del gateway in OpenAPI](set-up-gateway-responses-in-swagger.md)
+ [Tipi di risposta del gateway in Gateway API](supported-gateway-response-types.md)

# Impostare una risposta del gateway per un'API REST utilizzando la console API Gateway
<a name="set-up-gateway-response-using-the-console"></a>

Il seguente esempio mostra come impostare una risposta del gateway per una REST API utilizzando la console Gateway API. 

**Per configurare una risposta del gateway mediante la console API Gateway**

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale di Gateway API, scegli **Risposte di Gateway**.

1. Scegli un tipo di risposta, quindi scegli **Modifica**. In questa procedura guidata, utilizziamo **Token di autenticazione mancante** come esempio. 

1. Ora puoi cambiare il valore dell'opzione **Codice di stato** generato da Gateway API per restituire un codice di stato diverso che soddisfi i requisiti dell'API. In questo esempio, la personalizzazione cambia il codice di stato da quello predefinito (`403`) al codice `404`, poiché questo messaggio di errore viene ricevuto quando un client chiama una risorsa non valida o non supportata che può essere considerata come non trovata.

1. Per tornare alle intestazioni personalizzate, seleziona **Aggiungi intestazione della risposta** in **Intestazioni di risposta**. A scopo illustrativo, aggiungiamo le seguenti intestazioni personalizzate: 

   ```
   Access-Control-Allow-Origin:'a.b.c'
   x-request-id:method.request.header.x-amzn-RequestId
   x-request-path:method.request.path.petId
   x-request-query:method.request.querystring.q
   ```

   Nelle precedenti mappature delle intestazioni, viene mappato un nome di dominio statico (`'a.b.c'`) all'intestazione `Allow-Control-Allow-Origin` per consentire a CORS di accedere all'API; l'intestazione della richiesta di input di `x-amzn-RequestId` viene mappata a `request-id` nella risposta; la variabile di percorso `petId` della richiesta in entrata viene mappata all'intestazione `request-path` nella risposta, mentre il parametro di query `q` della richiesta originale viene mappato all'intestazione `request-query` della risposta.

1. In **Modelli di risposta**, non modificare `application/json` in **Tipo di contenuto** e immetti il seguente modello di mappatura del corpo nell'editor **Corpo modello**:

   ```
   {
        "message":"$context.error.messageString",
        "type": "$context.error.responseType",
        "statusCode": "'404'",
        "stage": "$context.stage",
        "resourcePath": "$context.resourcePath",
        "stageVariables.a": "$stageVariables.a"
   }
   ```

   Questo modello mostra come mappare le proprietà `$context` e `$stageVariables` alle proprietà del corpo di risposta del gateway.

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

1. Distribuzione dell'API in una fase nuova o esistente.

Esegui un test della risposta del gateway chiamando il seguente comando CURL, supponendo che l'URL di richiamo del metodo API corrispondente sia `https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/{petId}`:

```
curl -v -H 'x-amzn-RequestId:123344566' https://o81lxisefl.execute-api.us-east-1.amazonaws.com/custErr/pets/5/type?q=1
```

Considerato che il parametro aggiuntivo della stringa di query `q=1` non è compatibile con l'API, viene restituito un errore dalla risposta del gateway specificata. Dovresti visualizzare una risposta del gateway simile alla seguente:

```
> GET /custErr/pets/5?q=1 HTTP/1.1
Host: o81lxisefl.execute-api.us-east-1.amazonaws.com
User-Agent: curl/7.51.0
Accept: */*
 
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Length: 334
Connection: keep-alive
Date: Tue, 02 May 2017 03:15:47 GMT
x-amzn-RequestId: 123344566
Access-Control-Allow-Origin: a.b.c
x-amzn-ErrorType: MissingAuthenticationTokenException
header-1: static
x-request-query: 1
x-request-path: 5
X-Cache: Error from cloudfront
Via: 1.1 441811a054e8d055b893175754efd0c3.cloudfront.net (CloudFront)
X-Amz-Cf-Id: nNDR-fX4csbRoAgtQJ16u0rTDz9FZWT-Mk93KgoxnfzDlTUh3flmzA==
 
{
     "message":"Missing Authentication Token",
     "type": MISSING_AUTHENTICATION_TOKEN,
     "statusCode": '404',
     "stage": custErr,
     "resourcePath": /pets/{petId},
     "stageVariables.a": a
}
```

Il precedente esempio presuppone che il back-end dell'API sia [Pet Store](http://petstore-demo-endpoint.execute-api.com/petstore/pets) e l'API abbia una variabile di fase, `a`, definita.

# Configurazione di una risposta del gateway mediante l'API REST API Gateway
<a name="set-up-gateway-response-using-the-api"></a>

 Prima di personalizzare una risposta del gateway tramite l'API REST API Gateway, devi aver già creato un'API e aver ottenuto il relativo identificatore. Per recuperare l'identificatore dell'API puoi seguire la relazione di collegamento [restapi:gateway-responses](https://docs.aws.amazon.com/apigateway/latest/api/API_GetGatewayResponses.html) ed esaminare il risultato. 

**Per configurare una risposta del gateway mediante l'API REST API Gateway**

1. Per sovrascrivere un'intera [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)istanza, chiama il [gatewayresponse:put](https://docs.aws.amazon.com/apigateway/latest/api/API_PutGatewayResponse.html) action. Specificare un valore desiderato per [responseType](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseType) nel parametro di percorso URL e fornire nel payload della richiesta le mappature [statusCode](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#statusCode), [responseParameters](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseParameters) e [responseTemplates](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseTemplates).

1. Per aggiornare parte di un'istanza `GatewayResponse`, chiamare l'operazione [gatewayresponse:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateGatewayResponse.html). Specificare un valore desiderato per `responseType` nel parametro di percorso URL e fornire nel payload della richiesta le singole proprietà `GatewayResponse` desiderate, ad esempio la mappatura `responseParameters` o `responseTemplates`.

# Configurazione della personalizzazione di una risposta del gateway in OpenAPI
<a name="set-up-gateway-responses-in-swagger"></a>

 Puoi usare l'estensione `x-amazon-apigateway-gateway-responses` a livello di radice dell'API per personalizzare le risposte del gateway in OpenAPI. La seguente definizione di OpenAPI mostra un esempio per personalizzare il [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)tipo. `MISSING_AUTHENTICATION_TOKEN` 

```
  "x-amazon-apigateway-gateway-responses": {
    "MISSING_AUTHENTICATION_TOKEN": {
      "statusCode": 404,
      "responseParameters": {
        "gatewayresponse.header.x-request-path": "method.input.params.petId",
        "gatewayresponse.header.x-request-query": "method.input.params.q",
        "gatewayresponse.header.Access-Control-Allow-Origin": "'a.b.c'",
        "gatewayresponse.header.x-request-header": "method.input.params.Accept"
      },
      "responseTemplates": {
        "application/json": "{\n     \"message\": $context.error.messageString,\n     \"type\":  \"$context.error.responseType\",\n     \"stage\":  \"$context.stage\",\n     \"resourcePath\":  \"$context.resourcePath\",\n     \"stageVariables.a\":  \"$stageVariables.a\",\n     \"statusCode\": \"'404'\"\n}"
      }
    }
```

In questo esempio, la personalizzazione cambia il codice di stato dal predefinito (`403`) a `404`. Aggiunge anche alla risposta del gateway quattro parametri di intestazione e un modello di mappatura del corpo per il tipo di supporto `application/json`.

# Tipi di risposta del gateway in Gateway API
<a name="supported-gateway-response-types"></a>

 API Gateway espone le seguenti risposte del gateway alla personalizzazione da parte degli sviluppatori di API. 


| Tipo di risposta del gateway | Codice di stato predefinito | Descrizione | 
| --- | --- | --- | 
| ACCESS\$1DENIED | 403 | Risposta del gateway per un'autorizzazione non riuscita, ad esempio quando l'accesso viene negato da un'autorizzazione ad hoc o di Amazon Cognito. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| API\$1CONFIGURATION\$1ERROR | 500 | La risposta del gateway per configurazioni API non valide, incluso l'invio dell'indirizzo dell'endpoint errato, la codifica base64 non riuscita sui dati binari quando il supporto binario è abilitato o la mappatura della risposta di integrazione non corrispondente a nessun modello e nessuna configurazione di un modello predefinito. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_5XX`. | 
| AUTHORIZER\$1CONFIGURATION\$1ERROR | 500 | Risposta del gateway per la mancata connessione ad autorizzazioni ad hoc o di Amazon Cognito. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_5XX`. | 
| AUTHORIZER\$1FAILURE | 500 | Risposta del gateway quando autorizzazioni ad hoc o di Amazon Cognito non riescono ad autenticare l'intermediario. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_5XX`. | 
| BAD\$1REQUEST\$1PARAMETERS | 400 | Riposta del gateway quando il parametro di richiesta non può essere convalidato in base a un validatore abilitato delle richieste. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| BAD\$1REQUEST\$1BODY | 400 | Riposta del gateway quando il corpo della richiesta non può essere convalidato in base a un validatore abilitato delle richieste. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| DEFAULT\$14XX |  Null | La risposta predefinita del gateway per un tipo di risposta non specificato con codice di stato `4XX`. Cambiando il codice di stato di questa risposta di fallback del gateway significa cambiare i codici di stato di tutte le altre risposte `4XX` al nuovo valore. Reimpostando il codice di stato su null, i codici di stato di tutte le altre risposte `4XX` ritornano ai loro valori originali.  [AWS WAF le risposte personalizzate](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) hanno la precedenza sulle risposte gateway personalizzate.   | 
| DEFAULT\$15XX | Null | La risposta predefinita del gateway per un tipo di risposta non specificato con codice di stato `5XX`. Cambiando il codice di stato di questa risposta di fallback del gateway significa cambiare i codici di stato di tutte le altre risposte `5XX` al nuovo valore. Reimpostando il codice di stato su null, i codici di stato di tutte le altre risposte `5XX` ritornano ai loro valori originali. | 
| EXPIRED\$1TOKEN | 403 | La risposta del gateway per un errore del token AWS di autenticazione è scaduta. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| INTEGRATION\$1FAILURE | 504 | Risposta del gateway per un errore di integrazione non riuscita. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_5XX`. | 
| INTEGRATION\$1TIMEOUT | 504 | Risposta del gateway per un errore di integrazione scaduta. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_5XX`. | 
| INVALID\$1API\$1KEY | 403 | Risposta del gateway per una chiave API non valida inviata per un metodo che la richiedeva. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`.  | 
| INVALID\$1SIGNATURE | 403 | La risposta del gateway per un errore di AWS firma non valido. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| MISSING\$1AUTHENTICATION\$1TOKEN | 403 | Risposta del gateway per un errore di token autenticazione mancante, inclusi i casi in cui il cliente tenta di chiamare un metodo o una risorsa API non supportati. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| QUOTA\$1EXCEEDED | 429 | Risposta del gateway per un errore di superamento della quota di utilizzo del piano. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| REQUEST\$1TOO\$1LARGE | 413 | Risposta del gateway per un errore di dimensioni eccessive della richiesta. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito su `HTTP content length exceeded 10485760 bytes`. | 
| RESOURCE\$1NOT\$1FOUND | 404 | Risposta del gateway quando API Gateway non riesce a trovare l risorsa specificata dopo che una richiesta API passa autenticazione e autorizzazione, ad eccezione dell'autenticazione e dell'autorizzazione della chiave API. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| THROTTLED | 429 | Risposta del gateway quando vengono superati i limiti di throttling a livello di account, fase, metodo o piano. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| UNAUTHORIZED | 401 | Risposta del gateway quando l'autorizzazione ad hoc o di Amazon Cognito non riesce ad autenticare l'intermediario. | 
| UNSUPPORTED\$1MEDIA\$1TYPE | 415 | Risposta del gateway quando il payload presenta un tipo di supporto non supportato, se è stato abilitato un comportamento passthrough severo. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`. | 
| WAF\$1FILTERED | 403 | La risposta del gateway quando una richiesta è bloccato da AWS WAF. Se il tipo di risposta non è specificato, la risposta viene impostata in modo predefinito sul tipo `DEFAULT_4XX`.  [AWS WAF le risposte personalizzate](https://docs.aws.amazon.com/waf/latest/developerguide/waf-custom-request-response.html) hanno la precedenza sulle risposte gateway personalizzate.   | 

# CORS per REST APIs in API Gateway
<a name="how-to-cors"></a>

[CORS (Cross-origin resource sharing)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) è una caratteristica di sicurezza del browser che limita le richieste HTTP multiorigine avviate da script in esecuzione nel browser. Per ulteriori informazioni, consulta [Che cos'è CORS?](https://aws.amazon.com/what-is/cross-origin-resource-sharing/)

## Determinazione della necessità di abilitare il supporto di CORS
<a name="apigateway-cors-request-types"></a>

Una richiesta HTTP *multiorigine* è una richiesta effettuata a:
+ Un *dominio* diverso (ad esempio da `example.com` a `amazondomains.com`)
+ Un *sottodominio* diverso (ad esempio da `example.com` a `petstore.example.com`)
+ Una *porta* diversa (ad esempio da `example.com` a `example.com:10777`)
+ Un *protocollo* diverso (ad esempio da `https://example.com` a `http://example.com`)

 Se non riesci ad accedere all'API e ricevi un messaggio di errore che contiene `Cross-Origin Request Blocked`, potresti dover abilitare CORS.

Le richieste HTTP multiorigine possono essere di due tipi: richieste *semplici* e richieste *non semplici*.

## Abilitazione di CORS per una richiesta semplice
<a name="apigateway-cors-simple-request"></a>

Una richiesta HTTP è *semplice* se si verificano tutte le condizioni seguenti:
+ Viene inviata a una risorsa API che permette solo richieste `GET`, `HEAD` e `POST`.
+ Se si tratta di una richiesta di metodo `POST`, deve includere un'intestazione `Origin`.
+ Il tipo di contenuto del payload della richiesta è `text/plain`, `multipart/form-data` o `application/x-www-form-urlencoded`.
+ La richiesta non contiene intestazioni personalizzate.
+ Eventuali requisiti aggiuntivi elencati nella [documentazione di Mozilla CORS per le richieste semplici](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests).

Per richieste di metodo `POST` multiorigine semplici, la risposta della risorsa deve includere l'intestazione `Access-Control-Allow-Origin: '*'` o `Access-Control-Allow-Origin:'origin'`.

Tutte le altre richieste HTTP multiorigine sono richieste *non semplici*.

## Abilitazione di CORS per una richiesta non semplice
<a name="apigateway-enable-cors-non-simple"></a>

Se le risorse dell'API ricevono richieste non semplici, è necessario abilitare il supporto CORS aggiuntivo a seconda del tipo di integrazione.

### Abilitazione di CORS per integrazioni non proxy
<a name="apigateway-enable-cors-mock"></a>

Per questo tipo di integrazioni, il [protocollo CORS](https://fetch.spec.whatwg.org/#http-cors-protocol) richiede al browser di inviare una richiesta preliminare al server e di attendere l'approvazione (o una richiesta di credenziali) del server prima di inviare la richiesta effettiva. È necessario configurare l'API per inviare una risposta appropriata alla richiesta di verifica preliminare. 

 Creazione di una risposta di verifica preliminare 

1. Creare un metodo `OPTIONS` per l'integrazione fittizia.

1. Aggiungere le seguenti intestazioni di risposta alla risposta del metodo 200:
   + `Access-Control-Allow-Headers`
   + `Access-Control-Allow-Methods`
   + `Access-Control-Allow-Origin`

1. Impostare il comportamento passthrough di integrazione su `NEVER`. In questo caso, la richiesta di metodo di un tipo di contenuto non mappato sarà rifiutata con la risposta Tipo di supporto non compatibile HTTP 415. Per ulteriori informazioni, consulta [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md).

1. Immettere i valori per le intestazioni delle risposte. Per consentire tutte le origini, tutti i metodi e le intestazioni comuni, usare i seguenti valori di intestazione:
   + `Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'`
   + `Access-Control-Allow-Methods: 'DELETE,GET,HEAD,OPTIONS,PUT,POST,PATCH'`
   + `Access-Control-Allow-Origin: '*'`

Dopo aver creato la richiesta di verifica preliminare, è necessario restituire l'intestazione `Access-Control-Allow-Origin: '*'` o `Access-Control-Allow-Origin:'origin'` per tutti i metodi abilitati per CORS per almeno tutte le 200 risposte.

### Abilitazione di CORS per integrazioni non proxy utilizzando il Console di gestione AWS
<a name="apigateway-enable-cors-mock-console"></a>

È possibile utilizzare il per abilitare CORS Console di gestione AWS . Gateway Amazon API crea un metodo `OPTIONS` e aggiunge l'intestazione `Access-Control-Allow-Origin` alle risposte di integrazione del metodo esistente. Questo non sempre funziona e talvolta è necessario modificare manualmente la risposta di integrazione per restituire l'intestazione `Access-Control-Allow-Origin` di tutti i metodi abilitati per CORS per almeno tutte le 200 risposte.

Se i tipi di supporti binari sono impostati su `*/*` per l’API, quando Gateway API crea un metodo `OPTIONS`, modificare `contentHandling` in `CONVERT_TO_TEXT`.

Il comando [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html) seguente modifica `contentHandling` in `CONVERT_TO_TEXT` per una richiesta di integrazione: 

```
aws apigateway update-integration \
  --rest-api-id abc123 \
  --resource-id aaa111 \
  --http-method OPTIONS \
  --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
```

Il [update-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration-response.html)comando seguente modifica il formato `contentHandling` `CONVERT_TO_TEXT` per una risposta di integrazione:

```
aws apigateway update-integration-response \
  --rest-api-id abc123 \
  --resource-id aaa111 \
  --http-method OPTIONS \
  --status-code 200 \
  --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
```

## Abilitazione del supporto di CORS per le integrazioni proxy
<a name="apigateway-enable-cors-proxy"></a>

Per un'integrazione proxy Lambda o un'integrazione con proxy HTTP, il back-end è responsabile della restituzione delle intestazioni `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods` e `Access-Control-Allow-Headers` , perché un'integrazione proxy non restituisce una risposta di integrazione. 

Le seguenti funzioni Lambda di esempio restituiscono le intestazioni CORS richieste:

------
#### [ Node.js ]

```
export const handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "Content-Type",
            "Access-Control-Allow-Origin": "https://www.example.com",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};
```

------
#### [ Python 3 ]

```
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': 'https://www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps('Hello from Lambda!')
    }
```

------

**Topics**
+ [Determinazione della necessità di abilitare il supporto di CORS](#apigateway-cors-request-types)
+ [Abilitazione di CORS per una richiesta semplice](#apigateway-cors-simple-request)
+ [Abilitazione di CORS per una richiesta non semplice](#apigateway-enable-cors-non-simple)
+ [Abilitazione del supporto di CORS per le integrazioni proxy](#apigateway-enable-cors-proxy)
+ [Abilitazione CORS su una risorsa tramite la console API Gateway](how-to-cors-console.md)
+ [Abilitazione di CORS per una risorsa tramite l'API di importazione di API Gateway](enable-cors-for-resource-using-swagger-importer-tool.md)
+ [Test di CORS per un'API di Gateway API](apigateway-test-cors.md)

# Abilitazione CORS su una risorsa tramite la console API Gateway
<a name="how-to-cors-console"></a>

È possibile utilizzare la console API Gateway per abilitare il supporto di CORS per uno o per tutti i metodi in una risorsa API REST creata. Dopo aver abilitato il supporto CORS, impostare il comportamento passthrough di integrazione su `NEVER`. In questo caso, la richiesta di metodo di un tipo di contenuto non mappato sarà rifiutata con la risposta Tipo di supporto non compatibile HTTP 415. Per ulteriori informazioni, consulta [Comportamento della richiesta del metodo per i payload senza modelli di mappatura per REST APIs in API Gateway](integration-passthrough-behaviors.md)

**Importante**  
Le risorse possono contenere risorse figlio. L'abilitazione del supporto di CORS per una risorsa e per i relativi metodi non comporta l'abilitazione ricorsiva per le risorse figlio e i relativi metodi.

**Abilitazione del supporto di CORS in una risorsa REST API**

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

1. Scegliere un'API. 

1. Scegliere una risorsa in **Resources (Risorse)**.

1. Nella sezione **Dettagli delle risorse**, scegli **Abilita CORS.**

      
![\[Nel riquadro Risorse scegli Abilita CORS.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/amazon-api-gateway-new-console-enable-cors.png)

1.  Nella casella **Abilita CORS** esegui quanto segue: 

   1. (Facoltativo) Se hai creato una risposta del gateway del cliente e desideri abilitare il supporto di CORS per una risposta, seleziona una risposta gateway.

   1. Seleziona ciascun metodo per abilitare il supporto di CORS. Per il metodo `OPTION` è necessario abilitare il supporto di CORS. 

      Se abiliti il supporto di CORS per un metodo `ANY`, CORS viene abilitato per tutti i metodi.

   1.  Nel campo di input **Access-Control-Allow-Headers**, immetti una stringa statica di un elenco di intestazioni separate da virgole che il client deve inviare nella richiesta della risorsa. Usa l'elenco di intestazioni `'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'` fornito dalla console o specifica intestazioni personalizzate. 

   1. Utilizza il valore `'*'` fornito dalla console come valore dell'intestazione **Access-Control-Allow-Origin** per consentire le richieste di accesso da tutte le origini oppure specifica le origini autorizzate ad accedere alla risorsa. 

   1. Scegli **Save** (Salva).  
![\[Scelta delle intestazioni consentite\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/amazon-api-gateway-new-console-enable-cors-resources.png)
**Importante**  
 Quando si applicano le istruzioni sopra riportate al metodo `ANY` in un'integrazione proxy, non verrà impostata nessuna intestazione CORS applicabile. Il back-end deve invece restituire le intestazioni CORS applicabili, ad esempio `Access-Control-Allow-Origin`. 

Dopo l'abilitazione di CORS per il metodo `GET`, alla risorsa viene aggiunto un metodo `OPTIONS`, se non è già presente. La risposta `200` del metodo `OPTIONS` viene configurata automaticamente per restituire le tre intestazioni `Access-Control-Allow-*` per soddisfare gli handshake preliminari. Inoltre, il metodo effettivo (`GET`) è configurato per impostazione predefinita per restituire l'intestazione `Access-Control-Allow-Origin` anche nella risposta 200. Gli altri tipi di risposta devono essere configurati manualmente in modo da restituire l'intestazione `Access-Control-Allow-Origin'` con '\$1' oppure origini specifiche, se non si vuole che venga restituito l'errore `Cross-origin access`.

Dopo aver abilitato il supporto di CORS nella risorsa, è necessario distribuire o ridistribuire l'API per rendere effettive le nuove impostazioni. Per ulteriori informazioni, consulta [Crea distribuzione](set-up-deployments.md#create-deployment).

**Nota**  
Se non è possibile abilitare il supporto CORS sulla risorsa con questa procedura, si consiglia di confrontare la configurazione CORS con la risorsa `/pets` dell'API di esempio. Per informazioni su come creare l'API di esempio, consulta [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md).

# Abilitazione di CORS per una risorsa tramite l'API di importazione di API Gateway
<a name="enable-cors-for-resource-using-swagger-importer-tool"></a>

Se utilizzi l'[API di importazione di API Gateway](api-gateway-import-api.md), puoi configurare il supporto di CORS utilizzando un file OpenAPI. È prima necessario definire un metodo `OPTIONS` nella risorsa che restituisce le intestazioni necessarie.

**Nota**  
I browser Web prevedono che Access-Control-Allow-Headers le Access-Control-Allow-Origin intestazioni vengano configurate in ogni metodo API che accetta richieste CORS. Inoltre, alcuni browser inviano prima una richiesta HTTP a un metodo `OPTIONS` nella stessa risorsa e quindi aspettano di ricevere le stesse intestazioni.

## Metodo di esempio `Options`
<a name="enable-cors-for-resource-using-swagger-importer-tool-options"></a>

L'esempio seguente crea un metodo `OPTIONS` per un'integrazione fittizia.

------
#### [ OpenAPI 3.0 ]

```
/users:
  options:
    summary: CORS support
    description: |
      Enable CORS by returning correct headers
    tags:
    - CORS
    responses:
      200:
        description: Default response for CORS method
        headers:
          Access-Control-Allow-Origin:
            schema:
              type: "string"
          Access-Control-Allow-Methods:
            schema:
              type: "string"
          Access-Control-Allow-Headers:
            schema:
              type: "string"
        content: {}
    x-amazon-apigateway-integration:
      type: mock
      requestTemplates:
        application/json: "{\"statusCode\": 200}"
      passthroughBehavior: "never"
      responses:
        default:
          statusCode: "200"
          responseParameters:
            method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
            method.response.header.Access-Control-Allow-Methods: "'*'"
            method.response.header.Access-Control-Allow-Origin: "'*'"
```

------
#### [ OpenAPI 2.0 ]

```
/users: 
   options:
      summary: CORS support
      description: |
        Enable CORS by returning correct headers
      consumes:
        - "application/json"
      produces:
        - "application/json"
      tags:
        - CORS
      x-amazon-apigateway-integration:
        type: mock
        requestTemplates: "{\"statusCode\": 200}"
        passthroughBehavior: "never"
        responses:
          "default":
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Headers : "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
              method.response.header.Access-Control-Allow-Methods : "'*'"
              method.response.header.Access-Control-Allow-Origin : "'*'"
      responses:
        200:
          description: Default response for CORS method
          headers:
            Access-Control-Allow-Headers:
              type: "string"
            Access-Control-Allow-Methods:
              type: "string"
            Access-Control-Allow-Origin:
              type: "string"
```

------

Una volta configurato il metodo `OPTIONS` per la risorsa, puoi aggiungere le intestazioni richieste agli altri metodi nella stessa risorsa che deve accettare le richieste CORS.

1. Dichiarare **Access-Control-Allow-Origin (Controllo accessi - Autorizza origine)** e **Headers (Intestazioni)** nei tipi di risposta.

------
#### [ OpenAPI 3.0 ]

   ```
       responses:
         200:
           description: Default response for CORS method
           headers:
             Access-Control-Allow-Origin:
               schema:
                 type: "string"
             Access-Control-Allow-Methods:
               schema:
                 type: "string"
             Access-Control-Allow-Headers:
               schema:
                 type: "string"
           content: {}
   ```

------
#### [ OpenAPI 2.0 ]

   ```
       responses:
           200:
             description: Default response for CORS method
             headers:
               Access-Control-Allow-Headers:
                 type: "string"
               Access-Control-Allow-Methods:
                 type: "string"
               Access-Control-Allow-Origin:
                 type: "string"
   ```

------

1. Nel tag `x-amazon-apigateway-integration` tag configura la mappatura per quelle intestazioni nei valori statici:

------
#### [ OpenAPI 3.0 ]

   ```
       responses:
           default:
             statusCode: "200"
             responseParameters:
               method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
               method.response.header.Access-Control-Allow-Methods: "'*'"
               method.response.header.Access-Control-Allow-Origin: "'*'"
             responseTemplates:
               application/json: |
                 {}
   ```

------
#### [ OpenAPI 2.0 ]

   ```
       responses:
             "default":
               statusCode: "200"
               responseParameters:
                 method.response.header.Access-Control-Allow-Headers : "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
                 method.response.header.Access-Control-Allow-Methods : "'*'"
                 method.response.header.Access-Control-Allow-Origin : "'*'"
   ```

------

## API di esempio
<a name="enable-cors-for-resource-using-swagger-importer-tool-complete-example"></a>

L'esempio seguente crea un'API completa con un metodo `OPTIONS` e un metodo `GET` con un'integrazione `HTTP`.

------
#### [ OpenAPI 3.0 ]

```
openapi: "3.0.1"
info:
  title: "cors-api"
  description: "cors-api"
  version: "2024-01-16T18:36:01Z"
servers:
- url: "/{basePath}"
  variables:
    basePath:
      default: "/test"
paths:
  /:
    get:
      operationId: "GetPet"
      responses:
        "200":
          description: "200 response"
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: "string"
          content: {}
      x-amazon-apigateway-integration:
        httpMethod: "GET"
        uri: "http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets"
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Origin: "'*'"
        passthroughBehavior: "never"
        type: "http"
    options:
      responses:
        "200":
          description: "200 response"
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: "string"
            Access-Control-Allow-Methods:
              schema:
                type: "string"
            Access-Control-Allow-Headers:
              schema:
                type: "string"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Empty"
      x-amazon-apigateway-integration:
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'"
              method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
              method.response.header.Access-Control-Allow-Origin: "'*'"
        requestTemplates:
          application/json: "{\"statusCode\": 200}"
        passthroughBehavior: "never"
        type: "mock"
components:
  schemas:
    Empty:
      type: "object"
```

------
#### [  OpenAPI 2.0  ]

```
swagger: "2.0"
info:
  description: "cors-api"
  version: "2024-01-16T18:36:01Z"
  title: "cors-api"
basePath: "/test"
schemes:
- "https"
paths:
  /:
    get:
      operationId: "GetPet"
      produces:
      - "application/json"
      responses:
        "200":
          description: "200 response"
          headers:
            Access-Control-Allow-Origin:
              type: "string"
      x-amazon-apigateway-integration:
        httpMethod: "GET"
        uri: "http://petstore.execute-api.us-east-1.amazonaws.com/petstore/pets"
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Origin: "'*'"
        passthroughBehavior: "never"
        type: "http"
    options:
      consumes:
      - "application/json"
      produces:
      - "application/json"
      responses:
        "200":
          description: "200 response"
          schema:
            $ref: "#/definitions/Empty"
          headers:
            Access-Control-Allow-Origin:
              type: "string"
            Access-Control-Allow-Methods:
              type: "string"
            Access-Control-Allow-Headers:
              type: "string"
      x-amazon-apigateway-integration:
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'"
              method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
              method.response.header.Access-Control-Allow-Origin: "'*'"
        requestTemplates:
          application/json: "{\"statusCode\": 200}"
        passthroughBehavior: "never"
        type: "mock"
definitions:
  Empty:
    type: "object"
```

------

# Test di CORS per un'API di Gateway API
<a name="apigateway-test-cors"></a>

È possibile testare la configurazione CORS dell'API richiamando l'API e controllando le intestazioni CORS nella risposta. Il comando `curl` seguente invia una richiesta OPTIONS a un'API distribuita. 

```
curl -v -X OPTIONS https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}
```

```
< HTTP/1.1 200 OK
< Date: Tue, 19 May 2020 00:55:22 GMT
< Content-Type: application/json
< Content-Length: 0
< Connection: keep-alive
< x-amzn-RequestId: a1b2c3d4-5678-90ab-cdef-abc123
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token
< x-amz-apigw-id: Abcd=
< Access-Control-Allow-Methods: DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT
```

Le intestazioni `Access-Control-Allow-Origin`, `Access-Control-Allow-Headers` e `Access-Control-Allow-Methods` nella risposta mostrano che l'API supporta CORS. Per ulteriori informazioni, consulta [CORS per REST APIs in API Gateway](how-to-cors.md).

# Tipi di supporti binari per REST APIs in API Gateway
<a name="api-gateway-payload-encodings"></a>

In API Gateway, la richiesta e la risposta delle API possono avere un payload binario o di testo. Il payload di testo è una stringa JSON in codifica `UTF-8`, mentre un payload binario è rappresentato da tutto ciò che non è un payload di testo. Il payload binario può essere, ad esempio, un file JPEG, un GZip file o un file XML. La configurazione API necessaria per supportare i supporti binari dipende dal fatto che l'API utilizzi integrazioni proxy o non proxy. 

Se utilizzate un'integrazione proxy con lo streaming di risposta del payload, non è necessario configurare i tipi di file multimediali binari. Per ulteriori informazioni, consulta [Trasmetti in streaming la risposta di integrazione per le integrazioni proxy in API Gateway](response-transfer-mode.md).

## AWS Lambda integrazioni proxy
<a name="api-gateway-payload-encodings-proxy"></a>

Per gestire i payload binari per le integrazioni AWS Lambda proxy, è necessario codificare in base 64 la risposta della funzione. È inoltre necessario configurare la per la propria API. [binaryMediaTypes](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apigw-Type-RestApi-binaryMediaTypes) La configurazione `binaryMediaTypes` dell'API è un elenco di tipi di contenuti che l'API considera come dati binari. I tipi di supporti binari di esempio includono `image/png` o `application/octet-stream`. È possibile utilizzare il carattere jolly (`*`) per includere più tipi di file multimediali.

API Gateway utilizza la prima intestazione `Accept` dai client per determinare se una risposta deve restituire supporti binari. Per restituire un supporto binario quando non è possibile controllare l’ordine dei valori delle intestazioni `Accept`, ad esempio le richieste da un browser, impostare i tipi di supporti binari dell’API su `*/*`.

Per il codice di esempio, consulta [Restituzione di supporti binari da un'integrazione proxy Lambda in Gateway API](lambda-proxy-binary-media.md).

Se utilizzi un'integrazione proxy Lambda con lo streaming di risposta del payload, non è necessario configurare i tipi di media binari. Per ulteriori informazioni, consulta [Configura l'integrazione di un proxy Lambda con lo streaming della risposta del payload in API Gateway](response-transfer-mode-lambda.md).

## Integrazioni non proxy
<a name="api-gateway-payload-encodings-non-proxy"></a>

Per gestire i payload binari per le integrazioni non proxy, aggiungi i tipi di media all'elenco della [binaryMediaTypes](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apigw-Type-RestApi-binaryMediaTypes)risorsa. `RestApi` La configurazione `binaryMediaTypes` dell'API è un elenco di tipi di contenuti che l'API considera come dati binari. [In alternativa, puoi impostare le proprietà [ContentHandling](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html#contentHandling) sull'integrazione e sulle risorse. [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) Il valore `contentHandling` può essere `CONVERT_TO_BINARY`, `CONVERT_TO_TEXT` o non definito. 

**Nota**  
Per le integrazioni `MOCK` o private, l’impostazione delle proprietà `contentHandling` non è supportata nella Console di gestione AWS. È necessario utilizzare AWS CLI CloudFormation, o un SDK per impostare le proprietà. `contentHandling`

A seconda del valore `contentHandling` e se l'intestazione `Content-Type` della risposta o l'intestazione `Accept` della richiesta in entrata corrisponde a una voce dell'elenco `binaryMediaTypes`, API Gateway può codificare i byte binari grezzi come stringa con codifica base64, decodificare una stringa con codifica base64 di nuovo in byte grezzi oppure passare il corpo senza alcuna modifica. 

Devi configurare l'API come segue per supportare i payload binari per l'API in API Gateway: 
+ Aggiungete i tipi di file multimediali binari desiderati all'`binaryMediaTypes`elenco della [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa. Se questa proprietà e la proprietà `contentHandling` non sono definite, i payload vengono gestiti come stringhe JSON in codifica UTF-8.
+ Indirizzare la proprietà `contentHandling` della risorsa [Integration](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html). 
  + Per convertire il payload della richiesta da una stringa con codifica base64 nel relativo BLOB binario, impostare la proprietà su `CONVERT_TO_BINARY`.
  + Per convertire il payload della richiesta da un BLOB binario a una stringa con codifica base64, impostare la proprietà su `CONVERT_TO_TEXT`.
  + Per passare il payload senza modifiche, lasciare la proprietà indefinita. Per passare un payload binario senza modifiche, è inoltre necessario assicurarsi che `Content-Type` corrisponda a una delle voci `binaryMediaTypes` e che per l'API siano abilitati i [comportamenti passthrough](integration-passthrough-behaviors.md). 
+ Imposta la `contentHandling` proprietà della [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)risorsa. La proprietà `contentHandling`, l'intestazione `Accept` nelle richieste del client e i tipi `binaryMediaTypes` combinati dell'API determinano il modo in cui API Gateway gestisce le conversioni dei tipi di contenuto. Per informazioni dettagliate, vedi [Conversioni dei tipi di contenuto in API Gateway](api-gateway-payload-encodings-workflow.md). 

**Importante**  
Quando una richiesta contiene più tipi di supporto nell'intestazione `Accept`, API Gateway mantiene la conformità solo con il primo tipo di supporto `Accept`. Se non è possibile controllare l'ordine dei tipi di supporto `Accept` e il tipo di supporto del contenuto binario non è il primo dell'elenco, aggiungere il primo tipo di supporto `Accept` nell'elenco `binaryMediaTypes` dell'API. API Gateway gestisce tutti i tipi di contenuto in questo elenco come binari.   
Ad esempio, per inviare un file JPEG utilizzando un elemento `<img>` in un browser, il browser potrebbe inviare `Accept:image/webp,image/*,*/*;q=0.8` in una richiesta. Aggiungendo `image/webp` all'elenco `binaryMediaTypes`, l'endpoint riceve il file JPEG come binario. 

Per informazioni dettagliate su come API Gateway gestisce i payload di testo e binari, consulta [Conversioni dei tipi di contenuto in API Gateway](api-gateway-payload-encodings-workflow.md).

# Conversioni dei tipi di contenuto in API Gateway
<a name="api-gateway-payload-encodings-workflow"></a>

 La combinazione di `binaryMediaTypes` dell'API, le intestazioni nelle richieste del client e la proprietà `contentHandling` di integrazione determinano il modo in cui API Gateway codifica i payload.

[La tabella seguente mostra come API Gateway converte il payload della richiesta per configurazioni specifiche dell'`Content-Type`intestazione di una richiesta, l'`binaryMediaTypes`elenco di una [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa e il valore della `contentHandling` proprietà della risorsa di integrazione.](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html)


| Payload della richiesta di metodo | Intestazione `Content-Type` della richiesta | `binaryMediaTypes` | `contentHandling` | Payload della richiesta di integrazione | 
| --- | --- | --- | --- | --- | 
| Dati di testo | Qualsiasi tipo di dato | Undefined | Undefined | UTF8stringa codificata | 
| Dati di testo | Qualsiasi tipo di dato | Undefined | CONVERT\$1TO\$1BINARY | BLOB binario con codifica Base64 | 
| Dati di testo | Qualsiasi tipo di dato | Undefined | CONVERT\$1TO\$1TEXT | UTF8-stringa codificata | 
| Dati di testo | Un tipo di dati di testo | Imposta con tipi di supporto corrispondenti | Undefined | Dati di testo | 
| Dati di testo | Un tipo di dati di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | BLOB binario con codifica Base64 | 
| Dati di testo | Un tipo di dati di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | Dati di testo | 
| Dati binari | Un tipo di dati binari | Imposta con tipi di supporto corrispondenti | Undefined | Dati binari | 
| Dati binari | Un tipo di dati binari | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | Dati binari | 
| Dati binari | Un tipo di dati binari | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | Stringa con codifica Base64 | 

La tabella seguente mostra come API Gateway converte il payload di risposta per configurazioni specifiche dell'`Accept`intestazione di una richiesta, l'`binaryMediaTypes`elenco di una [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa e il valore della `contentHandling` proprietà della risorsa. [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html)

**Importante**  
 Quando una richiesta contiene più tipi di supporto nell'intestazione `Accept`, API Gateway mantiene la conformità solo con il primo tipo di supporto `Accept`. Se non è possibile controllare l'ordine dei tipi di supporto `Accept` e il tipo di supporto del contenuto binario non è il primo dell'elenco, aggiungere il primo tipo di supporto `Accept` nell'elenco `binaryMediaTypes` dell'API. API Gateway gestisce tutti i tipi di contenuto in questo elenco come binari.   
Ad esempio, per inviare un file JPEG utilizzando un elemento `<img>` in un browser, il browser potrebbe inviare `Accept:image/webp,image/*,*/*;q=0.8` in una richiesta. Aggiungendo `image/webp` all'elenco `binaryMediaTypes`, l'endpoint riceve il file JPEG come binario. 


| Payload della risposta di integrazione | Intestazione `Accept` della richiesta | `binaryMediaTypes` | `contentHandling` | Payload della risposta del metodo | 
| --- | --- | --- | --- | --- | 
| Dati di testo o binari | Un tipo di testo | Undefined | Undefined | UTF8stringa codificata | 
| Dati di testo o binari | Un tipo di testo | Undefined | CONVERT\$1TO\$1BINARY | BLOB con codifica Base64 | 
| Dati di testo o binari | Un tipo di testo | Undefined | CONVERT\$1TO\$1TEXT | UTF8-stringa codificata | 
| Dati di testo | Un tipo di testo | Imposta con tipi di supporto corrispondenti | Undefined | Dati di testo | 
| Dati di testo | Un tipo di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | BLOB con codifica Base64 | 
| Dati di testo | Un tipo di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | UTF8-stringa codificata | 
| Dati di testo | Un tipo binario | Imposta con tipi di supporto corrispondenti | Undefined | BLOB con codifica Base64 | 
| Dati di testo | Un tipo binario | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | BLOB con codifica Base64 | 
| Dati di testo | Un tipo binario | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | UTF8-stringa codificata | 
| Dati binari | Un tipo di testo | Imposta con tipi di supporto corrispondenti | Undefined | Stringa con codifica Base64 | 
| Dati binari | Un tipo di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | Dati binari | 
| Dati binari | Un tipo di testo | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | Stringa con codifica Base64 | 
| Dati binari | Un tipo binario | Imposta con tipi di supporto corrispondenti | Undefined | Dati binari | 
| Dati binari | Un tipo binario | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1BINARY | Dati binari | 
| Dati binari | Un tipo binario | Imposta con tipi di supporto corrispondenti | CONVERT\$1TO\$1TEXT | Stringa con codifica Base64 | 

Quando converti un payload di testo in un BLOB binario, API Gateway assume che i dati di testo siano una stringa con codifica base64 e genera un output dei dati binari come BLOB con codifica base64. Se la conversione non va a buon fine, viene restituita una risposta `500` che indica un errore di configurazione dell'API. Non fornisci un modello di mappatura per una conversione di questo tipo, sebbene tu debba abilitare i [comportamenti passthrough](integration-passthrough-behaviors.md) sull'API.

Quando converti un payload binario in una stringa di testo, API Gateway applica sempre una codifica base64 ai dati binari. Per tale payload puoi definire un modello di mappatura, ma puoi accedere alla stringa con codifica base64 nel modello di mappatura solo attraverso `$input.body`, come viene mostrato nel seguente estratto di un modello di mappatura di esempio. 

```
{   
    "data": "$input.body"
}
```

Per fare in modo che il payload binario venga passato senza alcuna modifica, devi abilitare i [comportamenti passthrough](integration-passthrough-behaviors.md) sull'API. 

# Abilitazione del supporto binario tramite la console API Gateway
<a name="api-gateway-payload-encodings-configure-with-console"></a>

In questa sezione viene descritto come abilitare il supporto binario tramite la console API Gateway. Come esempio, utilizziamo un'API integrata con Amazon S3. Ci focalizziamo sulle attività per impostare i tipi di supporti ammessi e per specificare come dovrebbe essere gestito il payload. Per informazioni dettagliate su come creare un'API integrata con Amazon S3, consulta [Tutorial: creazione di una REST API come un proxy Amazon S3](integrating-api-with-aws-services-s3.md).

**Per abilitare il supporto binario mediante la console API Gateway**

1. Imposta i tipi di supporto binario per l'API:

   1. Crea una nuova API o scegline una esistente. Ad esempio, noi utilizziamo l'API `FileMan`.

   1. Nell'API selezionata nel pannello di navigazione principale scegli **Impostazioni API**.

   1. Nel riquadro **Impostazioni API** scegli **Gestisci tipi di supporti** nella sezione **Tipi di media binari**.

   1. Scegli **Aggiungi tipo di supporto binario**.

   1. Immetti il tipo di supporto richiesto, ad esempio **image/png**, nel campo di input. Se necessario, ripeti questa fase per aggiungere altri tipi di supporto. Per supportare tutti i tipi di file multimediali binari, specifica `*/*`.

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

1. Imposta il modo in cui i payload dei messaggi vengono gestiti per il metodo API:

   1. Crea una nuova risorsa o scegli una risorsa esistente dell'API. Ad esempio, noi utilizziamo la risorsa `/{folder}/{item}`.

   1. Crea un nuovo metodo o scegli un metodo esistente della risorsa. Come esempio, utilizziamo il metodo `GET /{folder}/{item}` integrato nell'azione `Object GET` in Amazon S3. 

   1. Per **Gestione contenuti** scegli un'opzione. 

         
![\[Impostare il metodo GET nella console API Gateway.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/binary-support-content-handling-on-method-new-console.png)

      Scegliere **Passthrough** se non si vuole convertire il corpo quando il client e il back-end accettano lo stesso formato binario. Scegli **Converti in testo** per convertire il corpo binario in una stringa con codifica base64 quando, ad esempio, il back-end richiede che il payload di una richiesta binaria venga passato come proprietà JSON. Scegli quindi **Converti in binario** quando il client invia una stringa con codifica base64 e il back-end richiede il formato binario originale o quando l'endpoint restituisce una stringa con codifica base64 e il client accetta solo l'output binario.

   1. Per **Richiesta corpo passthrough** scegli **Quando non ci sono modelli definiti (consigliato)**.

      Puoi anche scegliere **Mai**. Ciò significa che l'API rifiuterà i dati con content-types che non dispongono di un modello di mappatura.

   1. Mantieni l'intestazione `Accept` della richiesta in entrata nella richiesta di integrazione. Procedi in questo modo se hai impostato `contentHandling` su `passthrough` e vuoi sovrascrivere questa impostazione al runtime.

         
![\[Mantenimento dell'intestazione Accept nella richiesta di integrazione.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/binary-support-preserve-incoming-accept-header-new-console.png)

   1. Per la conversione in testo, definisci un modello di mappatura per mettere i dati binari con codifica base64 nel formato richiesto.

      Un esempio di modello di mappatura per la conversione in testo è il seguente:

      ```
      {
        "operation": "thumbnail",
        "base64Image": "$input.body"
      }
      ```

      Il formato di questo modello di mappatura dipende dai requisiti dell'endpoint dell'input.

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

# Abilitazione del supporto binario tramite l'API REST API Gateway
<a name="api-gateway-payload-encodings-configure-with-control-service-api"></a>

Le seguenti attività mostrano come abilitare il supporto binario tramite le chiamate dell'API REST API Gateway.

**Topics**
+ [Aggiungi e aggiorna i tipi di supporti binari esistenti per un'API](#api-gateway-payload-encodings-setup-with-api-set-encodings-map)
+ [Configurazione delle conversioni dei payload delle richieste](#api-gateway-payload-encodings-setup-with-api-set-integration-request-encoding)
+ [Configurazione delle conversioni dei payload delle risposte](#api-gateway-payload-encodings-setup-with-api-set-integration-response-encoding)
+ [Conversione dei dati binari in dati di testo](#api-gateway-payload-encodings-convert-binary-to-string)
+ [Conversione dei dati di testo in un payload binario](#api-gateway-payload-encodings-convert-string-to-binary)
+ [Passaggio attraverso un payload binario](#api-gateway-payload-encodings-pass-binary-as-is)

## Aggiungi e aggiorna i tipi di supporti binari esistenti per un'API
<a name="api-gateway-payload-encodings-setup-with-api-set-encodings-map"></a>

Per fare in modo che API Gateway utilizzi un nuovo tipo di supporto binario, devi aggiungerlo all'elenco `binaryMediaTypes` della risorsa `RestApi`. Ad esempio, per fare in modo che API Gateway gestisca le immagini JPEG, invia una richiesta `PATCH` alla risorsa `RestApi`: 

```
PATCH /restapis/<restapi_id>

{
  "patchOperations" : [ {
    "op" : "add",
    "path" : "/binaryMediaTypes/image~1jpeg"
  } 
 ]
}
```

La specifica di tipo MIME di `image/jpeg`, parte del valore della proprietà `path`, viene ignorata come `image~1jpeg`.

Per aggiornare i tipi di supporto binario utilizzati, sostituisci o elimina i tipi di supporto dall'elenco `binaryMediaTypes` della risorsa `RestApi`. Ad esempio, per cambiare il supporto binario dai file JPEG ai byte non elaborati, invia una richiesta `PATCH` alla risorsa `RestApi`, come segue. 

```
PATCH /restapis/<restapi_id>

{
  "patchOperations" : [{
    "op" : "replace",
    "path" : "/binaryMediaTypes/image~1jpeg",
    "value" : "application/octet-stream"
  },
  {
    "op" : "remove",
    "path" : "/binaryMediaTypes/image~1jpeg"
  }]
}
```

## Configurazione delle conversioni dei payload delle richieste
<a name="api-gateway-payload-encodings-setup-with-api-set-integration-request-encoding"></a>

Se l'endpoint richiede un input binario, imposta la proprietà `contentHandling` della risorsa `Integration` su `CONVERT_TO_BINARY`. A tale scopo, invia una richiesta `PATCH`, come segue: 

```
PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration

{
  "patchOperations" : [ {
    "op" : "replace",
    "path" : "/contentHandling",
    "value" : "CONVERT_TO_BINARY"
  }]
}
```

## Configurazione delle conversioni dei payload delle risposte
<a name="api-gateway-payload-encodings-setup-with-api-set-integration-response-encoding"></a>

Se il client accetta il risultato come BLOB binario invece del payload con codifica base64 restituito dall'endpoint, imposta la proprietà `contentHandling` della risorsa `IntegrationResponse` su `CONVERT_TO_BINARY`. A questo scopo, inviare una richiesta `PATCH`, come segue:

```
PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration/responses/<status_code>

{
  "patchOperations" : [ {
    "op" : "replace",
    "path" : "/contentHandling",
    "value" : "CONVERT_TO_BINARY"
  }]
}
```

## Conversione dei dati binari in dati di testo
<a name="api-gateway-payload-encodings-convert-binary-to-string"></a>

Per inviare dati binari come proprietà JSON dell'input a AWS Lambda o Kinesis tramite API Gateway, procedi come segue: 

1. Abilita il supporto del payload binario dell'API aggiungendo il nuovo tipo di supporto binario di `application/octet-stream` all'elenco `binaryMediaTypes` dell'API. 

   ```
   PATCH /restapis/<restapi_id>
   
   {
     "patchOperations" : [ {
       "op" : "add",
       "path" : "/binaryMediaTypes/application~1octet-stream"
     } 
    ]
   }
   ```

1. Imposta `CONVERT_TO_TEXT` per la proprietà `contentHandling` della risorsa `Integration` e fornisci un modello di mappatura per assegnare la stringa con codifica base64 dei dati binari alla proprietà JSON. Nell'esempio che segue, la proprietà JSON è `body` e `$input.body` detiene la stringa con codifica base64.

   ```
   PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration
   
   {
     "patchOperations" : [
       {
         "op" : "replace",
         "path" : "/contentHandling",
         "value" : "CONVERT_TO_TEXT"
       },
       {
         "op" : "add",
         "path" : "/requestTemplates/application~1octet-stream",
         "value" : "{\"body\": \"$input.body\"}"
       }
     ]
   }
   ```

## Conversione dei dati di testo in un payload binario
<a name="api-gateway-payload-encodings-convert-string-to-binary"></a>

Supponiamo che una funzione Lambda restituisca un file di immagine come stringa con codifica base64. Per passare questo output binario al client tramite API Gateway, procedi come segue: 

1. Aggiorna l'elenco `binaryMediaTypes` dell'API aggiungendo il tipo di supporto binario di `application/octet-stream`, se non è già presente nell'elenco. 

   ```
   PATCH /restapis/<restapi_id>
   
   {
     "patchOperations" : [ {
       "op" : "add",
       "path" : "/binaryMediaTypes/application~1octet-stream",
     }]
   }
   ```

1.  Imposta la proprietà `contentHandling` della risorsa `Integration` su `CONVERT_TO_BINARY`. Non definire un modello di mappatura. Se non definisci un modello di mappatura, API Gateway chiede al modello passthrough di restituire il BLOB binario con codifica base64 come file immagine al client. 

   ```
   PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration/responses/<status_code>
   
   {
     "patchOperations" : [
       {
         "op" : "replace",
         "path" : "/contentHandling",
         "value" : "CONVERT_TO_BINARY"
       }
     ]
   }
   ```

## Passaggio attraverso un payload binario
<a name="api-gateway-payload-encodings-pass-binary-as-is"></a>

 Per memorizzare un'immagine in un bucket Amazon S3 tramite API Gateway, procedi come segue: 

1. Aggiorna l'elenco `binaryMediaTypes` dell'API aggiungendo il tipo di supporto binario di `application/octet-stream`, se non è già presente nell'elenco. 

   ```
   PATCH /restapis/<restapi_id>
   
   {
     "patchOperations" : [ {
       "op" : "add",
       "path" : "/binaryMediaTypes/application~1octet-stream"
     }
    ]
   }
   ```

1. Imposta la proprietà `contentHandling` della risorsa `Integration` su `CONVERT_TO_BINARY`. Imposta `WHEN_NO_MATCH` come il valore della proprietà `passthroughBehavior` senza definire un modello di mappatura. Ciò consente ad API Gateway di richiamare il modello passthrough. 

   ```
   PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration
   
   {
     "patchOperations" : [
       {
         "op" : "replace",
         "path" : "/contentHandling",
         "value" : "CONVERT_TO_BINARY"
       },
       {
         "op" : "replace",
         "path" : "/passthroughBehaviors",
         "value" : "WHEN_NO_MATCH"
       }
     ]
   }
   ```

# Importazione ed esportazione di codifiche di contenuti per Gateway API
<a name="api-gateway-payload-encodings-import-and-export"></a>

 Per importare l'`binaryMediaTypes`elenco su un [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html), utilizzate la seguente estensione API Gateway nel file di definizione OpenAPI dell'API. L'estensione viene anche utilizzata per esportare le impostazioni dell'API.
+ [x-amazon-apigateway-binaryproprietà -media-types](api-gateway-swagger-extensions-binary-media-types.md)

Per importare ed esportare il valore della proprietà `contentHandling` su una risorsa `Integration` o `IntegrationResponse`, utilizza le seguenti estensioni API Gateway per le definizioni OpenAPI:
+ [x-amazon-apigateway-integration oggetto](api-gateway-swagger-extensions-integration.md)
+ [x-amazon-apigateway-integrationoggetto.response](api-gateway-swagger-extensions-integration-response.md)

# Restituzione di supporti binari da un'integrazione proxy Lambda in Gateway API
<a name="lambda-proxy-binary-media"></a>

Per restituire un supporto binario da un'[integrazione proxy AWS Lambda](set-up-lambda-proxy-integrations.md), codificare in base64 la risposta dalla funzione Lambda. È inoltre necessario [configurare i tipi di supporti binari dell'API](api-gateway-payload-encodings-configure-with-console.md). Quando si configurano i tipi di supporti binari dell’API, l’API tratta quel tipo di contenuto come dati binari. Il limite della dimensione del payload è 10 MB.

**Nota**  
Per utilizzare un browser Web per richiamare un'API con questo esempio di integrazione, imposta i tipi di supporti binari dell'API su `*/*`. API Gateway utilizza la prima intestazione `Accept` dai client per determinare se una risposta deve restituire supporti binari. Per restituire un supporto binario quando non è possibile controllare l'ordine dei valori delle intestazioni `Accept`, ad esempio le richieste da un browser, impostare i tipi di supporti binari dell'API su `*/*` (per tutti i tipi di contenuto).

Il seguente esempio di funzione Lambda può restituire ai client un'immagine binaria da Amazon S3 o del testo. La risposta della funzione include un'intestazione `Content-Type` per indicare al client il tipo di dati che restituisce. La funzione imposta in modo condizionale la proprietà `isBase64Encoded` nella risposta, a seconda del tipo di dati che restituisce.

------
#### [ Node.js ]

```
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"

const client = new S3Client({region: 'us-east-2'});

export const handler = async (event) => {

  var randomint = function(max) {
    return Math.floor(Math.random() * max);
  }
  var number = randomint(2);
  if (number == 1){ 
    const input = {
      "Bucket" : "bucket-name",
      "Key" : "image.png"
      }
    try {
      const command = new GetObjectCommand(input)
      const response = await client.send(command);
      var str = await response.Body.transformToByteArray();
    } catch (err) {
      console.error(err);
    }
    const base64body = Buffer.from(str).toString('base64');
    return {
      'headers': { "Content-Type": "image/png" },
      'statusCode': 200,
      'body': base64body,
      'isBase64Encoded': true
      }
    } else {
        return {
        'headers': { "Content-Type": "text/html" },
        'statusCode': 200,
        'body': "<h1>This is text</h1>",
        }
    }
}
```

------
#### [ Python ]

```
import base64
import boto3
import json
import random

s3 = boto3.client('s3')

def lambda_handler(event, context):
    number = random.randint(0,1)
    if number == 1:
        response = s3.get_object(
            Bucket='bucket-name',
            Key='image.png',
        )
        image = response['Body'].read()
        return {
            'headers': { "Content-Type": "image/png" },
            'statusCode': 200,
            'body': base64.b64encode(image).decode('utf-8'),
            'isBase64Encoded': True
        }
    else:
        return {
            'headers': { "Content-type": "text/html" },
            'statusCode': 200,
            'body': "<h1>This is text</h1>",
        }
```

------

Per ulteriori informazioni sui tipi di supporti binari, consulta [Tipi di supporti binari per REST APIs in API Gateway](api-gateway-payload-encodings.md).

# Accesso a file binari in Amazon S3 tramite l'API di API Gateway
<a name="api-gateway-content-encodings-examples-image-s3"></a>

Gli esempi seguenti mostrano il file OpenAPI utilizzato per accedere alle immagini in Amazon S3, come eseguire il download di un'immagine da Amazon S3 e come caricare un'immagine su Amazon S3. 

**Topics**
+ [File OpenAPI di un'API di esempio per accedere alle immagini in Amazon S3](#api-gateway-content-encodings-example-image-s3-swagger-file)
+ [Download di un'immagine da Amazon S3](#api-gateway-content-encodings-example-download-image-from-s3)
+ [Caricamento di un'immagine su Amazon S3](#api-gateway-content-encodings-example-upload-image-to-s3)

## File OpenAPI di un'API di esempio per accedere alle immagini in Amazon S3
<a name="api-gateway-content-encodings-example-image-s3-swagger-file"></a>

Il seguente file OpenAPI mostra un'API di esempio che illustra il download di un file di immagine da Amazon S3 e il caricamento di un file di immagine su Amazon S3. Questa API espone i metodi `GET /s3?key={file-name}` e `PUT /s3?key={file-name}` per il download e il caricamento di un file di immagine specifico. Il metodo `GET` restituisce il file immagine come stringa con codifica base64, parte di un output JSON, seguita dal modello di mappatura fornito, in una risposta 200 OK. Il metodo `PUT` prende un BLOB binario non elaborato come input e restituisce una risposta 200 OK con un payload vuoto.

------
#### [ OpenAPI 3.0 ]

```
{
   "openapi": "3.0.0",
   "info": {
      "version": "2016-10-21T17:26:28Z",
      "title": "ApiName"
   },
   "paths": {
      "/s3": {
         "get": {
            "parameters": [
               {
                  "name": "key",
                  "in": "query",
                  "required": false,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               },
               "500": {
                  "description": "500 response"
               }
            },
            "x-amazon-apigateway-integration": {
               "credentials": "arn:aws:iam::123456789012:role/binarySupportRole",
               "responses": {
                  "default": {
                     "statusCode": "500"
                  },
                  "2\\d{2}": {
                     "statusCode": "200"
                  }
               },
               "requestParameters": {
                  "integration.request.path.key": "method.request.querystring.key"
               },
               "uri": "arn:aws:apigateway:us-west-2:s3:path/{key}",
               "passthroughBehavior": "when_no_match",
               "httpMethod": "GET",
               "type": "aws"
            }
         },
         "put": {
            "parameters": [
               {
                  "name": "key",
                  "in": "query",
                  "required": false,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     },
                     "application/octet-stream": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               },
               "500": {
                  "description": "500 response"
               }
            },
            "x-amazon-apigateway-integration": {
               "credentials": "arn:aws:iam::123456789012:role/binarySupportRole",
               "responses": {
                  "default": {
                     "statusCode": "500"
                  },
                  "2\\d{2}": {
                     "statusCode": "200"
                  }
               },
               "requestParameters": {
                  "integration.request.path.key": "method.request.querystring.key"
               },
               "uri": "arn:aws:apigateway:us-west-2:s3:path/{key}",
               "passthroughBehavior": "when_no_match",
               "httpMethod": "PUT",
               "type": "aws",
               "contentHandling": "CONVERT_TO_BINARY"
            }
         }
      }
   },
   "x-amazon-apigateway-binary-media-types": [
      "application/octet-stream",
      "image/jpeg"
   ],
   "servers": [
      {
         "url": "https://abcdefghi.execute-api.us-east-1.amazonaws.com/{basePath}",
         "variables": {
            "basePath": {
              "default": "/v1"
            }
         }
      }
   ],
   "components": {
      "schemas": {
         "Empty": {
            "type": "object",
            "title": "Empty Schema"
         }
      }
   }
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger": "2.0",
  "info": {
    "version": "2016-10-21T17:26:28Z",
    "title": "ApiName"
  },
  "host": "abcdefghi.execute-api.us-east-1.amazonaws.com",
  "basePath": "/v1",
  "schemes": [
    "https"
  ],
  "paths": {
    "/s3": {
      "get": {
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          },
          "500": {
            "description": "500 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "credentials": "arn:aws:iam::123456789012:role/binarySupportRole",
          "responses": {
            "default": {
              "statusCode": "500"
            },
            "2\\d{2}": {
              "statusCode": "200"            }
          },
          "requestParameters": {
            "integration.request.path.key": "method.request.querystring.key"
          },
          "uri": "arn:aws:apigateway:us-west-2:s3:path/{key}",
          "passthroughBehavior": "when_no_match",
          "httpMethod": "GET",
          "type": "aws"
        }
      },
      "put": {
        "produces": [
          "application/json", "application/octet-stream"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          },
          "500": {
            "description": "500 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "credentials": "arn:aws:iam::123456789012:role/binarySupportRole",
          "responses": {
            "default": {
              "statusCode": "500"
            },
            "2\\d{2}": {
              "statusCode": "200"
            }
          },
          "requestParameters": {
            "integration.request.path.key": "method.request.querystring.key"
          },
          "uri": "arn:aws:apigateway:us-west-2:s3:path/{key}",
          "passthroughBehavior": "when_no_match",
          "httpMethod": "PUT",
          "type": "aws",
          "contentHandling" : "CONVERT_TO_BINARY"
        }
      }
    }
  },
  "x-amazon-apigateway-binary-media-types" : ["application/octet-stream", "image/jpeg"],
  "definitions": {
    "Empty": {
      "type": "object",
      "title": "Empty Schema"
    }
  }
}
```

------

## Download di un'immagine da Amazon S3
<a name="api-gateway-content-encodings-example-download-image-from-s3"></a>

Per eseguire il download di un file immagine (`image.jpg`) come BLOB binario da Amazon S3:

```
GET /v1/s3?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/octet-stream
```

La risposta andata a buon fine avrebbe questa struttura:

```
200 OK HTTP/1.1

[raw bytes]
```

I byte non elaborati vengono restituiti perché l'intestazione `Accept` è impostata sul tipo di supporto binario `application/octet-stream` e il supporto binario è abilitato per l'API. 

In alternativa, per eseguire il download di un file di immagine (`image.jpg`) come stringa con codifica base64 (formattata come una proprietà JSON) da Amazon S3, aggiungi un modello di risposta alla risposta 200 di integrazione, come mostrato nel blocco di definizione OpenAPI in grassetto:

```
        "x-amazon-apigateway-integration": {
          "credentials": "arn:aws:iam::123456789012:role/binarySupportRole",
          "responses": {
            "default": {
              "statusCode": "500"
            },
            "2\\d{2}": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "{\n   \"image\": \"$input.body\"\n}"
              }
            }
          },
```

Di seguito è riportato l'aspetto della richiesta di download di un file di immagine:

```
GET /v1/s3?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/json
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK HTTP/1.1

{
  "image": "W3JhdyBieXRlc10="
}
```

## Caricamento di un'immagine su Amazon S3
<a name="api-gateway-content-encodings-example-upload-image-to-s3"></a>

Per caricare un file immagine (`image.jpg`) come BLOB binario su Amazon S3:

```
PUT /v1/s3?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/octet-stream
Accept: application/json

[raw bytes]
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK HTTP/1.1        
```

Per caricare un file immagine (`image.jpg`) come stringa con codifica base64 su Amazon S3:

```
PUT /v1/s3?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/json

W3JhdyBieXRlc10=
```

Il payload di input deve essere una stringa con codifica base64, poiché il valore dell'intestazione `Content-Type` è impostato su `application/json`. L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK HTTP/1.1
```

# Accesso a file binari in Lambda tramite l'API di API Gateway
<a name="api-gateway-content-encodings-examples-image-lambda"></a>

Il seguente esempio di OpenAPI dimostra come accedere a un file binario AWS Lambda tramite un'API API Gateway. Questa API espone i metodi `GET /lambda?key={file-name}` e `PUT /lambda?key={file-name}` per il download e il caricamento di un file di immagine specifico. Il metodo `GET` restituisce il file immagine come stringa con codifica base64, parte di un output JSON, seguita dal modello di mappatura fornito, in una risposta 200 OK. Il metodo `PUT` prende un BLOB binario non elaborato come input e restituisce una risposta 200 OK con un payload vuoto.

Si crea la funzione Lambda chiamata dall'API che restituirà una stringa con codifica base64 con l'intestazione `Content-Type` di `application/json`. 

**Topics**
+ [File OpenAPI di un'API di esempio per accedere alle immagini in Lambda](#api-gateway-content-encodings-example-image-lambda-swagger-file)
+ [Download di un'immagine da Lambda](#api-gateway-content-encodings-example-download-image-from-lambda)
+ [Caricamento di un'immagine su Lambda](#api-gateway-content-encodings-example-upload-image-to-lambda)

## File OpenAPI di un'API di esempio per accedere alle immagini in Lambda
<a name="api-gateway-content-encodings-example-image-lambda-swagger-file"></a>

Il seguente file OpenAPI mostra un'API di esempio che illustra il download di un file di immagine da Lambda e il caricamento di un file di immagine in Lambda.

------
#### [ OpenAPI 3.0 ]

```
{
   "openapi": "3.0.0",
   "info": {
      "version": "2016-10-21T17:26:28Z",
      "title": "ApiName"
   },
   "paths": {
      "/lambda": {
         "get": {
            "parameters": [
               {
                  "name": "key",
                  "in": "query",
                  "required": false,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               },
               "500": {
                  "description": "500 response"
               }
            },
            "x-amazon-apigateway-integration": {
               "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations",
               "type": "AWS",
               "credentials": "arn:aws:iam::123456789012:role/Lambda",
               "httpMethod": "POST",
               "requestTemplates": {
                  "application/json": "{\n   \"imageKey\": \"$input.params('key')\"\n}"
               },
               "responses": {
                  "default": {
                     "statusCode": "500"
                  },
                  "2\\d{2}": {
                     "statusCode": "200",
                     "responseTemplates": {
                        "application/json": "{\n   \"image\": \"$input.body\"\n}"
                     }
                  }
               }
            }
         },
         "put": {
            "parameters": [
               {
                  "name": "key",
                  "in": "query",
                  "required": false,
                  "schema": {
                     "type": "string"
                  }
               }
            ],
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     },
                     "application/octet-stream": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               },
               "500": {
                  "description": "500 response"
               }
            },
            "x-amazon-apigateway-integration": {
               "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations",
               "type": "AWS",
               "credentials": "arn:aws:iam::123456789012:role/Lambda",
               "httpMethod": "POST",
               "contentHandling": "CONVERT_TO_TEXT",
               "requestTemplates": {
                  "application/json": "{\n   \"imageKey\": \"$input.params('key')\", \"image\": \"$input.body\"\n}"
               },
               "responses": {
                  "default": {
                     "statusCode": "500"
                  },
                  "2\\d{2}": {
                     "statusCode": "200"
                  }
               }
            }
         }
      }
   },
   "x-amazon-apigateway-binary-media-types": [
      "application/octet-stream",
      "image/jpeg"
   ],
   "servers": [
      {
         "url": "https://abcdefghi.execute-api.us-east-1.amazonaws.com/{basePath}",
         "variables": {
            "basePath": {
              "default": "/v1"
            }
         }
      }
   ],
   "components": {
      "schemas": {
         "Empty": {
            "type": "object",
            "title": "Empty Schema"
         }
      }
   }
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger": "2.0",
  "info": {
    "version": "2016-10-21T17:26:28Z",
    "title": "ApiName"
  },
  "host": "abcdefghi.execute-api.us-east-1.amazonaws.com",
  "basePath": "/v1",
  "schemes": [
    "https"
  ],
  "paths": {
    "/lambda": {
      "get": {
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          },
          "500": {
            "description": "500 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations",
          "type": "AWS",
          "credentials": "arn:aws:iam::123456789012:role/Lambda",
          "httpMethod": "POST",
          "requestTemplates": {
            "application/json": "{\n   \"imageKey\": \"$input.params('key')\"\n}"
          },
          "responses": {
            "default": {
              "statusCode": "500"
            },
            "2\\d{2}": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "{\n   \"image\": \"$input.body\"\n}"
              }
            }
          }
        }
      },
      "put": {
        "produces": [
          "application/json", "application/octet-stream"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          },
          "500": {
            "description": "500 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations",
          "type": "AWS",
          "credentials": "arn:aws:iam::123456789012:role/Lambda",
          "httpMethod": "POST",
          "contentHandling" : "CONVERT_TO_TEXT",
          "requestTemplates": {
            "application/json": "{\n   \"imageKey\": \"$input.params('key')\", \"image\": \"$input.body\"\n}"
          },
          "responses": {
            "default": {
              "statusCode": "500"
            },
            "2\\d{2}": {
              "statusCode": "200"
            }
          }
        }
      }
    }
  },
  "x-amazon-apigateway-binary-media-types" : ["application/octet-stream", "image/jpeg"],
  "definitions": {
    "Empty": {
      "type": "object",
      "title": "Empty Schema"
    }
  }
}
```

------

## Download di un'immagine da Lambda
<a name="api-gateway-content-encodings-example-download-image-from-lambda"></a>

Per eseguire il download di un file immagine (`image.jpg`) come BLOB binario da Lambda:

```
GET /v1/lambda?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/octet-stream
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK HTTP/1.1

[raw bytes]
```

Per eseguire il download di un file immagine (`image.jpg`) come stringa con codifica base64, formattato come proprietà JSON, da Lambda:

```
GET /v1/lambda?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/json
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK HTTP/1.1

{
  "image": "W3JhdyBieXRlc10="
}
```

## Caricamento di un'immagine su Lambda
<a name="api-gateway-content-encodings-example-upload-image-to-lambda"></a>

Per caricare un file immagine (`image.jpg`) come BLOB binario su Lambda:

```
PUT /v1/lambda?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/octet-stream
Accept: application/json

[raw bytes]
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK            
```

Per caricare un file immagine (`image.jpg`) come stringa con codifica base64 su Lambda:

```
PUT /v1/lambda?key=image.jpg HTTP/1.1
Host: abcdefghi.execute-api.us-east-1.amazonaws.com
Content-Type: application/json
Accept: application/json

W3JhdyBieXRlc10=
```

L'aspetto di una risposta andata a buon fine è il seguente:

```
200 OK           
```

# Invocazione di REST API in Gateway API
<a name="how-to-call-api"></a>

Per chiamare un'API distribuita, i client inviano richieste all'URL del servizio del componente API Gateway per l'esecuzione dell'API, ovvero `execute-api`.

L'URL di base per le API REST si presenta nel formato seguente: 

```
https://api-id.execute-api.region.amazonaws.com/stage/
```

dove *api-id* è l'identificativo dell'API, *region* è la Regione AWS e *stage* è il nome della fase dell'implementazione dell'API. 

**Importante**  
Prima di invocare un'API, devi distribuirla in API Gateway. Per istruzioni sull'implementazione di un'API, consulta [Implementazione di REST API in Gateway API](how-to-deploy-api.md). 

**Topics**
+ [Ottenimento dell'URL di invocazione di un'API](#apigateway-how-to-call-rest-api)
+ [Invocazione di un'API](#apigateway-call-api)
+ [Utilizzo della console API Gateway per il test di un metodo API REST](how-to-test-method.md)
+ [Utilizzo di un SDK Java generato da API Gateway per un'API REST](how-to-call-apigateway-generated-java-sdk.md)
+ [Utilizzo di un SDK Android generato da API Gateway per un'API REST](how-to-generate-sdk-android.md)
+ [Usa un JavaScript SDK generato da API Gateway per un'API REST](how-to-generate-sdk-javascript.md)
+ [Utilizzo di un SDK Ruby generato da API Gateway per un'API REST](how-to-call-sdk-ruby.md)
+ [Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift](how-to-generate-sdk-ios.md)

## Ottenimento dell'URL di invocazione di un'API
<a name="apigateway-how-to-call-rest-api"></a>

Per ottenere l'URL di invocazione di un'API è possibile utilizzare la console, AWS CLI o una definizione OpenAPI esportata.

### Ottenimento dell'URL di invocazione di un'API tramite la console
<a name="apigateway-obtain-url-console"></a>

La procedura seguente mostra come ottenere l'URL di invocazione di un'API tramite la console REST API.

**Per ottenere l'URL di invocazione di un'API tramite la console REST API**

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

1. Scegli un'API implementata.

1. Nel riquadro di navigazione principale, seleziona **Log**.

1. In **Dettagli fase**, scegli l'icona Copia per copiare l'URL di richiamo dell'API.

   Questo è l'URL per la risorsa root dell'API.  
![\[Dopo aver creato la REST API, la console mostra il valore URL di richiamo dell'API.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/getting-started-rest-invoke-url.png)

1. Per ottenere l'URL di invocazione per un'altra risorsa dell'API, espandi la fase nel pannello di navigazione secondario, quindi seleziona un metodo.

1. Scegli l'icona Copia per copiare l'URL di invocazione a livello di risorsa dell'API.  
![\[L'URL a livello di risorsa della REST API si trova nel pannello di navigazione secondario della fase.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/resource-level-invoke-url.png)

#### Ottenimento dell'URL di invocazione di un'API tramite AWS CLI
<a name="apigateway-obtain-url-cli"></a>

La procedura seguente mostra come ottenere l'URL di invocazione di un'API tramite AWS CLI.

**Per ottenere l'URL di invocazione di un'API tramite AWS CLI**

1. Esegui il comando seguente per ottenere il valore `rest-api-id`. Questo comando restituisce tutti i valori `rest-api-id` presenti nella Regione in uso. Per ulteriori informazioni, consulta [get-rest-apis](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-rest-apis.html).

   ```
   aws apigateway get-rest-apis
   ```

1. Sostituisci il valore `rest-api-id` di esempio con il valore `rest-api-id` da utilizzare, il valore *\$1stage-name\$1* di esempio con il valore *\$1stage-name\$1* da utilizzare, quindi sostituisci *\$1region\$1* con la Regione in uso.

   ```
   https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/
   ```

##### Ottenimento dell'URL di invocazione di un'API tramite il file di definizione OpenAPI esportato dell'API
<a name="apigateway-obtain-url-openapi"></a>

È possibile anche creare l'URL root combinando i campi `host` e `basePath` di un file di definizione OpenAPI esportato dell'API. Per istruzioni su come esportare l'API, consulta [Esportazione di un'API REST da API Gateway](api-gateway-export-api.md).

## Invocazione di un'API
<a name="apigateway-call-api"></a>

È possibile chiamare l'API implementata utilizzando il browser, curl o altre applicazioni, come [Postman](https://www.postman.com/).

Inoltre, è possibile utilizzare la console Gateway API per testare una chiamata API. Il test sfrutta la funzionalità `TestInvoke` di Gateway API, che consente di testare l'API prima che sia implementata. Per ulteriori informazioni, consulta [Utilizzo della console API Gateway per il test di un metodo API REST](how-to-test-method.md).

**Nota**  
I valori dei parametri delle stringe di query di un URL di chiamata non possono includere `%%`.

### Invocazione di un'API tramite un browser web
<a name="apigateway-call-api-brower"></a>

Se l'API consente l'accesso anonimo, è possibile utilizzare qualsiasi browser web per invocare un metodo `GET`. Inserisci l'URL di invocazione completo nella barra degli indirizzi del browser.

Per altri metodi o chiamate che richiedono l'autenticazione, è necessario specificare un payload oppure firmare le richieste. Puoi gestire queste operazioni in uno script di una pagina HTML o in un'applicazione client utilizzando uno degli SDK AWS.

#### Invocazione di un'API tramite curl
<a name="apigateway-call-api-curl"></a>

Per chiamare l'API è possibile utilizzare uno strumento come [curl](https://curl.se/) nel terminale. Il seguente comando curl di esempio invoca il metodo GET sulla risorsa `getUsers` della fase `prod` di un'API.

------
#### [ Linux or Macintosh ]

```
curl -X GET 'https://b123abcde4.execute-api.us-west-2.amazonaws.com/prod/getUsers'
```

------
#### [ Windows ]

```
curl -X GET "https://b123abcde4.execute-api.us-west-2.amazonaws.com/prod/getUsers"
```

------

# Utilizzo della console API Gateway per il test di un metodo API REST
<a name="how-to-test-method"></a>

Utilizzo della console API Gateway per il test di un metodo API REST.

**Topics**
+ [Prerequisiti](#how-to-test-method-prerequisites)
+ [Test di un metodo tramite la console API Gateway](#how-to-test-method-console)

## Prerequisiti
<a name="how-to-test-method-prerequisites"></a>
+ È necessario specificare le impostazioni per i metodi che si intende testare. Segui le istruzioni in [Metodi per REST APIs in API Gateway](how-to-method-settings.md).

## Test di un metodo tramite la console API Gateway
<a name="how-to-test-method-console"></a>

**Importante**  
Quando si testano i metodi con la console Gateway API è possibile che alle risorse vengano apportate modifiche non annullabili. Eseguire il test di un metodo tramite la console API Gateway equivale a chiamare il metodo dall'esterno della console. Ad esempio, se si utilizza la console API Gateway per chiamare un metodo che elimina le risorse di un'API e la chiamata del metodo riesce, le risorse vengono eliminate.

**Test del metodo**

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

1. Scegliere un'API REST.

1. Nel riquadro **Resources (Risorse)** scegliere il metodo che si desidera testare.

1. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.  
![\[Utilizza la scheda Test per eseguire il test dell'API. Si trova accanto alla scheda Risposta metodo.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-test-new-console.png)

    Immetti i valori nelle caselle visualizzate, ad esempio **Stringhe di query**, **Intestazioni** e **Corpo della richiesta**. La console include tali valori della richiesta del metodo nel modulo dell'applicazione/json predefinito.

   Per specificare eventuali opzioni aggiuntive, contatta il proprietario dell'API.

1. Scegli **Test (Esegui test)**. Verranno visualizzate le seguenti informazioni:
   + **Request (Richiesta)** è il percorso della risorsa chiamato per il metodo.
   + **Status (Stato)** è il codice dello stato HTTP della risposta.
   + **Latenza in ms** è l'intervallo di tempo tra la ricezione della richiesta dal chiamante e la risposta restituita.
   + **Corpo della risposta** è il corpo della risposta HTTP.
   + **Intestazioni delle risposte** sono le intestazioni di risposta HTTP.
**Suggerimento**  
A seconda della mappatura, il codice di stato HTTP, il testo della risposta e le intestazioni potrebbero essere diversi da quelli inviati dalla funzione Lambda, dal proxy HTTP o dal proxy dei servizi AWS.
   + I **log** sono le voci di Amazon CloudWatch Logs simulate che sarebbero state scritte se il metodo fosse stato chiamato dall'esterno della console API Gateway.
**Nota**  
Anche se le voci di CloudWatch Logs sono simulate, i risultati della chiamata al metodo sono reali.

 Oltre alla console API Gateway, per testare l'invocazione di un metodo puoi usare la AWS CLI o un SDK AWS per API Gateway. Per informazioni su come usare AWS CLI per eseguire questa operazione, consulta [test-invoke-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html). 

# Utilizzo di un SDK Java generato da API Gateway per un'API REST
<a name="how-to-call-apigateway-generated-java-sdk"></a>

In questa sezione verranno illustrate, a titolo di esempio, le fasi necessarie per utilizzare un SDK Java generato da API Gateway per un'API REST mediante l'API del [calcolatore semplice](simple-calc-lambda-api-swagger-definition.md). Per poter procedere, è necessario avere completato le fasi descritte in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md). 

**Per installare e utilizzare l'SDK Java generato da API Gateway**

1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente.

1. Scaricare e installare [Apache Maven](https://maven.apache.org/) (versione 3.5 o successiva).

1. Scaricare e installare [JDK 8](https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html).

1. Imposta la variabile di ambiente `JAVA_HOME`.

1.  Passa alla cartella dell'SDK decompressa in cui si trova il file pom.xml. Per impostazione predefinita, questa cartella è `generated-code`. Eseguire il comando **mvn install** per installare i file di artefatto compilati nel repository Maven locale. Viene creata una cartella `target` contenente la libreria SDK compilata. 

1.  Digita il comando seguente in una directory vuota per creare uno stub di progetto del client e chiamare l'API mediante la libreria SDK installata. 

   ```
   mvn -B archetype:generate \
       -DarchetypeGroupdId=org.apache.maven.archetypes \
       -DgroupId=examples.aws.apig.simpleCalc.sdk.app \
       -DartifactId=SimpleCalc-sdkClient
   ```
**Nota**  
 Nel comando precedente è stato inserito il separatore `\` per maggiore leggibilità. Il comando deve trovarsi su un'unica riga senza il separatore. 

    Questo comando crea uno stub di applicazione. Lo stub di applicazione contiene un file `pom.xml` e una cartella `src` nella directory root del progetto (*SimpleCalc-sdkClient* nel comando precedente). Inizialmente sono presenti due file di origine: `src/main/java/{package-path}/App.java` e `src/test/java/{package-path}/AppTest.java`. In questo esempio *\$1package-path\$1* è `examples/aws/apig/simpleCalc/sdk/app`. Il precorso del pacchetto viene derivato dal valore `DarchetypeGroupdId`. Puoi usare il file `App.java` come modello per l'applicazione client e, se necessario, aggiungerne altri nella stessa cartella. Puoi usare il file `AppTest.java` come modello di test di unità per l'applicazione e, se necessario, aggiungere altri file di codice di test nella stessa cartella. 

1. Aggiorna le dipendenze di pacchetto nel file `pom.xml` generato come segue sostituendo, se necessario, le proprietà `groupId`, `artifactId`, `version` e `name` del progetto:

   ```
   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>examples.aws.apig.simpleCalc.sdk.app</groupId>
     <artifactId>SimpleCalc-sdkClient</artifactId>
     <packaging>jar</packaging>
     <version>1.0-SNAPSHOT</version>
     <name>SimpleCalc-sdkClient</name>
     <url>http://maven.apache.org</url>
   
      <dependencies>
         <dependency>
             <groupId>com.amazonaws</groupId>
             <artifactId>aws-java-sdk-core</artifactId>
             <version>1.11.94</version>
         </dependency>
         <dependency>
             <groupId>my-apig-api-examples</groupId>
             <artifactId>simple-calc-sdk</artifactId>
             <version>1.0.0</version>
         </dependency>
         
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
       </dependency>
   
       <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.5</version>
       </dependency>    
     </dependencies>
   
     <build>
       <plugins>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.5.1</version>
           <configuration>
             <source>1.8</source>
             <target>1.8</target>
           </configuration>
         </plugin>
       </plugins>
     </build>
   </project>
   ```
**Nota**  
 Quando una versione più recente dell'artefatto dipendente di `aws-java-sdk-core` è incompatibile con la versione specificata sopra (`1.11.94`), è necessario aggiornare il tag `<version>` alla nuova versione.

1.  Quindi mostreremo come chiamare l'API mediante l'SDK chiamando i metodi `getABOp(GetABOpRequest req)`, `getApiRoot(GetApiRootRequest req)` e `postApiRoot(PostApiRootRequest req)` dell'SDK. Questi metodi corrispondono ai metodi `GET /{a}/{b}/{op}`, `GET /?a={x}&b={y}&op={operator}` e `POST /`, rispettivamente con un payload di richieste API `{"a": x, "b": y, "op": "operator"}`. 

    Aggiorna il file `App.java` come segue: 

   ```
   package examples.aws.apig.simpleCalc.sdk.app;
   
   import java.io.IOException;
   
   import com.amazonaws.opensdk.config.ConnectionConfiguration;
   import com.amazonaws.opensdk.config.TimeoutConfiguration;
   
   import examples.aws.apig.simpleCalc.sdk.*;
   import examples.aws.apig.simpleCalc.sdk.model.*;
   import examples.aws.apig.simpleCalc.sdk.SimpleCalcSdk.*;
   
   public class App 
   {
       SimpleCalcSdk sdkClient;
   
       public App() {
           initSdk();
       }
   
       // The configuration settings are for illustration purposes and may not be a recommended best practice.
       private void initSdk() {
           sdkClient = SimpleCalcSdk.builder()
                 .connectionConfiguration(
                     new ConnectionConfiguration()
                           .maxConnections(100)
                           .connectionMaxIdleMillis(1000))
                 .timeoutConfiguration(
                     new TimeoutConfiguration()
                           .httpRequestTimeout(3000)
                           .totalExecutionTimeout(10000)
                           .socketTimeout(2000))
           .build();
   
       }
       // Calling shutdown is not necessary unless you want to exert explicit control of this resource.
       public void shutdown() {
           sdkClient.shutdown();
       }
        
       // GetABOpResult getABOp(GetABOpRequest getABOpRequest)
       public Output getResultWithPathParameters(String x, String y, String operator) {
       	operator = operator.equals("+") ? "add" : operator;
       	operator = operator.equals("/") ? "div" : operator; 
   
           GetABOpResult abopResult = sdkClient.getABOp(new GetABOpRequest().a(x).b(y).op(operator));
           return abopResult.getResult().getOutput();
       }
   
       public Output getResultWithQueryParameters(String a, String b, String op) {
           GetApiRootResult rootResult = sdkClient.getApiRoot(new GetApiRootRequest().a(a).b(b).op(op));
           return rootResult.getResult().getOutput();
       }
   
       public Output getResultByPostInputBody(Double x, Double y, String o) {
       	PostApiRootResult postResult = sdkClient.postApiRoot(
       		new PostApiRootRequest().input(new Input().a(x).b(y).op(o)));
       	return postResult.getResult().getOutput();
       }
   
       public static void main( String[] args )
       {
           System.out.println( "Simple calc" );
           // to begin
           App calc = new App();
           
           // call the SimpleCalc API
           Output res = calc.getResultWithPathParameters("1", "2", "-");
           System.out.printf("GET /1/2/-: %s\n", res.getC());
   
           // Use the type query parameter
           res = calc.getResultWithQueryParameters("1", "2", "+");
           System.out.printf("GET /?a=1&b=2&op=+: %s\n", res.getC());
   
           // Call POST with an Input body.
           res = calc.getResultByPostInputBody(1.0, 2.0, "*");
           System.out.printf("PUT /\n\n{\"a\":1, \"b\":2,\"op\":\"*\"}\n %s\n", res.getC());
   
           
       }
   }
   ```

    Nel'esempio precedente le impostazioni di configurazione utilizzate per creare istanze del client SDK hanno esclusivamente scopo illustrativo e non sono necessariamente best practice consigliate. Anche la chiamata a `sdkClient.shutdown()` è facoltativa, soprattutto se si ha necessità di esercitare un controllo accurato su quando liberare risorse. 

 Abbiamo mostrato i modelli fondamentali per chiamare un'API utilizzando un SDK Java. Le istruzioni possono essere applicate per chiamare altri metodi API. 

# Utilizzo di un SDK Android generato da API Gateway per un'API REST
<a name="how-to-generate-sdk-android"></a>

In questa sezione verranno illustrate le fasi necessarie per utilizzare un SDK Android generato da API Gateway per un'API REST. Per poter procedere, è necessario avere già completato le fasi descritte in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md).

**Nota**  
 L'SDK generato non è compatibile con Android 4.4 e versioni precedenti. Per ulteriori informazioni, consulta [Note importanti Amazon API Gateway](api-gateway-known-issues.md). 

**Per installare e utilizzare l'SDK Android generato da API Gateway**

1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente.

1. Scaricare e installare [Apache Maven](https://maven.apache.org/) (preferibilmente versione 3.x).

1. Scaricare e installare [JDK 8](https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html).

1. Imposta la variabile di ambiente `JAVA_HOME`.

1. Eseguire il comando **mvn install** per installare i file di artefatto compilati nel repository Maven locale. Viene creata una cartella `target` contenente la libreria SDK compilata.

1. Copiare il file SDK (il cui nome viene derivato dai valori specificati per **Artifact Id** (Id artefatto) e **Artifact Version** (Versione artefatto) durante la generazione dell'SDK, ad esempio `simple-calcsdk-1.0.0.jar`) dalla cartella `target`, insieme a tutte le altre librerie della cartella `target/lib`, nella cartella `lib` del progetto.

   Se usi Android Studio, crea una cartella `libs` nel modulo della tua app client e copia il file .jar richiesto in questa cartella. Verifica che la sezione delle dipendenze nel file gradle del modulo contenga il codice seguente.

   ```
       compile fileTree(include: ['*.jar'], dir: 'libs')
       compile fileTree(include: ['*.jar'], dir: 'app/libs')
   ```

   Assicurati che non siano dichiarati file .jar duplicati.

1. Usa la classe `ApiClientFactory` per inizializzare l'SDK generato da API Gateway. Ad esempio:

   ```
   ApiClientFactory factory = new ApiClientFactory();
   
   // Create an instance of your SDK. Here, 'SimpleCalcClient.java' is the compiled java class for the SDK generated by API Gateway. 
   final SimpleCalcClient client = factory.build(SimpleCalcClient.class);
   
   // Invoke a method: 
   //   For the 'GET /?a=1&b=2&op=+' method exposed by the API, you can invoke it by calling the following SDK method:
   
   Result output = client.rootGet("1", "2", "+");
   
   //     where the Result class of the SDK corresponds to the Result model of the API.
   //
   
   //   For the 'GET /{a}/{b}/{op}'  method exposed by the API, you can call the following SDK method to invoke the request,
   
   Result output = client.aBOpGet(a, b, c);
   
   //     where a, b, c can be "1", "2", "add", respectively.
   
   //   For the following API method:
   //        POST /
   //        host: ...
   //        Content-Type: application/json
   //    
   //        { "a": 1, "b": 2, "op": "+" }
   // you can call invoke it by calling the rootPost method of the SDK as follows:
   Input body = new Input();
   input.a=1;
   input.b=2;
   input.op="+";
   Result output = client.rootPost(body);
   
   //      where the Input class of the SDK corresponds to the Input model of the API.
   
   // Parse the result:
   //     If the 'Result' object is { "a": 1, "b": 2, "op": "add", "c":3"}, you retrieve the result 'c') as 
   
   String result=output.c;
   ```

1. Per usare un fornitore di credenziali Amazon Cognito per autorizzare le chiamate all'API, usa la classe `ApiClientFactory` per passare un insieme di credenziali AWS utilizzando l'SDK generato da API Gateway, come mostrato nell'esempio seguente.

   ```
   // Use CognitoCachingCredentialsProvider to provide AWS credentials
   // for the ApiClientFactory
   AWSCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
           context,          // activity context
           "identityPoolId", // Cognito identity pool id
           Regions.US_EAST_1 // region of Cognito identity pool
   );
   
   ApiClientFactory factory = new ApiClientFactory()
     .credentialsProvider(credentialsProvider);
   ```

1. Per impostare una chiave API utilizzando l'SDK generato da API Gateway, usa un codice simile al seguente.

   ```
   ApiClientFactory factory = new ApiClientFactory()
     .apiKey("YOUR_API_KEY");
   ```

# Usa un JavaScript SDK generato da API Gateway per un'API REST
<a name="how-to-generate-sdk-javascript"></a>

La procedura seguente mostra come utilizzare un JavaScript SDK generato da API Gateway.

**Nota**  
Queste istruzioni presuppongono che tu abbia già completato la procedura descritta in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md).

**Importante**  
Se l'API ha solo metodi ANY definiti, il pacchetto SDK generato non conterrà un file `apigClient.js` e sarà necessario definire i metodi ANY manualmente.

**Per installare, avviare e chiamare un JavaScript SDK generato da API Gateway per un'API REST**

1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente.

1. Abilita la condivisione delle risorse multi-origine (CORS) per tutti i metodi che l'SDK generato da API Gateway chiamerà. Per istruzioni, consulta [CORS per REST APIs in API Gateway](how-to-cors.md).

1. Nella tua pagina Web, includi i riferimenti ai seguenti script.

   ```
   <script type="text/javascript" src="lib/axios/dist/axios.standalone.js"></script>
   <script type="text/javascript" src="lib/CryptoJS/rollups/hmac-sha256.js"></script>
   <script type="text/javascript" src="lib/CryptoJS/rollups/sha256.js"></script>
   <script type="text/javascript" src="lib/CryptoJS/components/hmac.js"></script>
   <script type="text/javascript" src="lib/CryptoJS/components/enc-base64.js"></script>
   <script type="text/javascript" src="lib/url-template/url-template.js"></script>
   <script type="text/javascript" src="lib/apiGatewayCore/sigV4Client.js"></script>
   <script type="text/javascript" src="lib/apiGatewayCore/apiGatewayClient.js"></script>
   <script type="text/javascript" src="lib/apiGatewayCore/simpleHttpClient.js"></script>
   <script type="text/javascript" src="lib/apiGatewayCore/utils.js"></script>
   <script type="text/javascript" src="apigClient.js"></script>
   ```

1. Nel codice inizializza l'SDK generato da API Gateway tramite un codice simile al seguente.

   ```
   var apigClient = apigClientFactory.newClient();
   ```

   Per inizializzare l'SDK generato da API Gateway con AWS credenziali, utilizzate un codice simile al seguente. Se utilizzi AWS le credenziali, tutte le richieste all'API verranno firmate. 

   ```
   var apigClient = apigClientFactory.newClient({
     accessKey: 'ACCESS_KEY',
     secretKey: 'SECRET_KEY',
   });
   ```

   Per utilizzare una chiave API con l'SDK generato da API Gateway, passa la chiave API come parametro all'oggetto `Factory`, usando un codice simile al seguente. Se utilizzi una chiave API, viene specificato come parte dell'intestazione `x-api-key` e tutte le richieste all'API verranno firmate. Questo significa che devi impostare le intestazioni Accept corrette di CORS per ogni richiesta.

   ```
   var apigClient = apigClientFactory.newClient({
     apiKey: 'API_KEY'
   });
   ```

   

1. Chiama i metodi API in API Gateway tramite un codice simile al seguente. Ogni chiamata restituisce una promessa con callback di successo e di fallimento.

   ```
   var params = {
     // This is where any modeled request parameters should be added.
     // The key is the parameter name, as it is defined in the API in API Gateway.
     param0: '',
     param1: ''
   };
   
   var body = {
     // This is where you define the body of the request,
   };
   
   var additionalParams = {
     // If there are any unmodeled query parameters or headers that must be
     //   sent with the request, add them here.
     headers: {
       param0: '',
       param1: ''
     },
     queryParams: {
       param0: '',
       param1: ''
     }
   };
   
   apigClient.methodName(params, body, additionalParams)
       .then(function(result){
         // Add success callback code here.
       }).catch( function(result){
         // Add error callback code here.
       });
   ```

   Qui, *methodName* è costruito dal percorso di risorsa della richiesta del metodo e dal verbo HTTP. Per l' SimpleCalc API, i metodi SDK per i metodi API di 

   ```
   1. GET /?a=...&b=...&op=...
   2. POST /
   
      { "a": ..., "b": ..., "op": ...}
   3. GET /{a}/{b}/{op}
   ```

   metodi SDK corrispondenti sono i seguenti:

   ```
   1. rootGet(params);      // where params={"a": ..., "b": ..., "op": ...} is resolved to the query parameters
   2. rootPost(null, body); // where body={"a": ..., "b": ..., "op": ...}
   3. aBOpGet(params);      // where params={"a": ..., "b": ..., "op": ...} is resolved to the path parameters
   ```

   

# Utilizzo di un SDK Ruby generato da API Gateway per un'API REST
<a name="how-to-call-sdk-ruby"></a>

La seguente procedura mostra come utilizzare un SDK Ruby generato da Gateway API.

**Nota**  
Queste istruzioni presuppongono che sia già stata completata la procedura in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md).

**Per installare, creare istanze e chiamare un SDK Ruby generato da API Gateway per un'API REST**

1. Decomprimi il file SDK Ruby scaricato. L'origine dell'SDK generato viene mostrata come segue.  
![\[Decomprimere il file SDK Ruby scaricato in un modulo Ruby\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/ruby-gem-of-generated-sdk-for-simplecalc.png)

   

1.  Crea una gem Ruby dall'origine dell'SDK generato utilizzando i comandi della shell seguenti in una finestra del terminale:

   ```
   # change to /simplecalc-sdk directory
   cd simplecalc-sdk
   
   # build the generated gem
   gem build simplecalc-sdk.gemspec
   ```

   Dopo questa operazione, **simplecalc-sdk-1.0.0.gem** diventa disponibile.

1.  Installa la gem:

   ```
   gem install simplecalc-sdk-1.0.0.gem
   ```

1.  Crea un'applicazione client. Crea un'istanza e inizializza il client SDK Ruby nell'app:

   ```
   require 'simplecalc-sdk'
   client = SimpleCalc::Client.new(
       http_wire_trace: true,
       retry_limit: 5,
       http_read_timeout: 50
   )
   ```

   Se l'API dispone di un'autorizzazione del `AWS_IAM` tipo configurato, è possibile includere le AWS credenziali del chiamante fornendo `accessKey` e `secretKey` durante l'inizializzazione:

   ```
   require 'pet-sdk'
   client = Pet::Client.new(
       http_wire_trace: true,
       retry_limit: 5,
       http_read_timeout: 50,
       access_key_id: 'ACCESS_KEY',
       secret_access_key: 'SECRET_KEY'
   )
   ```

1.  Fai chiamate API mediante l'SDK nell'app. 
**Suggerimento**  
 Se non hai familiarità con le convenzioni delle chiamate ai metodi SDK, esamina il file `client.rb` nella cartella `lib` dell'SDK generato. La cartella contiene la documentazione relativa a ciascuna chiamata ai metodi API supportati.

   Per conoscere le operazioni supportate:

   ```
   # to show supported operations:
   puts client.operation_names
   ```

   I risultati sono visualizzati di seguito e corrispondono ai metodi API rispettivamente di `GET /?a={.}&b={.}&op={.}`, `GET /{a}/{b}/{op}` e `POST /`, oltre a un payload del formato `{a:"…", b:"…", op:"…"}`:

   ```
   [:get_api_root, :get_ab_op, :post_api_root]
   ```

   Per invocare il metodo API `GET /?a=1&b=2&op=+`, chiama il metodo SDK Ruby seguente:

   ```
   resp = client.get_api_root({a:"1", b:"2", op:"+"})
   ```

   Per invocare il metodo API `POST /` con un payload di `{a: "1", b: "2", "op": "+"}`, chiama il metodo SDK Ruby seguente:

   ```
   resp = client.post_api_root(input: {a:"1", b:"2", op:"+"})
   ```

   Per invocare il metodo API `GET /1/2/+`, chiama il metodo SDK Ruby seguente:

   ```
   resp = client.get_ab_op({a:"1", b:"2", op:"+"})
   ```

   Le chiamate ai metodi SDK che riescono restituiscono la risposta seguente:

   ```
   resp : {
       result: {
           input: {
               a: 1,
               b: 2,
               op: "+"
           },
           output: {
               c: 3
           }
       }
   }
   ```

# Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift
<a name="how-to-generate-sdk-ios"></a>

In questo tutorial mostreremo come usare un SDK iOS generato da API Gateway per un'API REST in un'app Objective-C o Swift per chiamare l'API sottostante. Useremo l'[SimpleCalc API](simple-calc-lambda-api.md) come esempio per illustrare i seguenti argomenti:
+ Come installare i componenti AWS Mobile SDK richiesti nel tuo progetto Xcode
+ Come creare l'oggetto client dell'API prima di chiamare i metodi dell'API
+ Come chiamare i metodi API attraverso i metodi SDK corrispondenti nell'oggetto client dell'API
+ Come preparare un input di metodo e analizzare il risultato utilizzando le classi di modello corrispondenti dell'SDK

**Topics**
+ [Utilizzo di un SDK iOS (Objective-C) generato per chiamare l'API](#how-to-use-sdk-ios-objc)
+ [Utilizzo di un SDK iOS (Swift) generato per chiamare l'API](#how-to-generate-sdk-ios-swift)

## Utilizzo di un SDK iOS (Objective-C) generato per chiamare l'API
<a name="how-to-use-sdk-ios-objc"></a>

Prima di iniziare la procedura seguente, è necessario completare le fasi descritte in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md) per iOS in Objective-C e scaricare il file .zip dell'SDK generato.

### Installa l'SDK AWS mobile e un SDK iOS generato da API Gateway in un progetto Objective-C
<a name="use-sdk-ios-objc-install-sdk"></a>

La procedura seguente descrive come installare l'SDK.

**Per installare e utilizzare un SDK iOS generato da API Gateway in Objective-C**

1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente. Utilizzando l'[SimpleCalc API](simple-calc-lambda-api.md), potresti voler rinominare la cartella SDK decompressa con qualcosa del genere. **sdk\$1objc\$1simple\$1calc** In questa cartella SDK sono presenti un file `README.md` e un file `Podfile`. Il file `README.md` contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione consente di [CocoaPods](https://cocoapods.org)importare le librerie API Gateway richieste e altri componenti AWS Mobile SDK dipendenti. Devi aggiornare il file `Podfile` per importarlo SDKs nel progetto Xcode della tua app. La cartella SDK non archiviata contiene anche una cartella `generated-src` con il codice sorgente dell'SDK generato dell'API.

1. Avvia Xcode e crea un nuovo progetto Objective-C per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel `Podfile`.

      
![\[Trovare la destinazione in Xcode.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-objc-project-find-target.png)

1. Per AWS Mobile SDK for iOS importarlo nel progetto Xcode utilizzando CocoaPods, procedi come segue:

   1. Installa CocoaPods eseguendo il seguente comando in una finestra di terminale:

      ```
      sudo gem install cocoapods
      pod setup
      ```

   1. Copia il file `Podfile` dalla cartella SDK estratta nella stessa directory in cui si trova il file di progetto Xcode. Sostituisci il blocco seguente:

      ```
      target '<YourXcodeTarget>' do
          pod 'AWSAPIGateway', '~> 2.4.7'
      end
      ```

      con il nome di destinazione del progetto: 

      ```
      target 'app_objc_simple_calc' do
          pod 'AWSAPIGateway', '~> 2.4.7'
      end
      ```

      Se il progetto Xcode già contiene un file denominato `Podfile`, aggiungi la riga di codice seguente:

      ```
      pod 'AWSAPIGateway', '~> 2.4.7'
      ```

   1. Apri una finestra del terminale ed esegui il comando seguente:

      ```
      pod install
      ```

      Questo installa il componente API Gateway e altri componenti AWS Mobile SDK dipendenti.

   1. Chiudi il progetto Xcode e apri il file `.xcworkspace` per riavviare Xcode.

   1. Aggiungi tutti i file `.h` e `.m` dalla directory `generated-src` estratta dell'SDK nel progetto Xcode.

         
![\[I file .h e .m si trovano nella directory generated-src\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-objc-project-add-sdk-src.png)

   *Per importare AWS Mobile SDK for iOS Objective-C nel tuo progetto scaricando esplicitamente AWS Mobile SDK o utilizzando [Carthage](https://github.com/Carthage/Carthage#installing-carthage), segui le istruzioni nel file README.md.* Assicurati di utilizzare solo una di queste opzioni per importare Mobile SDK. AWS 

### Chiamata ai metodi API mediante l'SDK iOS generato da API Gateway in un progetto Objective-C
<a name="use-sdk-ios-objc-call-sdk"></a>

Quando avete generato l'SDK con il prefisso di `SIMPLE_CALC` for questa [SimpleCalc API](simple-calc-lambda-api.md) con due modelli per l'input (`Input`) e l'output (`Result`) dei metodi, nell'SDK, la classe client API risultante diventa `SIMPLE_CALCSimpleCalcClient` e le classi di dati corrispondenti sono `SIMPLE_CALCInput` e, rispettivamente. `SIMPLE_CALCResult` Le richieste e le risposte API sono mappate ai metodi SDK come segue:
+ La richiesta API di

  ```
  GET /?a=...&b=...&op=...
  ```

  diventa il metodo SDK di

  ```
  (AWSTask *)rootGet:(NSString *)op a:(NSString *)a b:(NSString *)b
  ```

  La proprietà `AWSTask.result` è del tipo `SIMPLE_CALCResult`, se il modello `Result` è stato aggiunto alla risposta del metodo. In caso contrario, è del tipo `NSDictionary`.
+ Questa richiesta API di

  ```
  POST /
      
  {
     "a": "Number",
     "b": "Number",
     "op": "String"
  }
  ```

  diventa il metodo SDK di

  ```
  (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  ```
+ La richiesta API di

  ```
  GET /{a}/{b}/{op}
  ```

  diventa il metodo SDK di

  ```
  (AWSTask *)aBOpGet:(NSString *)a b:(NSString *)b op:(NSString *)op
  ```

La procedura seguente descrive come chiamare i metodi API nel codice di origine delle app Objective-C, ad esempio nell'ambito del delegato `viewDidLoad` in un file `ViewController.m`.

**Per chiamare l'API mediante l'SDK iOS generato da API Gateway**

1. Importa il file di intestazione della classe client dell'API per rendere tale classe chiamabile nell'app:

   ```
   #import "SIMPLE_CALCSimpleCalc.h"
   ```

   L'istruzione `#import` inoltre importa `SIMPLE_CALCInput.h` e `SIMPLE_CALCResult.h` per le due classi di modelli.

1. Crea un'istanza della classe client dell'API:

   ```
   SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];
   ```

   Per utilizzare Amazon Cognito con l'API, impostare la proprietà `defaultServiceConfiguration` sull'oggetto `AWSServiceManager` predefinito, come mostrato di seguito, prima di chiamare il metodo `defaultClient` per creare l'oggetto client dell'API (mostrato nell'esempio precedente):

   ```
   AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:your_cognito_pool_id];
   AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:creds];
   AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
   ```

1. Chiama il metodo `GET /?a=1&b=2&op=+` per eseguire `1+2`:

   ```
   [[apiInstance rootGet: @"+" a:@"1" b:@"2"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
       _textField1.text = [self handleApiResponse:task];
       return nil;
   }];
   ```

   dove la funzione dell'helper `handleApiResponse:task` formatta il risultato come stringa da visualizzare in un campo di testo (`_textField1`).

   ```
   - (NSString *)handleApiResponse:(AWSTask *)task {
       if (task.error != nil) {
           return [NSString stringWithFormat: @"Error: %@", task.error.description];
       } else if (task.result != nil && [task.result isKindOfClass:[SIMPLE_CALCResult class]]) {
           return [NSString stringWithFormat:@"%@ %@ %@ = %@\n",task.result.input.a, task.result.input.op, task.result.input.b, task.result.output.c];
       }
       return nil;
   }
   ```

   Il risultato visualizzato è `1 + 2 = 3`.

1. Chiama `POST /` con un payload per eseguire `1-2`:

   ```
   SIMPLE_CALCInput *input = [[SIMPLE_CALCInput alloc] init];
       input.a = [NSNumber numberWithInt:1];
       input.b = [NSNumber numberWithInt:2];
       input.op = @"-";
       [[apiInstance rootPost:input] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
           _textField2.text = [self handleApiResponse:task];
           return nil;
       }];
   ```

   Il risultato visualizzato è `1 - 2 = -1`.

1. Chiama `GET /{a}/{b}/{op}` per eseguire `1/2`:

   ```
   [[apiInstance aBOpGet:@"1" b:@"2" op:@"div"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) {
       _textField3.text = [self handleApiResponse:task];
       return nil;
   }];
   ```

   Il risultato visualizzato è `1 div 2 = 0.5`. Nell'esempio, `div` viene usato al posto di `/` perché la [funzione Lambda semplice](simple-calc-nodejs-lambda-function.md) nel back-end non gestisce le variabili di percorso con codifica URL.

## Utilizzo di un SDK iOS (Swift) generato per chiamare l'API
<a name="how-to-generate-sdk-ios-swift"></a>

Prima di iniziare la procedura seguente, devi completare le fasi descritte in [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md) per iOS in Swift e scaricare il file .zip dell'SDK generato.

**Topics**
+ [Installa SDK AWS mobile e SDK generato da API Gateway in un progetto Swift](#use-sdk-ios-swift-install-sdk)
+ [Chiamata ai metodi API mediante l'SDK iOS generato da API Gateway in un progetto Swift](#use-sdk-ios-swift-call-api)

### Installa SDK AWS mobile e SDK generato da API Gateway in un progetto Swift
<a name="use-sdk-ios-swift-install-sdk"></a>

La procedura seguente descrive come installare l'SDK.

**Per installare e utilizzare un SDK iOS generato da API Gateway in Swift**

1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente. Utilizzando l'[SimpleCalc API](simple-calc-lambda-api.md), potresti voler rinominare la cartella SDK decompressa con qualcosa del genere. **sdk\$1swift\$1simple\$1calc** In questa cartella SDK sono presenti un file `README.md` e un file `Podfile`. Il file `README.md` contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione consente di importare i componenti Mobile [CocoaPods](https://cocoapods.org)SDK richiesti. AWS Devi aggiornare il file `Podfile` per importarli SDKs nel progetto Xcode della tua app Swift. La cartella SDK non archiviata contiene anche una cartella `generated-src` con il codice sorgente dell'SDK generato dell'API.

1. Avvia Xcode e crea un nuovo progetto Swift per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel `Podfile`.

      
![\[Trovare la destinazione in Xcode.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-swift-project-find-target.png)

1. Per importare i componenti AWS Mobile SDK richiesti nel progetto Xcode utilizzando CocoaPods, procedi come segue:

   1. Se non è installato, installalo CocoaPods eseguendo il seguente comando in una finestra di terminale:

      ```
      sudo gem install cocoapods
      pod setup
      ```

   1. Copia il file `Podfile` dalla cartella SDK estratta nella stessa directory in cui si trova il file di progetto Xcode. Sostituisci il blocco seguente:

      ```
      target '<YourXcodeTarget>' do
          pod 'AWSAPIGateway', '~> 2.4.7'
      end
      ```

      con il nome di destinazione del progetto, come mostrato 

      ```
      target 'app_swift_simple_calc' do
          pod 'AWSAPIGateway', '~> 2.4.7'
      end
      ```

      Se il progetto Xcode già contiene un `Podfile` con la destinazione corretta, puoi semplicemente aggiungere la riga di codice seguente al loop `do ... end`:

      ```
      pod 'AWSAPIGateway', '~> 2.4.7'
      ```

   1. Apri una finestra del terminale ed esegui il comando seguente nella directory dell'app:

      ```
      pod install
      ```

      Questo installa il componente API Gateway e tutti i componenti AWS Mobile SDK dipendenti nel progetto dell'app.

   1. Chiudi il progetto Xcode e apri il file `*.xcworkspace` per riavviare Xcode.

   1. Aggiungi tutti i file di intestazione dell'SDK (`.h`) e i file del codice di origine Swift (`.swift`) dalla directory `generated-src` estratta nel progetto Xcode.

         
![\[I file .h e .swift si trovano nella directory generated-src\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-swift-project-add-sdk-src.png)

   1. Per abilitare la chiamata alle librerie Objective-C di AWS Mobile SDK dal tuo progetto di codice Swift, imposta il percorso del `Bridging_Header.h` file nella proprietà **Objective-C Bridging Header** sotto **Swift** Compiler - Impostazione generale della configurazione del tuo progetto Xcode: 

         
![\[Impostare il percorso del file Bridging_Header.h in Compilatore Swift - Generale.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-swift-project-set-bridging-header.png)
**Suggerimento**  
È possibile digitare **bridging** nella casella di ricerca di Xcode per trovare la proprietà **Objective-C Bridging Header (Intestazione bridging Objective-C)**.

   1. Prima di procedere, crea il progetto Xcode per verificare che sia configurato correttamente. Se il tuo Xcode utilizza una versione di Swift più recente di quella supportata per Mobile SDK, otterrai errori nel compilatore Swift. AWS In questo caso, impostare la proprietà **Use Legacy Swift Language Version (Usa versione linguaggio Swift legacy)** su **Yes (Sì)** in **Swift Compiler - Version (Compilatore Swift - Versione)**:

         
![\[Impostare la proprietà Versione linguaggio Swift legacy su Sì.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/use-sdk-in-ios-swift-project-set-legacy-swift-version.png)

   Per importare AWS Mobile SDK for iOS in Swift nel tuo progetto AWS scaricando esplicitamente Mobile SDK o [utilizzando](https://github.com/Carthage/Carthage#installing-carthage) Carthage, segui le istruzioni nel `README.md` file fornito con il pacchetto SDK. Assicurati di utilizzare solo una di queste opzioni per importare Mobile SDK. AWS 

### Chiamata ai metodi API mediante l'SDK iOS generato da API Gateway in un progetto Swift
<a name="use-sdk-ios-swift-call-api"></a>

Quando avete generato l'SDK con il prefisso di `SIMPLE_CALC` for questa [SimpleCalc API](simple-calc-lambda-api.md) con due modelli per descrivere l'input (`Input`) e l'output (`Result`) delle richieste e delle risposte dell'API, nell'SDK, la classe client API risultante diventa `SIMPLE_CALCSimpleCalcClient` e le classi di dati corrispondenti sono `SIMPLE_CALCInput` e, rispettivamente. `SIMPLE_CALCResult` Le richieste e le risposte API sono mappate ai metodi SDK come segue: 
+ La richiesta API di

  ```
  GET /?a=...&b=...&op=...
  ```

  diventa il metodo SDK di

  ```
  public func rootGet(op: String?, a: String?, b: String?) -> AWSTask
  ```

  La proprietà `AWSTask.result` è del tipo `SIMPLE_CALCResult`, se il modello `Result` è stato aggiunto alla risposta del metodo. In caso contrario, è del tipo `NSDictionary`.
+ Questa richiesta API di

  ```
  POST /
      
  {
     "a": "Number",
     "b": "Number",
     "op": "String"
  }
  ```

  diventa il metodo SDK di

  ```
  public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  ```
+ La richiesta API di

  ```
  GET /{a}/{b}/{op}
  ```

  diventa il metodo SDK di

  ```
  public func aBOpGet(a: String, b: String, op: String) -> AWSTask
  ```

La procedura seguente descrive come chiamare i metodi API nel codice di origine delle app Swift, ad esempio nell'ambito del delegato `viewDidLoad()` in un file `ViewController.m`.

**Per chiamare l'API mediante l'SDK iOS generato da API Gateway**

1. Crea un'istanza della classe client dell'API:

   ```
   let client = SIMPLE_CALCSimpleCalcClient.default()
   ```

   Per utilizzare Amazon Cognito con l'API, imposta una configurazione di AWS servizio predefinita (mostrata di seguito) prima di ottenere il `default` metodo (mostrato in precedenza):

   ```
   let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "my_pool_id")        
   let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)        
   AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
   ```

1. Chiama il metodo `GET /?a=1&b=2&op=+` per eseguire `1+2`:

   ```
   client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in
       self.showResult(task)
       return nil
   }
   ```

   dove la funzione dell'helper `self.showResult(task)` stampa il risultato o l'errore nella console, ad esempio: 

   ```
   func showResult(task: AWSTask) {
       if let error = task.error {
           print("Error: \(error)")
       } else if let result = task.result {
           if result is SIMPLE_CALCResult {
               let res = result as! SIMPLE_CALCResult
               print(String(format:"%@ %@ %@ = %@", res.input!.a!, res.input!.op!, res.input!.b!, res.output!.c!))
           } else if result is NSDictionary {
               let res = result as! NSDictionary
               print("NSDictionary: \(res)")
           }
       }
   }
   ```

   In un'app di produzione puoi visualizzare il risultato o l'errore in un campo di testo. Il risultato visualizzato è `1 + 2 = 3`.

1. Chiama `POST /` con un payload per eseguire `1-2`:

   ```
   let body = SIMPLE_CALCInput()
   body.a=1
   body.b=2
   body.op="-"
   client.rootPost(body).continueWithBlock {(task: AWSTask) -> AnyObject? in
       self.showResult(task)
       return nil
   }
   ```

   Il risultato visualizzato è `1 - 2 = -1`.

1. Chiama `GET /{a}/{b}/{op}` per eseguire `1/2`:

   ```
   client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in
       self.showResult(task)
       return nil
   }
   ```

   Il risultato visualizzato è `1 div 2 = 0.5`. Nell'esempio, `div` viene usato al posto di `/` perché la [funzione Lambda semplice](simple-calc-nodejs-lambda-function.md) nel back-end non gestisce le variabili di percorso con codifica URL.

# Sviluppa REST APIs utilizzando OpenAPI in API Gateway
<a name="api-gateway-import-api"></a>

Puoi utilizzare API Gateway per importare un'API REST da un file di definizione esterno in API Gateway. Attualmente, API Gateway supporta i file di definizione [v2.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) e [OpenAPI v3.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.1.md) con le eccezioni elencate in [Note importanti su Amazon API Gateway per REST APIs](api-gateway-known-issues.md#api-gateway-known-issues-rest-apis). Puoi aggiornare un'API sovrascrivendola con una nuova definizione oppure puoi unire la definizione a quella di un'API esistente. Puoi specificare le opzioni utilizzando un parametro di query `mode` nell'URL di richiesta. 

Per un tutorial sull'utilizzo della caratteristica Importa API dalla console API Gateway, consulta [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md).

**Topics**
+ [Importazione di un'API ottimizzata per l'edge in API Gateway](import-edge-optimized-api.md)
+ [Importazione di un'API regionale in Gateway API](import-export-api-endpoints.md)
+ [Importazione di un file OpenAPI per aggiornare una definizione API esistente](api-gateway-import-api-update.md)
+ [Impostare la proprietà openAPI `basePath`](api-gateway-import-api-basePath.md)
+ [AWS variabili per l'importazione OpenAPI](import-api-aws-variables.md)
+ [Errori e avvisi relativi all'importazione dell'API in Gateway API](api-gateway-import-api-errors-warnings.md)
+ [Esportazione di un'API REST da API Gateway](api-gateway-export-api.md)

# Importazione di un'API ottimizzata per l'edge in API Gateway
<a name="import-edge-optimized-api"></a>

Puoi importare un file di definizione OpenAPI dell'API per creare una nuova API ottimizzata per gli edge specificando il tipo di endpoint `EDGE` come input aggiuntivo, oltre al file OpenAPI, nell'operazione di importazione. Puoi farlo utilizzando la console API Gateway o un AWS SDK. AWS CLI

Per un tutorial sull'utilizzo della caratteristica Importa API dalla console API Gateway, consulta [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md).

**Topics**
+ [Importazione di un'API ottimizzata per l'edge mediante la console API Gateway](#import-edge-optimized-api-with-console)
+ [Importa un'API ottimizzata per i dispositivi periferici utilizzando AWS CLI](#import-edge-optimized-api-with-awscli)

## Importazione di un'API ottimizzata per l'edge mediante la console API Gateway
<a name="import-edge-optimized-api-with-console"></a>

Per importare un'API ottimizzata per l'edge tramite la console API Gateway, procedi nel seguente modo:

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

1. Seleziona **Create API** (Crea API).

1. In **API REST**, scegliere **Import (Importa)**.

1.  Copia una definizione OpenAPI dell'API e incollala nell'editor di codice o seleziona **Scegli il file** per caricare un file OpenAPI da un'unità locale.

1.  In **Tipo di endpoint**, scegli **Ottimizzato per gli edge**.

1.  Scegli **Crea API** per iniziare a importare le definizioni OpenAPI.

## Importa un'API ottimizzata per i dispositivi periferici utilizzando AWS CLI
<a name="import-edge-optimized-api-with-awscli"></a>

Il [import-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/import-rest-api.html)comando seguente importa un'API da un file di definizione OpenAPI per creare una nuova API ottimizzata per i bordi:

```
aws apigateway import-rest-api \
    --fail-on-warnings \
    --body 'file://path/to/API_OpenAPI_template.json'
```

oppure specificando esplicitamente il parametro della stringa di query `endpointConfigurationTypes` come `EDGE`: 

```
aws apigateway import-rest-api \
    --parameters endpointConfigurationTypes=EDGE \
    --fail-on-warnings \
    --body 'file://path/to/API_OpenAPI_template.json'
```



# Importazione di un'API regionale in Gateway API
<a name="import-export-api-endpoints"></a>

Quando importi un'API, puoi scegliere la configurazione dell'endpoint regionale per l'API. Puoi utilizzare la console API Gateway AWS CLI, o un AWS SDK.

Quando esporti un'API, la configurazione dell'endpoint dell'API non è inclusa nelle definizioni dell'API esportate.

Per un tutorial sull'utilizzo della caratteristica Importa API dalla console API Gateway, consulta [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md).

**Topics**
+ [Importazione di un'API regionale tramite la console API Gateway](#import-regional-api-with-console)
+ [Importa un'API regionale utilizzando AWS CLI](#import-regional-api-with-awscli)

## Importazione di un'API regionale tramite la console API Gateway
<a name="import-regional-api-with-console"></a>

Per importare un'API di un endpoint regionale mediante la console API Gateway, procedi come indicato di seguito:

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

1. Seleziona **Create API** (Crea API).

1. In **API REST**, scegliere **Import (Importa)**.

1.  Copia una definizione OpenAPI dell'API e incollala nell'editor di codice o seleziona **Scegli il file** per caricare un file OpenAPI da un'unità locale.

1. In **Tipo di endpoint**, scegli**Regionale**.

1.  Scegli **Crea API** per iniziare a importare le definizioni OpenAPI.

## Importa un'API regionale utilizzando AWS CLI
<a name="import-regional-api-with-awscli"></a>

Il [import-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/import-rest-api.html)comando seguente importa un file di definizione OpenAPI e imposta il tipo di endpoint su Regional:

```
aws apigateway import-rest-api \
    --parameters endpointConfigurationTypes=REGIONAL \
    --fail-on-warnings \
    --body 'file://path/to/API_OpenAPI_template.json'
```

# Importazione di un file OpenAPI per aggiornare una definizione API esistente
<a name="api-gateway-import-api-update"></a>

 Puoi importare le definizioni API solo per aggiornare un'API esistente, senza cambiare la configurazione del suo endpoint, le fasi, le variabili di fase o i riferimenti alle chiavi API. 

 L' import-to-updateoperazione può avvenire in due modalità: unione o sovrascrittura. 

Quando un'API (`A`) viene unita a un'altra (`B`), l'API risultante mantiene le definizioni di entrambe `A` e `B` se le due APIs non condividono definizioni in conflitto. Quando si verificano dei conflitti, le definizioni di metodo dell'API di unione (`A`) sostituisce le definizioni di metodo corrispondenti dell'API unita (`B`). Ad esempio, supponiamo che `B` abbia dichiarato i seguenti metodi per restituire le risposte `200` e `206`:

```
GET /a
POST /a
```

e `A` dichiari il metodo seguente per restituire le risposte `200` e `400`:

```
GET /a
```

Quando `A` viene unita a `B`, l'API risultante produrrà i seguenti metodi:

```
GET /a
```

che restituisce le risposte `200` e `400` e 

```
POST /a
```

che restituisce le risposte `200` e `206`.

Unire un'API è utile quando hai scomposto le definizioni API esterne in molteplici parti più piccole e vuoi applicare le modifiche solo a una parte per volta. Ad esempio, questo può succedere se più team sono responsabili di parti diverse di un'API e hanno modifiche disponibili a tariffe diverse. In questo modo, gli item dell'API esistente che non vengono esplicitamente indicati nella definizione importata saranno tralasciati. 

Quando un'API (`A`) sovrascrive un'altra API (`B`), l'API risultante prende le definizioni dell'API di sovrascrittura (`A`). Sovrascrivere un'API è utile quando una definizione API esterna ne contiene la definizione completa. In questo modo, gli item dell'API esistente che non vengono esplicitamente indicati nella definizione importata saranno eliminati. 

 Per unire un'API, invia una richiesta `PUT` a `https://apigateway.<region>.amazonaws.com/restapis/<restapi_id>?mode=merge`. Il valore del parametro percorso `restapi_id` specifica l'API con cui la definizione API fornita si unirà. 

 Il seguente frammento di codice mostra un esempio della richiesta `PUT` di unione di una definizione API OpenAPI in JSON, come payload, con l'API specificata già presente in API Gateway. 

```
PUT /restapis/<restapi_id>?mode=merge
Host:apigateway.<region>.amazonaws.com
Content-Type: application/json
Content-Length: ...

An OpenAPI API definition in JSON
```

 L'operazione di aggiornamento dell'unione consiste nell'unione di due definizioni API complete. Per una modifica piccola e incrementale, puoi utilizzare l'operazione di [aggiornamento risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateResource.html). 

 Per sovrascrivere un'API, invia una richiesta `PUT` a `https://apigateway.<region>.amazonaws.com/restapis/<restapi_id>?mode=overwrite`. Il parametro percorso `restapi_id` specifica l'API che verrà sovrascritta dalle definizioni API fornite. 

 Il seguente frammento di codice mostra un esempio di richiesta di sovrascrittura con il payload di una definizione OpenAPI in formato JSON: 

```
PUT /restapis/<restapi_id>?mode=overwrite
Host:apigateway.<region>.amazonaws.com
Content-Type: application/json
Content-Length: ...

An OpenAPI API definition in JSON
```

 Se il parametro di query `mode` non viene specificato, si procede con l'unione.

**Nota**  
 Le operazioni `PUT` sono idempotenti, ma non atomiche. Ciò significa che se si verifica un errore prima della fine dell'elaborazione, l'API può risultare in uno stato non valido. Tuttavia, ripetendo l'operazione con successo, l'API potrà essere nello stesso stato finale che avrebbe avuto se la prima operazione fosse riuscita. 

# Impostare la proprietà openAPI `basePath`
<a name="api-gateway-import-api-basePath"></a>

In [OpenAPI 2.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) è possibile usare la proprietà `basePath` per specificare una o più parti di percorso che precedono ogni percorso definito nella proprietà `paths`. Poiché API Gateway include diversi modi per esprimere il percorso di una risorsa, la caratteristica Importa API offre queste opzioni per interpretare la proprietà `basePath` durante l'importazione: ignore, prepend e split.

In [https://swagger.io/docs/specification/api-host-and-base-path/](https://swagger.io/docs/specification/api-host-and-base-path/) `basePath` non è più una proprietà di primo livello. Al contrario, API Gateway usa una [variabile server](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#serverVariableObject) come convenzione. La funzionalità Import API (Importa API) offre le stesse opzioni per interpretare il percorso di base durante l'importazione. Il percorso di base può essere identificato in questo modo:
+ Se l'API non contiene variabili `basePath`, la funzionalità Import API (Importa API) controlla la stringa `server.url` per verificare se contiene un percorso dopo `"/"`. Se sì, il percorso viene usato come percorso di base.
+ Se l'API contiene solo una variabile `basePath`, la funzionalità Import API (Importa API) la usa come percorso di base, anche se alla variabile non viene fatto riferimento in `server.url`.
+ Se l'API contiene più variabili `basePath`, la funzionalità Import API (Importa API) usa solo la prima come percorso di base.

## Ignorare
<a name="api-gateway-import-api-basePath-ignore"></a>

Se nel file OpenAPI il valore di `basePath` è `/a/b/c` e la proprietà `paths` contiene `/e` e `/f`, la richiesta `POST` o `PUT` seguente: 

```
POST /restapis?mode=import&basepath=ignore
```



```
PUT /restapis/api_id?basepath=ignore
```

 porterà le seguenti risorse nell'API: 
+ `/`
+ `/e`
+ `/f`

 Il punto è trattare il `basePath` come se non fosse presente e tutte le risorse API dichiarate vengono servite in relazione all'host. Questo può essere utile, ad esempio, quando hai un nome di dominio personalizzato con una mappatura API che non include un *Percorso di base* e un valore della *Fase* che si riferisce alla fase di produzione. 

**Nota**  
 API Gateway creerà automaticamente una risorsa root, anche se non è stato dichiarato in modo esplicito nel file di definizione. 

 In assenza di specifiche, `basePath` seleziona `ignore` per impostazione predefinita. 

## Metti come prefisso
<a name="api-gateway-import-api-basePath-prepend"></a>

 Se nel file OpenAPI il valore di `basePath` è `/a/b/c` e la proprietà `paths` contiene `/e` e `/f`, la richiesta `POST` o `PUT` seguente: 

```
POST /restapis?mode=import&basepath=prepend
```



```
PUT /restapis/api_id?basepath=prepend
```

 porterà le seguenti risorse nell'API: 
+ `/`
+ `/a`
+ `/a/b`
+ `/a/b/c`
+ `/a/b/c/e`
+ `/a/b/c/f`

 L'effetto è trattare il `basePath` come se specificasse risorse aggiuntive (senza metodo) e aggiungerle al set di risorse dichiarato. Questo può essere utile, ad esempio, quando team diversi sono responsabili di parti diverse di un'API e il `basePath` potrebbe riferirsi al percorso della parte dell'API di ogni team. 

**Nota**  
 API Gateway creerà automaticamente le risorse intermedie, anche se non sono dichiarate in modo esplicito nella definizione. 

## Split
<a name="api-gateway-import-api-basePath-split"></a>

 Se nel file OpenAPI il valore di `basePath` è `/a/b/c` e la proprietà `paths` contiene `/e` e `/f`, la richiesta `POST` o `PUT` seguente: 

```
POST /restapis?mode=import&basepath=split
```



```
PUT /restapis/api_id?basepath=split
```

 porterà le seguenti risorse nell'API: 
+ `/`
+ `/b`
+ `/b/c`
+ `/b/c/e`
+ `/b/c/f`

 L'effetto è trattare la parte più alta del percorso, `/a`, come l'inizio del percorso di ogni risorsa e creare risorse aggiuntive (senza metodo) all'interno dell'API stessa. Questo potrebbe, ad esempio, essere utilizzato quando `a` è il nome di una fase che vuoi esporre come parte dell'API. 

# AWS variabili per l'importazione OpenAPI
<a name="import-api-aws-variables"></a>

È possibile utilizzare le seguenti AWS variabili nelle definizioni OpenAPI. API Gateway risolve le variabili quando l'API viene importata. Per specificare una variabile, utilizzare `${variable-name}`. La tabella seguente descrive le AWS variabili disponibili. 


| Nome della variabile | Description | 
| --- | --- | 
| AWS::AccountId | L'ID AWS dell'account che importa l'API. Ad esempio, 123456789012. | 
| AWS::Partition | La AWS partizione in cui viene importata l'API. Per le AWS regioni standard, la partizione è. aws | 
| AWS::Region | La AWS regione in cui viene importata l'API. Ad esempio, us-east-2. | 

## AWS esempio di variabili
<a name="import-api-aws-variables-example"></a>

L'esempio seguente utilizza AWS le variabili per specificare una AWS Lambda funzione per un'integrazione.

------
#### [ OpenAPI 3.0 ]

```
openapi: "3.0.1"
info:
  title: "tasks-api"
  version: "v1.0"
paths:
  /:
    get:
      summary: List tasks
      description: Returns a list of tasks
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Task"
        500:
          description: "Internal Server Error"
          content: {}
      x-amazon-apigateway-integration:
        uri:
          arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:LambdaFunctionName/invocations
        responses:
          default:
            statusCode: "200"
        passthroughBehavior: "when_no_match"
        httpMethod: "POST"
        contentHandling: "CONVERT_TO_TEXT"
        type: "aws_proxy"
components:
  schemas:
    Task:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        description:
          type: string
```

------

# Errori e avvisi relativi all'importazione dell'API in Gateway API
<a name="api-gateway-import-api-errors-warnings"></a>

Quando si importa il file di definizione esterno in Gateway API è possibile che vengano generati avvisi ed errori. Nelle sezioni seguenti vengono descritti gli errori e gli avvisi che possono essere restituiti durante l'importazione.

## Errori durante l'importazione
<a name="api-gateway-import-api-errors"></a>

 Nel corso dell'importazione, possono essere generati errori per problematiche rilevanti come nel caso di un documento OpenAPI non valido. Gli errori vengono restituiti come eccezioni (ad esempio, `BadRequestException`) in una risposta non andata a buon fine. Quando si verifica un errore, la nuova definizione dell'API viene scartata e all'API esistente non viene apportata alcuna modifica. 

## Avvisi durante l'importazione
<a name="api-gateway-import-api-warnings"></a>

 Nel corso dell'importazione, gli avvisi possono essere generati per problematiche minori come nel caso di un riferimento mancante a un modello. In presenza di un avviso, l'operazione proseguirà se l'espressione di query `failonwarnings=false` viene aggiunta all'URL della richiesta. In caso contrario, gli aggiornamenti verranno ripristinati. Per impostazione predefinita, `failonwarnings` è impostato su `false`. In questi casi, gli avvisi vengono restituiti come campo nella [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)risorsa risultante. In caso contrario, gli avvisi vengono restituiti come messaggio nell'eccezione. 

# Esportazione di un'API REST da API Gateway
<a name="api-gateway-export-api"></a>

 Dopo aver creato e configurato un'API REST in API Gateway tramite la console API Gateway o in un altro modo, puoi esportarla in un file OpenAPI usando l'API di esportazione di API Gateway integrata nel servizio di controllo di Amazon API Gateway. Per utilizzare l'API di Gateway Amazon API, è necessario firmare le richieste API. Per ulteriori informazioni sulla firma delle richieste, consulta [Signing AWS API requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) nella *IAM User Guide*. Puoi scegliere di includere le estensioni di integrazione di API Gateway, nonché le estensioni [Postman](https://www.postman.com), nel file di definizione OpenAPI esportato. 

**Nota**  
Quando esporti l'API utilizzando il AWS CLI, assicurati di includere il parametro extensions come mostrato nell'esempio seguente, per assicurarti che l'`x-amazon-apigateway-request-validator`estensione sia inclusa:  

```
aws apigateway get-export --parameters extensions='apigateway' --rest-api-id abcdefg123 --stage-name dev --export-type swagger latestswagger2.json
```

 Non puoi esportare un'API se i suoi payload non sono di tipo `application/json`. Se ci provi, verrà restituita una risposta di errore che indica che non è stato possibile trovare i modelli di corpo JSON. 

## Richiesta di esportazione di un'API REST
<a name="api-gateway-export-api-request"></a>

 Con l'API Export, puoi esportare un'API REST esistente inviando una richiesta GET, specificando l' to-be-exportedAPI come parte dei percorsi URL. L'URL della richiesta ha il formato seguente: 

------
#### [ OpenAPI 3.0 ]

```
 https://<host>/restapis/<restapi_id>/stages/<stage_name>/exports/oas30
```

------
#### [ OpenAPI 2.0 ]

```
 https://<host>/restapis/<restapi_id>/stages/<stage_name>/exports/swagger
```

------

 Puoi aggiungere la stringa di query `extensions` per specificare se includere le estensioni API Gateway (con il valore `integration`) o le estensioni Postman (con il valore `postman`). 

 Inoltre, puoi impostare l'intestazione `Accept` su `application/json` o `application/yaml` per ricevere l'output della definizione API rispettivamente in formato JSON o YAML. 

 Per ulteriori informazioni sull'invio di richieste GET utilizzando l'API API Gateway Export, vedere [GetExport](https://docs.aws.amazon.com/apigateway/latest/api/API_GetExport.html). 

**Nota**  
 Se definisci modelli nell'API, questi devono essere per il tipo di contenuto "application/json" perché API Gateway possa esportare il modello. In caso contrario, API Gateway genera un'eccezione con un messaggio di errore che indica che sono stati trovati solo modelli di corpo non JSON.   
 I modelli devono contenere proprietà o essere definiti come un JSONSchema tipo particolare. 

## Download della definizione OpenAPI dell'API REST in JSON
<a name="api-gateway-export-api-download-swagger-json"></a>

Per esportare e scaricare un'API REST nelle definizioni OpenAPI in formato JSON:

------
#### [ OpenAPI 3.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/oas30
Host: apigateway.<region>.amazonaws.com
Accept: application/json
```

------
#### [ OpenAPI 2.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/swagger
Host: apigateway.<region>.amazonaws.com
Accept: application/json
```

------

 Qui `<region>` può essere, ad esempio, `us-east-1`. Per l'elenco di tutte le Regioni in cui Gateway API è disponibile, consulta [Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#apigateway_region). 

## Download della definizione OpenAPI dell'API REST in YAML
<a name="api-gateway-export-api-download-swagger-yaml"></a>

Per esportare e scaricare un'API REST nelle definizioni OpenAPI in formato YAML:

------
#### [ OpenAPI 3.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/oas30
Host: apigateway.<region>.amazonaws.com
Accept: application/yaml
```

------
#### [ OpenAPI 2.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/swagger
Host: apigateway.<region>.amazonaws.com
Accept: application/yaml
```

------

## Download della definizione OpenAPI dell'API REST con estensioni Postman in JSON
<a name="api-gateway-export-api-download-swagger-json-with-postman"></a>

Per esportare e scaricare un'API REST nelle definizioni OpenAPI con Postman in formato JSON:

------
#### [ OpenAPI 3.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/oas30?extensions=postman
Host: apigateway.<region>.amazonaws.com
Accept: application/json
```

------
#### [ OpenAPI 2.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/swagger?extensions=postman
Host: apigateway.<region>.amazonaws.com
Accept: application/json
```

------

## Download della definizione OpenAPI dell'API REST con l'integrazione di API Gateway in YAML
<a name="api-gateway-export-api-download-swagger-yaml-with-apig"></a>

Per esportare e scaricare un'API REST nelle definizioni OpenAPI con l'integrazione di API Gateway in formato YAML:

------
#### [ OpenAPI 3.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/oas30?extensions=integrations
Host: apigateway.<region>.amazonaws.com
Accept: application/yaml
```

------
#### [ OpenAPI 2.0 ]

```
GET /restapis/<restapi_id>/stages/<stage_name>/exports/swagger?extensions=integrations
Host: apigateway.<region>.amazonaws.com
Accept: application/yaml
```

------

## Esportazione di un'API REST tramite la console API Gateway
<a name="api-gateway-export-api-from-console"></a>

Dopo aver [distribuito l'API REST in una fase](set-up-deployments.md#create-deployment), puoi procedere all'esportazione dell'API nella fase in un file OpenAPI usando la console API Gateway.

 Nel riquadro **Fasi** della console Gateway API, scegli **Operazioni fase**, **Esporta**.

![\[Esportazione di un'API REST tramite la console API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/export-new-console.png)


Specifica un valore in **Tipo di specifica API**, **Formato** ed **Estensioni** per scaricare la definizione OpenAPI dell'API. 

# Pubblica REST APIs per i clienti da richiamare
<a name="rest-api-publish"></a>

La semplice creazione e sviluppo di un'API di API Gateway non la rende automaticamente richiamabile dagli utenti. Per renderla richiamabile, è necessario distribuire l'API in una fase. Inoltre, potrebbe essere necessario personalizzare l'URL che verrà utilizzato dagli utenti per accedere all'API. Puoi assegnarli un dominio che sia coerente con il tuo marchio o che sia più facile da ricordare dell'URL predefinito dell'API.

In questa sezione viene descritto come distribuire l'API e personalizzare l'URL fornito agli utenti per accedervi. 

**Nota**  
Per aumentare la sicurezza del tuo API Gateway APIs, il `execute-api.{region}.amazonaws.com` dominio è registrato nella [Public Suffix List (PSL](https://publicsuffix.org/)). Per una maggiore sicurezza, ti consigliamo di utilizzare i cookie con un `__Host-` prefisso se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per il tuo API Gateway APIs. Questa pratica ti aiuterà a difendere il tuo dominio dai tentativi CSRF (cross-site request forgery). Per ulteriori informazioni, consulta la pagina [Impostazione cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) nella pagina Mozilla Developer Network.

**Topics**
+ [Implementazione di REST API in Gateway API](how-to-deploy-api.md)
+ [Nome di dominio personalizzato per REST pubblico APIs in API Gateway](how-to-custom-domains.md)

# Implementazione di REST API in Gateway API
<a name="how-to-deploy-api"></a>

 Dopo aver creato l'API, è necessario distribuirla per renderla chiamabile dagli utenti. 

Per distribuire un'API, crea una distribuzione API e associala a una fase. Una fase è un riferimento logico a uno stato del ciclo di vita dell'API (ad esempio, `dev`, `prod`, `beta`, `v2`). Le fasi API sono identificate dall'ID API e dal nome della fase. Sono incluse nell'URL utilizzato per richiamare l'API. Ogni fase è un riferimento con nome a una distribuzione dell'API e viene resa disponibile per le applicazioni client da chiamare. 

**Importante**  
Ogni volta che si aggiorna un'API, è necessario distribuire nuovamente l'API in una fase esistente o in una nuova fase. L'aggiornamento di un'API include la modifica di instradamenti, metodi, integrazioni, sistemi di autorizzazione, policy delle risorse e qualsiasi altra cosa diversa dalle impostazioni di fase. 

Con l'evoluzione dell'API, puoi continuare a distribuirla in fasi diverse come versioni differenti. Puoi inoltre distribuire gli aggiornamenti API come una [distribuzione di una release Canary](canary-release.md). Ciò consente ai client API di accedere, sulla stessa fase, alla versione di produzione tramite la release e alla versione aggiornata tramite la release Canary. 

Per chiamare un'API distribuita, il client invia una richiesta all'URL di un'API. L'URL è determinato dal protocollo (HTTP(S) o (WSS)), nome host, nome fase e (per le API REST) dal percorso delle risorse di un'API. Il nome host e il nome della fase determinano l'URL di base dell'API. 

Se, ad esempio, si utilizza il nome di dominio predefinito dell'API, il formato dell'URL di base di un'API REST (ad esempio) in una fase specifica (`{stageName}`) è il seguente:

```
https://{restapi-id}.execute-api.{region}.amazonaws.com/{stageName}
```

 Per rendere più intuitivo l'URL di base predefinito dell'API, puoi creare un nome di dominio personalizzato (ad esempio, `api.example.com`) per sostituire il nome host predefinito dell'API. Per supportare più API con il nome di dominio personalizzato, è necessario mappare una fase API a un percorso di base. 

Con il nome di dominio personalizzato `{api.example.com}` e la fase API mappata al percorso di base (`{basePath}`) nel nome di dominio personalizzato, l'URL di base di un'API REST diventa: 

```
https://{api.example.com}/{basePath}
```

 Per ogni fase puoi ottimizzare le prestazioni dell'API impostando i limiti di throttling predefiniti delle richieste a livello di account e abilitando il caching dell'API. Puoi inoltre abilitare la registrazione delle chiamate API in CloudTrail o CloudWatch e selezionare un certificato client per permettere al back-end di autenticare le richieste API. Inoltre, puoi ignorare le impostazioni a livello di fase per i singoli metodi e definire le variabili di fase per il passaggio di contesti di ambiente specifici della fase all'integrazione API al runtime. 

Le fasi permettono un efficace controllo delle versioni dell'API. Ad esempio, puoi distribuire un'API in una fase `test` e una fase `prod` e utilizzare la fase `test` come build di test e la fase `prod` come build stabile. Dopo che gli aggiornamenti hanno superato il test, puoi promuovere la fase `test` alla fase `prod`. La promozione può essere eseguita implementando nuovamente l'API nella fase `prod` o aggiornando il valore di una variabile di fase dal nome `test` al nome `prod`.

 In questa sezione viene illustrato come distribuire un'API utilizzando la [console API Gateway](https://console.aws.amazon.com/apigateway) o chiamando l'[API REST di API Gateway](https://docs.aws.amazon.com/apigateway/latest/api/). Per utilizzare altri strumenti, consulta la documentazione della [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/apigateway/) o di un [SDK AWS](https://aws.amazon.com/developer/tools/#sdk). 

**Topics**
+ [Creazione di un'implementazione per una REST API in Gateway API](set-up-deployments.md)
+ [Configurazione di una fase per una REST API in Gateway API](set-up-stages.md)
+ [Configurare la distribuzione di una release Canary di API Gateway](canary-release.md)
+ [Aggiornamenti a REST APIs che richiedono una ridistribuzione](updating-api.md)

# Creazione di un'implementazione per una REST API in Gateway API
<a name="set-up-deployments"></a>

 In API Gateway una distribuzione di API REST è rappresentata da una risorsa [Distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Deployment.html). È simile a un eseguibile di un'API rappresentato da una risorsa [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html). 

Per consentire al client di chiamare l'API, è necessario creare una distribuzione e associarvi una fase. Una fase è rappresentata da una risorsa [Fase](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html). Rappresenta una snapshot dell'API, inclusi metodi, integrazioni, modelli, modelli di mappatura e autorizzazioni Lambda (in precedenza note come autorizzazioni ad hoc). Quando si aggiorna l'API, è possibile ridistribuirla associando una nuova fase alla distribuzione esistente. La procedura di creazione di una fase è illustrata in [Configurazione di una fase per una REST API in Gateway API](set-up-stages.md).

**Topics**
+ [Crea distribuzione](#create-deployment)
+ [Fasi successive per l'implementazione di un'API](#apigateway-deployment-next-steps)

## Crea distribuzione
<a name="create-deployment"></a>

Le procedure seguenti mostrano come creare l'implementazione di una REST API.

------
#### [ Console di gestione AWS ]

 Per poter distribuire un'API REST per la prima volta, è necessario crearla. Per ulteriori informazioni, consulta [Sviluppa REST APIs in API Gateway](rest-api-develop.md). 

 La console API Gateway consente di distribuire un'API creando una distribuzione e associandola a una fase nuova o esistente. 

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

1.  Nel riquadro di navigazione **APIs (API)** scegliere l'API che si desidera distribuire. 

1. Nel riquadro **Resources (Risorse)** scegliere **Deploy API (Distribuisci API)**.

1. In **Fase**, procedi come segue:

   1. Per creare una nuova fase, seleziona **Nuova fase**, quindi immetti un nome in **Nome fase**. Facoltativamente, puoi immettere una descrizione dell'implementazione in **Descrizione distribuzione**.

   1. Per scegliere una fase esistente, seleziona il nome della fase nel menu a discesa. Se lo desideri, puoi specificare una descrizione della nuova implementazione in **Descrizione distribuzione**.

   1. Per creare un'implementazione non associata a una fase, seleziona **Nessuna fase**. Successivamente, puoi associare questa implementazione a una fase.

1. Seleziona **Deploy (Implementa)**.

------
#### [ AWS CLI ]

Quando si crea una distribuzione, viene creata un'istanza della risorsa [Distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Deployment.html).

Il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente crea una nuova implementazione:

```
 aws apigateway create-deployment --rest-api-id rest-api-id
```

Non è possibile chiamare l’API fino a quando non si associa questa implementazione a una fase. Con una fase esistente, è possibile eseguire questa operazione aggiornando la proprietà [deploymentId](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId) della fase con l’ID di implementazione appena creato. Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna la fase con una nuova implementazione. Nella console, questa azione è chiamata **Implementazione attiva**.

```
 aws apigateway update-stage \
    --rest-api-id rest-api-id \ 
    --stage-name 'stage-name' \ 
    --patch-operations op='replace',path='/deploymentId',value='deployment-id'
```

Quando si crea l’implementazione, è possibile contemporaneamente associarla a una nuova fase. Il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente crea una nuova implementazione e la associa a una nuova fase chiamata `beta`:

```
 aws apigateway create-deployment \
    --rest-api-id rest-api-id \
    --stage-name beta
```

------

Per implementare nuovamente un'API, esegui la stessa procedura. È possibile riutilizzare la stessa fase.

## Fasi successive per l'implementazione di un'API
<a name="apigateway-deployment-next-steps"></a>

Di seguito sono riportati i passaggi successivi per l'implementazione dell'API.

Modifica delle impostazioni di fase  
Dopo che un'API è stata distribuita, puoi modificare le impostazioni delle fasi per abilitare o disabilitare la cache, la registrazione o il throttling delle richieste dell'API. Puoi inoltre scegliere un certificato client per consentire al back-end di autenticare API Gateway e impostare le variabili delle fasi per passare il contesto della distribuzione all'integrazione dell'API al runtime. Per ulteriori informazioni, consulta [Modifica delle impostazioni di fase](set-up-stages.md#how-to-stage-settings)  
Dopo avere modificato le impostazioni della fase, per renderle effettive sarà necessario eseguire di nuovo la ridistribuzione dell'API.  
 Se le impostazioni aggiornate, come l'abilitazione della registrazione, richiedono un nuovo ruolo IAM, puoi aggiungere il ruolo IAM richiesto senza ridistribuire l'API. Tuttavia potrebbero essere necessari alcuni minuti prima che il nuovo ruolo IAM diventi effettivo. Fino ad allora, le tracce delle chiamate API non vengono registrate, anche se hai abilitato l'opzione di registrazione. 

Scelta di diverse combinazioni di fase-implementazione  
 Dal momento che una distribuzione rappresenta una snapshot dell'API e una fase definisce un percorso in una snapshot, puoi scegliere combinazioni diverse di distribuzione-fase per controllare il modo in cui gli utenti effettuano chiamate nelle diverse versioni dell'API. Ciò risulta utile se ad esempio desideri eseguire il rollback a uno stato precedente della distribuzione dell'API o unire una branca privata dell'API in quella pubblica.   
 La procedura seguente illustra come eseguire questa operazione tramite **Stage Editor (Editor fasi)** nella console API Gateway. Si presume che un'API sia stata distribuita più di una volta.   

1. Se non sei già nel riquadro **Fasi**, nel pannello di navigazione principale, scegli **Fasi**.

1. Seleziona la fase da aggiornare.

1. Nella scheda **Cronologia delle distribuzioni** seleziona l'implementazione da utilizzare per la fase. 

1. Scegli **Cambia implementazione attiva**.

1. Conferma di voler cambiare l'implementazione attiva e scegli **Cambia implementazione attiva** nella finestra di dialogo **Rendi attiva l'implementazione**.

Passare i dati specifici dell'implementazione all'API.  
 Per una distribuzione, puoi impostare o modificare le variabili delle fasi per passare i dati specifici della distribuzione all'integrazione dell'API in fase di runtime. Puoi eseguire questa operazione nella scheda **Stage Variables (Variabili di fase)** in **Stage Editor (Editor fasi)**. Per ulteriori informazioni, consulta le istruzioni in [Utilizzo delle variabili di fase per una REST API in Gateway API](stage-variables.md).

# Configurazione di una fase per una REST API in Gateway API
<a name="set-up-stages"></a>

Una fase è un riferimento con nome a un'implementazione, corrispondente a uno snapshot dell'API. Utilizzare una [Stage (Fase)](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) per gestire e ottimizzare una specifica distribuzione. Ad esempio, puoi configurare le impostazioni di fase per abilitare la memorizzazione nella cache, personalizzare il throttling della richiesta, configurare la registrazione, definire le variabili di fase o collegare una release Canary a scopi di test. La sezione seguente illustra come creare e configurare la fase.

## Creazione di una nuova fase
<a name="how-to-create-stage-console"></a>

 Dopo la distribuzione iniziale, puoi aggiungere altre fasi e associarle alle distribuzioni esistenti. Puoi usare la console API Gateway per creare una nuova fase oppure puoi scegliere una fase esistente durante la distribuzione di un'API. In generale, puoi aggiungere una nuova fase a una distribuzione API prima di ridistribuirla. Per creare una nuova fase mediante la console Gateway API procedi come riportato di seguito: 

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale scegli **Fasi** sotto un'API.

1. Dal riquadro di navigazione **Fasi** scegli **Crea fase**.

1.  Per **Nome fase** immetti un nome, ad esempio **prod**. 
**Nota**  
I nomi di fasi possono contenere solo caratteri alfanumerici, trattini e caratteri di sottolineatura. La lunghezza massima è 128 caratteri.

1.  (Facoltativo). In **Descrizione** inserisci una breve descrizione.

1. In **Implementazione** seleziona la data e l'ora dell'implementazione API esistente che intendi associare a questa fase.

1. In **Impostazioni aggiuntive** puoi specificare le impostazioni aggiuntive per la fase.

1. Scegli **Crea fase**.

## Modifica delle impostazioni di fase
<a name="how-to-stage-settings"></a>

Dopo una distribuzione riuscita di un'API, la fase viene popolata di impostazioni predefinite. Per modificare le impostazioni di una fase, incluso caching e registrazione delle API, puoi utilizzare la console o l'API REST di API Gateway. Se è stato modificato l’endpoint predefinito della REST API, quando si aggiorna una fase, la modifica viene propagata a tutte le fasi dell’API. La procedura seguente illustra come effettuare questa operazione tramite l'**editor della fase** della console Gateway API.

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale scegli **Fasi** sotto un'API.

1. Nel riquadro **Stages (Fasi)**, selezionare il nome della fase.

1. Nella sezione **Dettagli fase** scegli **Modifica**.

1. (Facoltativo) In **Descrizione fase** modifica la descrizione.

1. In **Impostazioni aggiuntive** modifica le seguenti impostazioni:

     
**Impostazioni cache**  
Per abilitare il caching delle API per la fase, attiva **Cache API con provisioning**. Quindi configura la memorizzazione nella cache a **livello di metodo predefinita, la capacità della cache****, la** **crittografia dei dati della cache, la cache time-to-live** **(TTL)** e tutti i requisiti per l'invalidazione della cache per chiave.  
Il caching non è attivo finché non viene attivato il caching predefinito a livello di metodo o il caching a livello di metodo per un metodo specifico.  
Per ulteriori informazioni sulle impostazioni della cache, consulta [Impostazioni della cache per REST APIs in API Gateway](api-gateway-caching.md).  
Se abiliti la memorizzazione nella cache delle API per una fase dell'API, al tuo account potrebbe essere addebitato un costo per la memorizzazione nella cache delle API. AWS Il caching non è idoneo per il AWS piano gratuito.  
**Impostazioni di limitazione (della larghezza di banda della rete)**  
Per impostare le destinazioni di limitazione (della larghezza di banda della rete) a livello di fase per tutti i metodi associati a questa API, attiva **Throttling**.  
Per **Rate**(Tasso), inserire un tasso di destinazione. Questa è la velocità, espressa in richieste al secondo, con cui i token vengono aggiunti al bucket di token. La velocità a livello di fase non deve essere superiore alla velocità a [livello di account](api-gateway-request-throttling.md#apig-request-throttling-account-level-limits) come specificato in [Quote per la configurazione e l’esecuzione di una REST API in Gateway API](api-gateway-execution-service-limits-table.md).   
Per **Burst** (ottimizzazione), inserisci un tasso di destinazione. La frequenza di burst è la capacità del token bucket. Ciò consente di passare più richieste per un periodo di tempo rispetto al tasso di destinazione. Questo tasso di ottimizzazione a livello di fase non deve essere superiore al tasso di ottimizzazione a [livello di account](api-gateway-request-throttling.md#apig-request-throttling-account-level-limits) come specificato in [Quote per la configurazione e l’esecuzione di una REST API in Gateway API](api-gateway-execution-service-limits-table.md).   
I tassi di limitazione (della larghezza di banda della rete) non sono limiti rigidi e vengono applicati sulla base del miglior tentativo. In alcuni casi, i client possono superare gli obiettivi impostati. Non fare affidamento sulla limitazione (della larghezza di banda della rete) per controllare i costi o bloccare l'accesso a un'API. Considera l'utilizzo di [Budget AWS](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) per monitorare i costi e di [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) per gestire le richieste API.  
**Impostazioni di firewall e certificati**  
Per associare un ACL AWS WAF Web allo stage, selezionate un ACL Web dall'elenco a discesa **Web ACL**. Se si desidera, scegliere **Block API Request if WebACL cannot be evaluated (Blocca richiesta API se non è possibile valutare WebACL)**.  
Per selezionare un certificato client per la fase, scegli un certificato dal menu a discesa **Certificati client**.

1. Scegli **Continua**.

1. Esamina le modifiche e scegli **Salva modifiche**.

1. **Per abilitare Amazon CloudWatch Logs per tutti i metodi associati a questa fase di questa API API Gateway, nella sezione **Logs and tracing**, scegli Modifica.**
**Nota**  
Per abilitare CloudWatch i log, devi anche specificare l'ARN di un ruolo IAM che consente ad API Gateway di scrivere informazioni nei log CloudWatch per conto del tuo utente. Per farlo, scegli **Impostazioni dal pannello** di navigazione **APIs**principale. Quindi, per il **ruolo di CloudWatch registro**, inserisci l'ARN di un ruolo IAM.   
Per scenari applicativi comuni, il ruolo IAM potrebbe allegare la policy gestita di [Amazon APIGateway PushToCloudWatchLogs](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAPIGatewayPushToCloudWatchLogs.html).  
Il ruolo IAM deve anche contenere la seguente dichiarazione di relazione di attendibilità:  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "apigateway.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```
  
Per ulteriori informazioni CloudWatch, consulta la *[Amazon CloudWatch User Guide](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)*.

1. Seleziona un livello di registrazione dal menu a discesa **CloudWatch Logs.** I livelli di registrazione dei log sono:
   + **Inattivo**: la registrazione dei log non è attivata per questa fase. 
   + **Solo errori**: la registrazione dei log è abilitata solo per gli errori. 
   + **Errori e log informativi**: la registrazione dei log è abilitata per tutti gli eventi.

1. Seleziona **Data tracing** per fare in modo che API Gateway riferisca alla registrazione CloudWatch della traccia dei dati per la tua fase. Questo può essere utile per la risoluzione dei problemi APIs, ma può comportare la registrazione di dati sensibili.
**Nota**  
Ti consigliamo di non utilizzare il **tracciamento dei dati** per la produzione. APIs

1. Seleziona **Metriche dettagliate** per fare in modo che API Gateway CloudWatch riferisca alle metriche API di`API calls`,`Latency`, `Integration latency``400 errors`, e. `500 errors` Per ulteriori informazioni CloudWatch, consulta il [monitoraggio di base e il monitoraggio dettagliato](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html) nella Amazon CloudWatch User Guide.
**Importante**  
Al tuo account viene addebitato l'accesso ai parametri a livello di metodo, ma non ai CloudWatch parametri a livello di API o a livello di fase.

1. Per abilitare la registrazione degli accessi a una destinazione, attiva **Registrazione accesso personalizzato**.

1. In **ARN di destinazione del log degli accessi** inserisci l'ARN di un gruppo di log o un flusso Firehose. 

   Il formato dell'ARN per Firehose è `arn:aws:firehose:{region}:{account-id}:deliverystream/amazon-apigateway-{your-stream-name}`. Il nome del flusso di Firehose deve essere `amazon-apigateway-{your-stream-name}`.

1. In **Formato log** immetti un formato di log. Per ulteriori informazioni sui formati di log di esempio, consulta [CloudWatch formati di registro per API Gateway](set-up-logging.md#apigateway-cloudwatch-log-formats).

1. Per abilitare il tracciamento [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) per la fase API, seleziona **Tracciamento X-Ray**. Per ulteriori informazioni, consulta [Traccia delle richieste degli utenti alle REST API utilizzando X-Ray in Gateway API](apigateway-xray.md).

1. Scegli **Salva modifiche**. Implementa nuovamente l'API per rendere effettive le nuove impostazioni.

## Sostituzione delle impostazioni a livello di fase
<a name="how-to-method-override"></a>

Dopo aver personalizzato le impostazioni a livello di fase, è possibile sostituirle per ogni metodo API. Alcune di queste opzioni potrebbero comportare costi aggiuntivi per il tuo Account AWS.

1. Per configurare le sostituzioni dei metodi, espandi la fase nel pannello di navigazione secondario, quindi scegli un metodo.  
![\[Espandi la fase nel pannello di navigazione secondario e scegli un metodo.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/method-override-view-new-console.png)

1. Per **Sostituzioni del metodo** scegli **Modifica**.

1. Per attivare CloudWatch le impostazioni a livello di metodo, per **CloudWatch Registri**, seleziona un livello di registrazione.

1. Per attivare la registrazione dei log della traccia dei dati per il metodo, seleziona **Tracciamento dei dati.**
**Nota**  
Si consiglia di non utilizzare il tracciamento **dei dati** per la produzione. APIs

1. Per attivare i parametri dettagliati a livello di metodo, seleziona **Parametri dettagliati**. Al tuo account viene addebitato l'accesso alle metriche a livello di metodo, ma non alle CloudWatch metriche a livello di API o a livello di fase.

1. Per attivare la limitazione (della larghezza di banda della rete) a livello di metodo, seleziona **Throttling**. Immetti le opzioni appropriate a livello di metodo. Per ulteriori informazioni sulla limitazione, consulta [Limita le richieste al tuo REST APIs per una migliore velocità di trasmissione in API Gateway](api-gateway-request-throttling.md).

1. Per configurare la cache a livello di metodo, seleziona **Abilita cache metodo**. La modifica dell'impostazione del caching predefinito a livello di metodo nei **dettagli della fase** non influisce su questa impostazione.

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

# Aggiungi un'API API Gateway REST come destinazione per Amazon Bedrock AgentCore Gateway
<a name="mcp-server"></a>

Un Amazon Bedrock AgentCore Gateway offre agli sviluppatori di agenti AI un modo sicuro per esporre il tuo API Gateway REST APIs come strumenti compatibili con il Model Context Protocol (MCP). AgentCore Gateway utilizza obiettivi per definire gli strumenti. Quando aggiungi la tua fase come destinazione, il tuo Gateway diventa un singolo URL MCP che consente l'accesso agli strumenti per un agente. Per ulteriori informazioni, consulta le [fasi dell'API REST di API Gateway come obiettivi](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-api-gateway.html) nella *Amazon Bedrock AgentCore Gateway Developer Guide*.

Gli obiettivi API Gateway collegano il AgentCore gateway alle fasi del REST APIs. Puoi includere l'intera fase come obiettivo o selezionare risorse. Dopo aver creato l'oggetto API Gateway, AgentCore Gateway traduce le richieste MCP in entrata in richieste HTTP e gestisce la formattazione della risposta. I client MCP possono recuperare la documentazione dell'API utilizzando il metodo e richiamarla utilizzando il `tools/list` metodo. APIs `tools/call`

## Considerazioni
<a name="w2aac15c11c11c34c11b7"></a>

Le seguenti considerazioni potrebbero influire sull'utilizzo dell'aggiunta di una fase come destinazione a un Gateway: AgentCore 
+ È necessario disporre già di un AgentCore Gateway.
+ Sono supportati solo APIs i REST pubblici.
+ L'endpoint predefinito dell'API non può essere disabilitato.
+ Per ogni metodo dell'API deve essere definito un [nome di operazione](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html#apigw-PutMethod-request-operationName) oppure è necessario creare un nome sostitutivo quando si aggiunge lo stage come destinazione. Questo nome viene utilizzato come nome dello strumento utilizzato dagli agenti per interagire con il metodo.
+ È possibile utilizzare `API_KEY` tipi di provider di `GATEWAY_IAM_ROLE` credenziali per Outbound Auth per consentire al gateway di accedere all'API. `NO_AUTH` Il provider di `API_KEY` credenziali è definito da Gateway. AgentCore Puoi utilizzare la tua chiave API Gateway esistente. Per ulteriori informazioni, consulta [Configurazione dell'autenticazione in uscita](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-outbound-auth.html).
+ Se utilizzi un pool di utenti Amazon Cognito o un autorizzatore Lambda per controllare l'accesso alla tua API, i client MCP non possono accedervi.
+ L'API deve trovarsi nello stesso account e nella stessa regione del gateway. AgentCore 

## Aggiungi una fase di un'API come destinazione per un AgentCore gateway
<a name="mcp-server-api-gateway"></a>

La procedura seguente mostra come aggiungere una fase di un'API come destinazione per un AgentCore Gateway.

**Per aggiungere una fase di un'API come destinazione per un AgentCore Gateway**

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

1. Scegli un'API REST distribuita in una fase.

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

1. Scegli **Stage actions**, quindi scegli **Create MCP target.**

1. Per **AgentCore Gateway**, selezionate un AgentCore Gateway.

1. Per **Nome destinazione**, inserisci un nome di destinazione.

1. Per **Descrizione dell'oggetto**, inserisci una descrizione.

1. Conserva l'API e lo stage forniti.

1. Per **le risorse Select API**, seleziona le risorse della tua API a cui possono accedere gli agenti che utilizzano il tuo AgentCore Gateway.

   Se non selezioni una risorsa, un agente non può visualizzare la documentazione o richiamare l'endpoint. 

1. La combinazione della risorsa e del metodo sono le operazioni dello strumento. Se l'operazione non ha un nome, crea un nome override.

   È inoltre possibile definire un nome di operazione per un metodo al momento della creazione.

1. Per la **configurazione di autenticazione in uscita**, scegli **IAM Role**, **Nessuna autorizzazione** o **API** key.

1. Seleziona **Crea destinazione**.

Per visualizzare tutti i AgentCore gateway che hanno accesso al tuo APIs, scegli la sezione **MCP targets** nel pannello di navigazione principale. In questa sezione, puoi creare un target MCP per qualsiasi API nella tua regione distribuita in una fase. Scegli **Crea obiettivo MCP** e segui i passaggi precedenti.

Puoi anche visualizzare gli strumenti disponibili per il tuo target e modificarlo nella console AgentCore Gateway. Per ulteriori informazioni, consulta [Aggiungere obiettivi a un AgentCore gateway esistente](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-building-adding-targets.html).

# Eliminazione di una fase
<a name="how-to-delete-stage"></a>

Quando una fase non è più necessaria, puoi eliminarla per evitare di pagare per risorse inutilizzate. Le fasi seguenti mostrano come utilizzare la console API Gateway per eliminare una fase.

**avvertimento**  
 L'eliminazione di una fase potrebbe rendere inutilizzabile parte o tutta l'API corrispondente per i chiamanti dell'API. L'eliminazione di una fase non può essere annullata, tuttavia è possibile creare nuovamente una fase e associarla alla stessa distribuzione. 

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

1. Scegliere una REST API.

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

1. Nel riquadro **Fasi** scegli la fase che vuoi eliminare, quindi seleziona **Operazioni fase**, **Elimina fase**.

1. Quando richiesto, immetti **confirm**, quindi scegli **Elimina**.

# Configurazione dei tag per una fase API in Gateway API
<a name="set-up-tags"></a>

In API Gateway è possibile aggiungere un tag a una fase API, rimuoverlo o visualizzarlo. A tale scopo è possibile utilizzare la console API Gateway, la AWS CLI/l'SDK o l'API REST di API Gateway.

Una fase può anche ereditare i tag dalla sua API REST padre. Per ulteriori informazioni, consulta [Eredità dei tag nell'API di Amazon API Gateway V1](apigateway-tagging-supported-resources.md#apigateway-tagging-inheritance).

Per ulteriori informazioni sull'assegnazione di tag alle risorse dell'API Gateway, consulta [Tagging delle risorse API Gateway](apigateway-tagging.md).

**Topics**
+ [Configurare i tag per una fase API utilizzando la console si API Gateway](#set-up-tags-using-console)
+ [Configurazione dei tag per una fase API usando AWS CLI](#set-up-tags-using-cli)
+ [Impostare i tag per una fase API utilizzando l'API REST di API Gateway](#set-up-tags-using-api)

## Configurare i tag per una fase API utilizzando la console si API Gateway
<a name="set-up-tags-using-console"></a>

La procedura seguente descrive come configurare i tag per una fase API.

**Per configurare i tag per una fase API mediante la console API Gateway**

1. Accedere alla console API Gateway.

1. Seleziona un'API esistente o crea una nuova API che includa risorse, metodi e le integrazioni corrispondenti.

1. Seleziona una fase o distribuisci l'API in una nuova fase.

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

1. Seleziona la scheda **Tags** (Tag). Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

1. Scegliere **Gestisci tag**.

1. In **Editor di tag** scegli **Aggiungi nuovo tag**. Immetti una chiave di tag (ad esempio, `Department`) nella colonna **Key (Chiave)**, quindi immetti un valore di tag (ad esempio, `Sales`) nella colonna **Value (Valore)**. Per salvare il tag scegli **Salva**.

1.  Se necessario, ripeti la fase 5 per aggiungere altri tag alla fase API. Il numero massimo di tag per ogni fase è 50.

1.  Per rimuovere un tag esistente dalla fase scegli **Rimuovi**.

1. Se l'API è stata implementata in precedenza nella console API Gateway, sarà necessario ridistribuirla per rendere effettive le modifiche.

## Configurazione dei tag per una fase API usando AWS CLI
<a name="set-up-tags-using-cli"></a>

È possibile impostare i tag per una fase API usando AWS CLI con il comando [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) o il comando [tag-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/tag-resource.html). È possibile eliminare uno o più tag da una fase API eseguendo il comando [untag-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/untag-resource.html). 

Il comando [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) seguente aggiunge un tag durante la creazione di una fase `test`:

```
aws apigateway create-stage --rest-api-id abc1234 --stage-name test --description 'Testing stage' --deployment-id efg456 --tag Department=Sales
```

Il comando [tag-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/tag-resource.html) seguente aggiunge un tag a una fase `prod`:

```
aws apigateway tag-resource --resource-arn arn:aws:apigateway:us-east-2::/restapis/abc123/stages/prod --tags Department=Sales
```

Il comando [untag-resource](https://docs.aws.amazon.com/cli/latest/reference/apigateway/untag-resource.html) seguente rimuove il tag `Department=Sales` dalla fase `test`:

```
aws apigateway untag-resource --resource-arn arn:aws:apigateway:us-east-2::/restapis/abc123/stages/test --tag-keys Department 
```

## Impostare i tag per una fase API utilizzando l'API REST di API Gateway
<a name="set-up-tags-using-api"></a>

È possibile configurare i tag per una fase API utilizzando l'API REST di API Gateway con una delle operazioni seguenti:
+ Richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_TagResource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_TagResource.html) per aggiungere tag a una fase API.
+  Richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_UntagResource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UntagResource.html) per eliminare uno o più tag da una fase API.
+ Richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html) per aggiungere uno o più tag a una fase API in fase di creazione.

È anche possibile richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_GetTags.html](https://docs.aws.amazon.com/apigateway/latest/api/API_GetTags.html) per descrivere i tag in una fase API.

### Aggiunta di tag a una fase API
<a name="tag-a-stage-using-api"></a>

Dopo avere distribuito un'API (`m5zr3vnks7`) in una fase (`test`), è possibile aggiungere tag alla fase richiamando [https://docs.aws.amazon.com/apigateway/latest/api/API_TagResource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_TagResource.html). L'Amazon Resource Name (ARN) richiesto della fase (`arn:aws:apigateway:us-east-1::/restapis/m5zr3vnks7/stages/test`) deve avere codifica URL (`arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftest`). 

```
PUT /tags/arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftest

{
  "tags" : {
    "Department" : "Sales"
  }
}
```

 Puoi anche usare la richiesta precedente per aggiornare un tag esistente in un nuovo valore. 

È possibile aggiungere tag a una fase richiamando [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html) per la relativa creazione:

```
POST /restapis/<restapi_id>/stages

{
  "stageName" : "test",
  "deploymentId" : "adr134",
  "description" : "test deployment",
  "cacheClusterEnabled" : "true",
  "cacheClusterSize" : "500",
  "variables" : {
    "sv1" : "val1"
  },
  "documentationVersion" : "test",

  "tags" : {
    "Department" : "Sales",
    "Division" : "Retail"
  }
}
```

### Rimozione di tag da una fase API
<a name="untag-a-stage-using-api"></a>

 Per rimuovere il tag `Department` dalla fase, richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_UntagResource.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UntagResource.html): 

```
DELETE /tags/arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftest?tagKeys=Department
Host: apigateway.us-east-1.amazonaws.com
Authorization: ...
```

 Per rimuovere più di un tag, usare un elenco di chiavi di tag separate da virgole nell'espressione di query, ad esempio `?tagKeys=Department,Division,…`. 

### Descrizione dei tag per una fase API
<a name="get-tags-using-api"></a>

Per descrivere i tag esistenti per una fase specifica, richiamare [https://docs.aws.amazon.com/apigateway/latest/api/API_GetTags.html](https://docs.aws.amazon.com/apigateway/latest/api/API_GetTags.html):

```
GET /tags/arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftags
Host: apigateway.us-east-1.amazonaws.com
Authorization: ...
```

La risposta con esito positivo è simile a quella riportata di seguito.

```
200 OK

{
    "_links": {
        "curies": {
            "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-tags-{rel}.html",
            "name": "tags",
            "templated": true
        },
        "tags:tag": {
            "href": "/tags/arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftags"
        },
        "tags:untag": {
            "href": "/tags/arn%3Aaws%3Aapigateway%3Aus-east-1%3A%3A%2Frestapis%2Fm5zr3vnks7%2Fstages%2Ftags{?tagKeys}",
            "templated": true
        }
    },
    "tags": {
        "Department": "Sales"
    }
}
```

# Utilizzo delle variabili di fase per una REST API in Gateway API
<a name="stage-variables"></a>

Le variabili di fase sono coppie chiave-valore che è possibile definire come attributi di configurazione associati a una fase di implementazione di una REST API. Fungono da variabili di ambiente e possono essere utilizzate nei modelli di mappatura e configurazione dell'API. Con le fasi di implementazione in Gateway API, puoi gestire più fasi di rilascio per ogni API e utilizzare le variabili di fase per configurare una fase di implementazione dell'API per l'interazione con endpoint di backend diversi.

Le variabili di fase non sono destinate ad essere utilizzate per i dati sensibili, come le credenziali. Per trasferire dati sensibili alle integrazioni, usa un AWS Lambda autorizzatore. È possibile passare dati sensibili alle integrazioni nell'output del provider di autorizzazioni Lambda. Per ulteriori informazioni, consulta [Output da un sistema di autorizzazione Lambda di Gateway API](api-gateway-lambda-authorizer-output.md).

## Casi d'uso per le variabili di fase
<a name="use-cases"></a>

Di seguito sono riportati alcuni casi d'uso per le variabili di fase.

**Specificare un endpoint di backend diverso**  
L'API può passare una richiesta `GET` come proxy HTTP all'host web di backend. Puoi utilizzare una variabile di fase per far sì che, quando i chiamanti dell'API invocano l'endpoint di produzione, Gateway API chiami `example.com`. Quindi, quando i chiamanti dell'API invocano la fase beta, Gateway API chiama un host web diverso, ad esempio `beta.example.com`. Analogamente, le variabili di fase si possono utilizzare per specificare un nome di funzione AWS Lambda per ogni fase dell'API. Non puoi utilizzare una variabile di fase per impostare un endpoint di integrazione diverso, ad esempio per far sì che la richiesta `GET` punti a un'integrazione di proxy HTTP in una fase e a un'integrazione di proxy Lambda in un'altra fase.  
Quando si specifica un nome di funzione Lambda come valore della variabile di fase, è necessario configurare manualmente le autorizzazioni per la funzione Lambda. Quando specifichi una funzione Lambda nella console API Gateway, verrà visualizzato un AWS CLI comando per configurare le autorizzazioni appropriate. A tale scopo è inoltre possibile utilizzare il seguente AWS CLI comando.  

```
aws lambda add-permission --function-name "arn:aws:lambda:us-east-2:123456789012:function:my-function" --source-arn "arn:aws:execute-api:us-east-2:123456789012:api_id/*/HTTP_METHOD/resource" --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction
```

**Passare le informazioni utilizzando modelli di mappatura**  
Puoi accedere alle variabili di fase nei modelli di mappatura o passare i parametri di configurazione a AWS Lambda o al backend HTTP. Ad esempio, potrebbe essere necessario riutilizzare la stessa funzione Lambda per più fasi nell'API, ma la funzione deve leggere i dati da una tabella di Amazon DynamoDB diversa a seconda della fase. Nei modelli di mappatura che generano la richiesta per la funzione Lambda è possibile usare le variabili di fase per passare il nome della tabella a Lambda.

Per utilizzare una variabile di fase, è necessario prima configurare una variabile di fase e quindi assegnarle un valore. Ad esempio, per personalizzare l'endpoint di integrazione HTTP, crea prima la variabile di fase `url` e poi, nella richiesta di integrazione dell'API, inserisci il valore della variabile di fase **http://\$1\$1stageVariables.url\$1**. Questo valore indica ad API Gateway di sostituire la variabile di fase `${}` al runtime, a seconda della fase di esecuzione dell'API. Per ulteriori informazioni, consulta [Imposta le variabili di fase per REST APIs in API Gateway](how-to-set-stage-variables-aws-console.md). 

# Imposta le variabili di fase per REST APIs in API Gateway
<a name="how-to-set-stage-variables-aws-console"></a>

Questa sezione mostra come configurare le variabili di fase per due fasi di implementazione di un'API di esempio utilizzando la console Gateway Amazon API. Per capire come utilizzare le variabili di fase in Gateway API, ti consigliamo di seguire tutte le procedure illustrate in questa sezione.

## Prerequisiti
<a name="how-to-set-stage-variables-aws-console-prerequisites"></a>

Prima di iniziare, verifica che siano soddisfatti i seguenti requisiti preliminari: 
+ Devi disporre di un'API in API Gateway. Segui le istruzioni in [Sviluppa REST APIs in API Gateway](rest-api-develop.md).
+ Devi avere distribuito l'API almeno una volta. Segui le istruzioni in [Implementazione di REST API in Gateway API](how-to-deploy-api.md).
+ Devi aver creato la prima fase per un'API distribuita. Segui le istruzioni in [Creazione di una nuova fase](set-up-stages.md#how-to-create-stage-console).

  

## Invocazione di un endpoint HTTP mediante un'API con una variabile di fase
<a name="how-to-set-stage-variables-aws-console-http-endpoint"></a>

Questa procedura descrive come creare una variabile di fase per un endpoint HTTP e due fasi per l'API. Inoltre, vengono create le variabili di fase `url`, `stageName` e `function`, che vengono utilizzate nelle procedure seguenti di questa sezione.

**Per invocare un endpoint HTTP mediante un'API con una variabile di fase**

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

1. Crea un'API, quindi crea un metodo `GET` nella risorsa radice dell'API. Imposta il tipo di integrazione su **HTTP** e imposta l'**URL dell'endpoint** su **http://\$1\$1stageVariables.url\$1**.

1. Implementa l'API in una nuova fase denominata **beta**. 

1. Nel riquadro di navigazione scegli **Fasi**, quindi seleziona la fase **beta**. 

1. Nella scheda **Variabili di fase** scegli **Modifica**.

1. Scegli **Aggiungi variabile di fase**.

1. In **Nome**, inserisci **url**. In **Valore**, inserisci **httpbin.org/get**.

1. Scegli **Aggiungi variabile di fase**, quindi effettua le seguenti operazioni:

   In **Nome**, inserisci **stageName**. In **Valore**, inserisci **beta**.

1. Scegli **Aggiungi variabile di fase**, quindi effettua le seguenti operazioni:

   In **Nome**, inserisci **function**. In **Valore**, inserisci **HelloWorld**.

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

1.  Ora crea una seconda fase. Dal riquadro di navigazione **Fasi** scegli **Crea fase**. In **Stage name (Nome fase)** immettere **prod**. Seleziona un'implementazione recente da **Implementazione** e scegli **Crea**.

1.  Come per la fase **beta**, imposta le stesse tre variabili di fase (**url**, **version** e **function**) su valori diversi (rispettivamente **petstore-demo-endpoint.execute-api.com/petstore/pets**, **prod** e **HelloEveryone**). 

1. Nel riquadro di navigazione **Stages (Fasi)** scegli **beta**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API in un browser Web. Viene avviata la richiesta `GET` della fase **beta** nella risorsa radice dell'API. 
**Nota**  
Il collegamento **Invoke URL** (URL chiamata) punta alla risorsa radice dell'API nella rispettiva fase **beta**. L'immissione dell'URL in un browser Web chiama il metodo `GET` della fase **beta** nella risorsa radice. Se i metodi vengono definiti nelle risorse figlio e non nella risorsa radice stessa, scegliendo l'URL in un browser Web viene restituita la risposta di errore `{"message":"Missing Authentication Token"}`. In questo caso, devi aggiungere al collegamento **Invoke URL (URL chiamata)** il nome di una risorsa figlio specifica. 

1. La risposta che si ottiene dalla richiesta `GET` della fase **beta** è mostrata più avanti. Puoi verificare il risultato anche utilizzando un browser per accedere a **http://httpbin.org/get**. Questo valore è stato assegnato alla variabile `url` nella fase **beta**. Le due risposte sono identiche. 

1. Nel riquadro di navigazione **Stages (Fasi)** scegli la fase **prod**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API in un browser Web. Viene avviata la richiesta `GET` della fase **prod** nella risorsa radice dell'API. 

1. La risposta che si ottiene dalla richiesta `GET` della fase **prod** è mostrata più avanti. È possibile verificare il risultato utilizzando un browser per accedere a **http://.execute-api. petstore-demo-endpoint com/petstore/pets**. Questo valore è stato assegnato alla variabile `url` nella fase **prod**. Le due risposte sono identiche. 

## Passare i metadati specifici della fase in un backend HTTP
<a name="how-to-set-stage-variables-aws-console-stage-metadata"></a>

Questa procedura descrive come utilizzare un valore di variabile di fase in un'espressione di parametri di query per passare i metadati specifici delle fasi in un back-end HTTP. Utilizzeremo la variabile di fase `stageName` dichiarata nella procedura precedente.

**Per passare metadati specifici della fase in un backend HTTP**

1. Nel riquadro di navigazione **Resource (Risorsa)** scegli il metodo **GET**. 

   Per aggiungere un parametro della stringa di query all'URL del metodo, seleziona la scheda **Richiesta del metodo**, quindi nella sezione **Impostazioni della richiesta del metodo**, scegli **Modifica**. 

1. Scegli i **parametri della stringa di query URL** ed effettua le seguenti operazioni:

   1. Scegliere **Add query string (Aggiungi stringa di query)**.

   1. In **Nome**, inserisci **stageName**.

   1. Mantieni **Obbligatorio** e **Caching** disattivati.

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

1. Scegli la scheda **Richiesta di integrazione**, quindi seleziona **Modifica** nella sezione **Impostazioni della richiesta di integrazione**.

1. Per **URL dell'endpoint** aggiungi **?stageName=\$1\$1stageVariables.stageName\$1** al valore URL definito in precedenza, in modo che sia l'intero **URL dell'endpoint** sia **http://\$1\$1stageVariables.url\$1?stageName=\$1\$1stageVariables.stageName\$1**.

1. Scegli **Implementa API** e seleziona la fase **beta**.

1. Nel riquadro di navigazione principale scegli **Fasi**. Nel riquadro di navigazione **Stages (Fasi)** scegli **beta**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API in un browser Web. 
**Nota**  
 Qui usiamo la fase beta perché l'endpoint HTTP (come specificato dalla variabile `url`, "http://httpbin.org/get") accetta le espressioni dei parametri di query e le restituisce come oggetto `args` nella rispettiva risposta. 

1. Si ottiene la risposta seguente. `beta`, assegnato alla variabile di fase `stageName`, viene passata nel back-end come argomento `stageName`. 

      
![\[Risposta dal metodo GET dell'API con un endpoint HTTP utilizzando la variabile di fase url.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/stageVariables-new-console-invoke-beta-stage-with-url-and-stageName-response.png)

## Invocare una funzione Lambda attraverso un'API con una variabile di fase
<a name="how-to-set-stage-variables-aws-console-lambda-function"></a>

Questa procedura descrive come utilizzare una variabile di fase per chiamare una funzione Lambda come back-end dell'API. Utilizzerai la variabile di fase `function` dichiarata in [Invocazione di un endpoint HTTP mediante un'API con una variabile di fase](#how-to-set-stage-variables-aws-console-http-endpoint).

 Quando imposti una funzione Lambda come valore di una variabile di fase, usa il nome locale della funzione, se possibile includendo l'alias o la specifica della versione, come in **HelloWorld**, **HelloWorld:1** o **HelloWorld:alpha**. Non usare l'ARN della funzione (ad esempi, **arn:aws:lambda:us-east-1:123456789012:function:HelloWorld**). La console API Gateway assume il valore della variabile di fase per una funzione Lambda come nome di funzione non qualificato ed espande la variabile di fase specificata in un ARN. 

**Per invocare la funzione Lambda mediante un'API con una variabile di fase**

1. Crea una funzione Lambda denominata **HelloWorld** utilizzando il runtime Node.js predefinito. Il codice deve contenere quanto segue:

   ```
   export const handler = function(event, context, callback) {
       if (event.stageName)
           callback(null, 'Hello, World! I\'m calling from the ' + event.stageName + ' stage.');
       else
           callback(null, 'Hello, World! I\'m not sure where I\'m calling from...');
   };
   ```

   Per ulteriori informazioni su come creare una funzione Lambda, consulta [Nozioni di base sulla console REST API](getting-started-rest-new-console.md#getting-started-rest-new-console-create-function).

1. Nel riquadro **Risorse** seleziona **Crea risorsa**, quindi procedi come segue:

   1. Per **Percorso risorsa**, seleziona **/**.

   1. Per **Resource Name (Nome risorsa)** immetti **lambdav1**.

   1. Scegli **Crea risorsa**.

1. Scegli la risorsa **/lambdav1** e poi scegli **Crea metodo**.

   Successivamente, esegui queste operazioni:

   1. Per **Tipo di metodo** seleziona **GET**.

   1. Per **Tipo di integrazione** seleziona **Funzione Lambda**.

   1. Mantieni l'opzione **Integrazione proxy Lambda** disattivata.

   1. Per **Lambda function (Funzione Lambda)**, immetti `${stageVariables.function}`.  
![\[Creazione di un metodo GET integrato con una funzione Lambda come specificato dalla variabile di fase function\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/stageVariables-new-console-create-lambda-get-method.png)
**Suggerimento**  
Quando richiesto da **Aggiungi comando di autorizzazione**, copia il comando [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html). Esegui il comando per ciascuna funzione Lambda che sarà assegnata alla variabile di fase `function`. Ad esempio, se il valore di `$stageVariables.function` è `HelloWorld`, esegui il comando AWS CLI seguente:   

      ```
      aws lambda add-permission --function-name arn:aws:lambda:us-east-1:account-id:function:HelloWorld --source-arn arn:aws:execute-api:us-east-1:account-id:api-id/*/GET/lambdav1 --principal apigateway.amazonaws.com --statement-id statement-id-guid --action lambda:InvokeFunction
      ```
 In caso contrario, riceverai una risposta `500 Internal Server Error` quando verrà invocato il metodo. Sostituisci `${stageVariables.function}` con il nome della funzione Lambda assegnato alla variabile di fase.   
   

![\[AWS CLI comando per aggiungere il permesso alla funzione Lambda da invocare dal metodo creato.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/stageVariables-new-console-add-permission-to-lambda-function.png)


   1. Scegli **Crea metodo**.

1. Implementa l'API in entrambe le fasi **prod** e **beta**.

1. Nel riquadro di navigazione principale scegli **Fasi**. Nel riquadro di navigazione **Stages (Fasi)** scegli **beta**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API in un browser Web. Aggiungi **/lambdav1** all'URL prima di premere invio.

   Si ottiene la risposta seguente.

   ```
   "Hello, World! I'm not sure where I'm calling from..."
   ```

## Passaggio dei metadati specifici delle fasi a una funzione Lambda mediante una variabile di fase
<a name="pass-version-info-to-lambda-backend-with-stage-variable"></a>

Questa procedura descrive come utilizzare una variabile di fase per passare i metadata di configurazione specifici delle fasi in una funzione Lambda. Crei un metodo `POST` e un modello di mappatura di input per generare il payload utilizzando la variabile di fase `stageName` dichiarata precedentemente.

**Per passare i metadati specifici delle fasi a una funzione Lambda mediante una variabile di fase**

1. Scegli la risorsa **/lambdav1** e poi scegli **Crea metodo**.

   Successivamente, esegui queste operazioni:

   1. Per **Tipo di metodo** seleziona **POST**.

   1. Per **Tipo di integrazione** seleziona **Funzione Lambda**.

   1. Mantieni l'opzione **Integrazione proxy Lambda** disattivata.

   1. Per **Lambda function (Funzione Lambda)**, immetti `${stageVariables.function}`.

   1. Quando richiesto da **Aggiungi comando di autorizzazione**, copia il comando [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html). Esegui il comando per ciascuna funzione Lambda che sarà assegnata alla variabile di fase `function`.

   1. Scegli **Crea metodo**.

1. Scegli la scheda **Richiesta di integrazione**, quindi seleziona **Modifica** nella sezione **Impostazioni della richiesta di integrazione**.

1. Scegli **Modelli di mappatura**, quindi seleziona **Aggiungi modello di mappatura**.

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

1. Per **Corpo del modello** inserisci il seguente modello:

   ```
   #set($inputRoot = $input.path('$'))
   {
       "stageName" : "$stageVariables.stageName"
   }
   ```
**Nota**  
 In un modello di mappatura il riferimento a una variabile di fase deve essere racchiuso tra apici (come in `"$stageVariables.stageName"` o `"${stageVariables.stageName}"`), mentre altrove non si devono utilizzare gli apici (come in `${stageVariables.function}`). 

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

1. Implementa l'API in entrambe le fasi **beta** e **prod**.

1. Per utilizzare un client REST API per passare i metadati specifici della fase, procedi come segue:

   1. Nel riquadro di navigazione **Stages (Fasi)** scegli **beta**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API nel campo di input di un client REST API. Aggiungi **/lambdav1** prima di inviare la richiesta.

      Si ottiene la risposta seguente.

      ```
      "Hello, World! I'm calling from the beta stage."
      ```

   1. Nel riquadro di navigazione **Fasi** scegli **prod**. In **Dettagli fase** scegli l'icona Copia per copiare l'URL di richiamo dell'API, quindi immetti l'URL di richiamo dell'API nel campo di input di un client REST API. Aggiungi **/lambdav1** prima di inviare la richiesta.

      Si ottiene la risposta seguente.

      ```
      "Hello, World! I'm calling from the prod stage."
      ```

1. Per utilizzare la funzionalità **Test** per trasmettere i metadati specifici della fase, procedi come segue:

   1. Nel riquadro di navigazione **Risorse** scegli la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda.

   1. Per **function** immetti **HelloWorld**.

   1. Per **stageName** immetti **beta**.

   1. Scegli **Test (Esegui test)**. Non è necessario aggiungere un corpo alla richiesta `POST`.

      Si ottiene la risposta seguente.

      ```
      "Hello, World! I'm calling from the beta stage."
      ```

   1. Puoi ripetere i passaggi precedenti per testare la fase **Prod**. Per **stageName** immetti **Prod**.

      Si ottiene la risposta seguente.

      ```
      "Hello, World! I'm calling from the prod stage."
      ```

# Riferimento alle variabili di fase API Gateway per REST APIs in API Gateway
<a name="aws-api-gateway-stage-variables-reference"></a>

 È possibile usare le variabili di fase di API Gateway nei casi seguenti.

## Espressioni di mappatura dei parametri
<a name="stage-variables-in-parameter-mapping-expressions"></a>

Una variabile di fase può essere utilizzata in un'espressione di mappatura dei parametri per un parametro di intestazione di risposta o di richiesta del metodo API, senza alcuna sostituzione parziale. Nell'esempio che segue si fa riferimento alla variabile di fase senza il simbolo `$` e il simbolo `{...}` di chiusura. 
+ `stageVariables.<variable_name>`

## Modelli di mappatura
<a name="stage-variables-in-mapping-templates"></a>

 Una variabile di fase può essere utilizzata ovunque in un modello di mappatura, come mostrato negli esempi seguenti. 
+  `{ "name" : "$stageVariables.<variable_name>"}`
+ `{ "name" : "${stageVariables.<variable_name>}"}`

## Integrazione HTTP URIs
<a name="stage-variables-in-integration-HTTP-uris"></a>

Una variabile di fase può essere utilizzata come parte di un URL di integrazione HTTP, come mostrato negli esempi seguenti:
+ Un URI completo senza protocoll – `http://${stageVariables.<variable_name>}`
+ Un dominio completo – `http://${stageVariables.<variable_name>}/resource/operation`
+ Un sottodominio – `http://${stageVariables.<variable_name>}.example.com/resource/operation`
+ Un percorso – `http://example.com/${stageVariables.<variable_name>}/bar`
+ Una stringa di query – `http://example.com/foo?q=${stageVariables.<variable_name>}` 

## AWS integration URIs
<a name="stage-variables-in-integration-aws-uris"></a>

 Una variabile di fase può essere utilizzata come parte dell'azione AWS URI o dei componenti del percorso, come illustrato nell'esempio seguente.
+ `arn:aws:apigateway:<region>:<service>:${stageVariables.<variable_name>}`

## AWS integrazione URIs (funzioni Lambda)
<a name="stage-variables-in-integration-lambda-functions"></a>

 Una variabile di fase può essere utilizzata al posto del nome o della versione/dell'alias di una funzione Lambda, come mostrato negli esempi seguenti. 
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:${stageVariables.<function_variable_name>}/invocations`
+ `arn:aws:apigateway:<region>:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account_id>:function:<function_name>:${stageVariables.<version_variable_name>}/invocations`

**Nota**  
Per utilizzare una variabile di fase per una funzione Lambda, la funzione deve essere nello stesso account dell'API. Le variabili di fase non supportano le funzioni Lambda tra più account.

## Bacino d’utenza di Amazon Cognito
<a name="stage-variables-in-integration-lambda-functions"></a>

Una variabile di fase può essere utilizzata al posto di un pool di utenti di Amazon Cognito per un sistema di autorizzazione `COGNITO_USER_POOLS`.
+ `arn:aws:cognito-idp:<region>:<account_id>:userpool/${stageVariables.<variable_name>}`

## AWS credenziali di integrazione
<a name="stage-variables-in-integration-aws-credentials"></a>

 Una variabile stage può essere utilizzata come parte dell'ARN delle AWS credenziali utente/ruolo, come illustrato nell'esempio seguente. 
+  `arn:aws:iam::<account_id>:${stageVariables.<variable_name>}` 

# Configurare la distribuzione di una release Canary di API Gateway
<a name="canary-release"></a>

Con [release Canary](https://martinfowler.com/bliki/CanaryRelease.html) si intende una strategia di sviluppo software in cui una nuova versione di un'API o di un altro software viene distribuita a scopo di test e contemporaneamente la versione di base rimane distribuita come release di produzione per le normali operazioni nella stessa fase. In questa documentazione la versione di base viene detta release di produzione. È possibile applicare una release Canary a qualsiasi versione non di produzione a scopo di test.

Nella distribuzione di una release Canary, il traffico API totale viene separato in modo casuale tra release di produzione e release Canary, in base a un rapporto preconfigurato. In genere, la release Canary riceve una piccola percentuale di traffico API e il resto viene assegnato alla release di produzione. Le caratteristiche API aggiornate sono visibili solo al traffico API nella release Canary. Puoi modificare la percentuale di traffico nella release Canary per ottimizzare le prestazioni o la copertura dei test. 

Mantenendo limitato il traffico nella release Canary e la selezione casuale, la maggior parte degli utenti non riscontra conseguenze negative a causa di bug potenziali nella nuova versione e nessun utente riscontra conseguenze negative durature.

Se i parametri di test soddisfano i requisiti, puoi promuovere la release Canary a release di produzione e disabilitarne la distribuzione. Le nuove caratteristiche vengono così rese disponibili nella fase di produzione. 

**Topics**
+ [Distribuzione di una release Canary in API Gateway](#api-gateway-canary-release-deployment-overview)
+ [Creazione di una distribuzione di una release Canary](create-canary-deployment.md)
+ [Aggiornamento di una release Canary](update-canary-deployment.md)
+ [Promozione di una release Canary](promote-canary-deployment.md)
+ [Disabilitazione di una release Canary](delete-canary-deployment.md)

## Distribuzione di una release Canary in API Gateway
<a name="api-gateway-canary-release-deployment-overview"></a>

 In API Gateway la distribuzione di una release Canary utilizza la fase di distribuzione per il rilascio di produzione di una versione di base di un'API e collega alla fase una release Canary per le versioni dell'API nuove rispetto alla versione di base. La fase è associata alla distribuzione iniziale e la release Canary alle distribuzioni successive. All'inizio, sia la fase che la release Canary puntano alla stessa versione API. In questa sezione i termini fase e release di produzione vengono usati in modo intercambiabile, come pure i termini Canary e release Canary.

Per distribuire un'API con una release Canary devi creare una distribuzione della release Canary aggiungendo le [impostazioni Canary](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) alla [fase](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) di una [distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Deployment.html) standard. Le impostazioni Canary descrivono la release Canary sottostante e la fase rappresenta la release di produzione dell'API nella distribuzione. Per aggiungere le impostazioni Canary, imposta `canarySettings` nella fase di distribuzione e specifica quanto segue: 
+  Un ID di distribuzione, inizialmente identico all'ID della distribuzione della versione di base impostato nella fase. 
+  Una [percentuale di traffico API](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#percentTraffic), con un valore compreso tra 0,0 e 100,0 inclusi, per la release Canary. 
+  [Variabili di fase per la release Canary](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#stageVariableOverrides) che possono sovrascrivere le variabili di fase per la release di produzione. 
+  L'[uso della cache dello stage](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#useStageCache) per le richieste Canary, se [useStageCache](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#useStageCache)è impostata e la memorizzazione nella cache delle API è abilitata sullo stage.

 Dopo l'abilitazione di una release Canary, la fase di distribuzione non può essere associata a un'altra distribuzione di una release non Canary fino a quando la release Canary non viene disabilitata e le impostazioni Canary non vengono rimosse dalla fase. 

Quando si abilita il logging delle esecuzioni API, per la release Canary vengono generati log e parametri per tutte le richieste Canary. Vengono segnalate a un gruppo di log CloudWatch Logs in fase di produzione e a un gruppo di log Logs specifico per Canary CloudWatch . Lo stesso vale per il logging degli accessi. I log specifici della release Canary sono utili per convalidare le nuove modifiche dell'API e stabilire se accettare le modifiche e promuovere la release Canary alla fase di produzione o se eliminare le modifiche e annullare la release Canary nella fase di produzione.

Il gruppo di log delle esecuzioni della fase di produzione è denominato `API-Gateway-Execution-Logs/{rest-api-id}/{stage-name}` e il gruppo di log delle esecuzioni della release Canary è denominato `API-Gateway-Execution-Logs/{rest-api-id}/{stage-name}/Canary`. Per il logging degli accessi, è necessario creare un nuovo gruppo di log o sceglierne uno esistente. Al nome del gruppo di log degli accessi della release Canary scelto viene aggiunto il suffisso `/Canary`. 

Una versione canary può utilizzare lo stage cache, se abilitato, per memorizzare le risposte e utilizzare le voci memorizzate nella cache per restituire i risultati alle successive richieste Canary, entro un periodo preconfigurato (TTL). time-to-live 

Nella distribuzione di una release Canary, la release di produzione e la release Canary dell'API possono essere associate alla stessa versione o a versioni diverse. Quando sono associate a versioni diverse, le risposte per le richieste di produzione e Canary vengono memorizzate nella cache separatamente e la cache di fase restituisce i risultati corrispondenti per le richieste di produzione e Canary. Quando la release di produzione e la release Canary sono associate alla stessa distribuzione, la cache di fase usa una singola chiave cache per entrambi i tipi di richieste e restituisce la stessa risposta per le stesse richieste dalla release di produzione e dalla release Canary. 

# Creazione di una distribuzione di una release Canary
<a name="create-canary-deployment"></a>

Puoi creare una distribuzione di una release Canary quando distribuisci l'API con [impostazioni Canary](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDeployment.html#canarySettings) come input aggiuntivo all'operazione di [creazione della distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDeployment.html). 

Puoi anche creare una distribuzione di una release Canary da una distribuzione non Canary esistente effettuando una richiesta [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) per aggiungere le impostazioni Canary nella fase.

Quando crei una distribuzione di una release non Canary, puoi specificare un nome di fase non esistente. Se la fase specificata non esiste, API Gateway la crea. Non puoi tuttavia specificare un nome di fase non esistente quando crei una distribuzione di una release Canary. In questo caso si verificherà un errore e API Gateway non creerà una distribuzione della release Canary. 

 Puoi creare una distribuzione Canary Release in API Gateway utilizzando la console API Gateway AWS CLI, o un AWS SDK.

**Topics**
+ [Creare una distribuzione Canary utilizzando la console API Gateway](#create-canary-deployment-using-console)
+ [Crea una distribuzione Canary utilizzando il AWS CLI](#create-canary-deployment-using-cli)

## Creare una distribuzione Canary utilizzando la console API Gateway
<a name="create-canary-deployment-using-console"></a>

Per usare la console API Gateway per creare una distribuzione di una release Canary, segui queste istruzioni:<a name="to-create-canary-release-on-new-deployment"></a>

**Per creare la distribuzione di una release Canary iniziale**

1.  Accedere alla console API Gateway.

1.  Crea una nuova REST API o scegline una esistente.

1.  Nel riquadro di navigazione principale scegli **Risorse**, quindi seleziona **Distribuisci l'API**. Seguire le istruzioni visualizzate sullo schermo in **Deploy API (Distribuisci API)** per distribuire l'API in una nuova fase. 

   Al momento, l'API è stata distribuita in una fase della release di produzione. Configura quindi le impostazioni Canary nella fase e, se necessario, abilita il caching, imposta le variabili di fase o configura i log degli accessi o delle esecuzioni dell'API.

1.  **Per abilitare la memorizzazione nella cache delle API o associare un ACL AWS WAF web allo stage, nella sezione **Dettagli dello stage**, scegli Modifica.** Per ulteriori informazioni, consulta [Impostazioni della cache per REST APIs in API Gateway](api-gateway-caching.md) o [Per associare un ACL AWS WAF Web a uno stadio API Gateway API utilizzando la console API Gateway](apigateway-control-access-aws-waf.md#apigateway-control-access-aws-waf-console).

1.  Per configurare la registrazione degli accessi o delle esecuzioni, scegli **Modifica** nella sezione **Log e tracciamento** e segui le istruzioni visualizzate sullo schermo. Per ulteriori informazioni, consulta [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md).

1. Per impostare le variabili di fase, scegli la scheda **Variabili di fase** e segui le istruzioni visualizzate sullo schermo per aggiungere o modificare le variabili di fase. Per ulteriori informazioni, consulta [Utilizzo delle variabili di fase per una REST API in Gateway API](stage-variables.md).

1.  Scegli la scheda **Canary**, quindi seleziona **Crea Canary**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda **Canary**.

1.  In **Impostazioni di Canary**, inserisci in **Canary** la percentuale di richieste da deviare al Canary.

1. Se lo desideri, seleziona **Cache della fase** per attivare il caching per la release Canary. La cache non è disponibile per la release Canary fino a quando non viene abilitato il caching dell'API.

1. Per sovrascrivere le variabili di fase esistenti, inserisci in **Sostituzione canary** un nuovo valore per la variabile di fase.

Dopo l'inizializzazione della release Canary nella fase di distribuzione, puoi modificare l'API e testare le modifiche. Puoi ridistribuire l'API nella stessa fase in modo che sia la versione di base che quella aggiornata siano accessibili tramite la stessa fase. Di seguito viene descritto come fare. <a name="to-deploy-latest-api-to-canary-release"></a>

**Per distribuire la versione API più recente in una release Canary**

1.  Con ogni aggiornamento dell'API scegli **Distribuisci l'API.**

1.  In **Distribuisci l'API** scegli la fase contenente un canary nell'elenco a discesa **Fase della distribuzione**. 

1.  (Facoltativo) Immetti una descrizione in **Descrizione distribuzione**. 

1.  Scegliere **Deploy (Distribuisci)** per inviare la versione API più recente alla release Canary.

1.  Se lo desideri, riconfigura le impostazioni della fase, i log o le impostazioni Canary, come descritto in [Per creare la distribuzione di una release Canary iniziale](#to-create-canary-release-on-new-deployment).

 La release Canary punta ora alla versione più recente, mentre la release di produzione continua a puntare alla versione iniziale dell'API. Per [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) è ora presente un nuovo valore **deploymentId**, mentre la fase ha ancora il valore [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId) iniziale. In background la console chiama [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html).

## Crea una distribuzione Canary utilizzando il AWS CLI
<a name="create-canary-deployment-using-cli"></a>

**Per creare una distribuzione canary per una nuova fase**

1. Utilizza il seguente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) per creare un’implementazione con due variabili di fase, ma senza un canary:

   ```
   aws apigateway create-deployment \
       --variables sv0=val0,sv1=val1 \
       --rest-api-id abcd1234 \
       --stage-name 'prod'
   ```

   L'output sarà simile al seguente:

   ```
   {
       "id": "du4ot1", 
       "createdDate": 1511379050
   }
   ```

1. Utilizza il seguente comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) per creare una distribuzione canary per la fase `prod`:

   ```
   aws apigateway create-deployment \
       --rest-api-id abcd1234 \
       --canary-settings percentTraffic=10.5,stageVariableOverrides={sv1='val2',sv2='val3'},useStageCache=false \
       --stage-name 'prod'
   ```

   L'output sarà simile al seguente:

   ```
   {
       "id": "a6rox0", 
       "createdDate": 1511379433
   }
   ```

   Il valore `id` della distribuzione risultante identifica la versione di verifica dell'API per la release Canary. Di conseguenza, la fase associata è abilitata per la release Canary.

1. (Facoltativo) Utilizza il seguente comando [get-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-stage.html) per visualizzare la rappresentazione della fase:

   ```
   aws apigateway get-stage --rest-api-id acbd1234 --stage-name prod
   ```

   Di seguito è illustrata una rappresentazione dell'oggetto `Stage` come output del comando:

   ```
   {
       "stageName": "prod", 
       "variables": {
           "sv0": "val0", 
           "sv1": "val1"
       }, 
       "cacheClusterEnabled": false, 
       "cacheClusterStatus": "NOT_AVAILABLE", 
       "deploymentId": "du4ot1", 
       "lastUpdatedDate": 1511379433, 
       "createdDate": 1511379050, 
       "canarySettings": {
           "percentTraffic": 10.5, 
           "deploymentId": "a6rox0", 
           "useStageCache": false, 
           "stageVariableOverrides": {
               "sv2": "val3", 
               "sv1": "val2"
           }
       }, 
       "methodSettings": {}
   }
   ```

   In questo esempio la versione di base dell'API usa le variabili di fase `{"sv0":val0", "sv1":val1"}`, mentre la versione di test usa le variabili di fase `{"sv1":val2", "sv2":val3"}`. Sia la release di produzione che la release Canary usano la stessa variabile di fase `sv1`, ma con valori diversi, `val1` e `val2`, rispettivamente. La variabile di fase `sv0` viene usata unicamente nella release di produzione e la variabile di fase `sv2` viene usata unicamente nella release Canary. 

È anche possibile creare una distribuzione di rilascio canary da un’implementazione standard esistente aggiornando la fase per abilitare un canary.

**Per creare una distribuzione di rilascio canary da un’implementazione esistente**

1. Utilizza il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) per creare un’implementazione senza un canary:

   ```
   aws apigateway create-deployment \
       --variables sv0=val0,sv1=val1 \  
       --rest-api-id abcd1234 \
       --stage-name 'beta'
   ```

1. Utilizza il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) per aggiornare la fase e abilitare un canary:

   ```
   aws apigateway update-stage \
       --rest-api-id abcd1234 \
       --stage-name 'beta' \
       --patch-operations '[{
               "op": "replace",
               "value": "0.0",
               "path": "/canarySettings/percentTraffic"
           }, {
               "op": "copy",
               "from": "/canarySettings/stageVariableOverrides",
               "path": "/variables"
           }, {
               "op": "copy",
               "from": "/canarySettings/deploymentId",
               "path": "/deploymentId"
           }]'
   ```

   L'output sarà simile al seguente:

   ```
   {
       "stageName": "beta", 
       "variables": {
           "sv0": "val0", 
           "sv1": "val1"
       }, 
       "cacheClusterEnabled": false, 
       "cacheClusterStatus": "NOT_AVAILABLE", 
       "deploymentId": "cifeiw", 
       "lastUpdatedDate": 1511381930, 
       "createdDate": 1511380879, 
       "canarySettings": {
           "percentTraffic": 10.5, 
           "deploymentId": "cifeiw", 
           "useStageCache": false, 
           "stageVariableOverrides": {
               "sv2": "val3", 
               "sv1": "val2"
           }
       }, 
       "methodSettings": {}
   }
   ```

   Poiché è stato abilitato un canary in una versione esistente dell’API, sia il rilascio di produzione (`Stage`) sia il rilascio canary (`canarySettings`) puntano alla stessa implementazione. Dopo aver modificato l'API e averla distribuita di nuovo in questa fase, la nuova versione sarà nella release Canary, mentre la versione di base rimane nella release di produzione. Ciò si manifesta nell'evoluzione della fase quando il valore `deploymentId` nella release Canary viene aggiornato al valore `id` della nuova distribuzione e il valore `deploymentId` nella release di produzione rimane invariato.

# Aggiornamento di una release Canary
<a name="update-canary-deployment"></a>

 Dopo la distribuzione di una release Canary, è possibile modificare la percentuale di traffico nella release Canary oppure abilitare o disabilitare l'uso di una cache di fase per ottimizzare le prestazioni di test. È anche possibile modificare le variabili di fase usate nella release Canary quando il contesto di esecuzione viene aggiornato. Per eseguire tali aggiornamenti, chiama l'operazione [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) con i nuovi valori in [canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings). 

Puoi aggiornare una versione Canary utilizzando la console API Gateway, il comando AWS CLI [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) o un SDK. AWS 

**Topics**
+ [Aggiornare una release Canary utilizzando la console API Gateway](#update-canary-deployment-using-console)
+ [Aggiorna una versione Canary utilizzando il AWS CLI](#update-canary-deployment-using-cli)

## Aggiornare una release Canary utilizzando la console API Gateway
<a name="update-canary-deployment-using-console"></a>

Per usare la console API Gateway per aggiornare le impostazioni Canary esistenti in una fase, esegui queste operazioni:

**Per aggiornare le impostazioni di Canary esistenti**

1.  Accedi alla console Gateway API e scegli una REST API esistente.

1.  Nel riquadro di navigazione principale scegli **Fasi**, quindi seleziona una fase esistente.

1.  Seleziona la scheda **Canary**, quindi scegli **Modifica**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda **Canary**. 

1.  Aggiorna il campo **Distribuzione richiesta** aumentando o diminuendo il valore percentuale scegliendo un numero compreso tra 0,0 e 100,0 inclusi. 

1.  Seleziona o deseleziona la casella di controllo **Cache della fase**. 

1.  Aggiungi, rimuovi o modifica le **Variabili di fase di Canary**.

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

## Aggiorna una versione Canary utilizzando il AWS CLI
<a name="update-canary-deployment-using-cli"></a>

Per usare AWS CLI per aggiornare un canary, usa il [https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html)comando e modifica l'operazione di patch per ogni parametro del canary.

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna se il canary utilizza la cache della fase:

```
aws apigateway update-stage \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations op=replace,path=/canarySettings/useStageCache,value=true
```

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna la percentuale di traffico del canary:

```
aws apigateway update-stage \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations op=replace,path=/canarySettings/percentTraffic,value=25.0
```

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna le variabili di fase. L’esempio mostra come creare una nuova variabile di fase denominata `newVar`, sostituire la variabile di fase `var2` e rimuovere la variabile di fase `var1`:

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}'  \
    --patch-operations '[{                                      
        "op": "replace",                                        
        "path": "/canarySettings/stageVariableOverrides/newVar", 
        "value": "newVal"                                      
      }, { 
        "op": "replace",                                        
        "path": "/canarySettings/stageVariableOverrides/var2",   
        "value": "val4"                                        
      }, {                                                      
        "op": "remove",                                         
        "path": "/canarySettings/stageVariableOverrides/var1"    
      }]'
```

È possibile aggiornare tutti gli elementi precedenti combinando le operazioni in un singolo valore `patch-operations`:

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id} \
    --stage-name '{stage-name}' \
    --patch-operations '[{                                       
        "op": "replace",                                         
        "path": "/canarySettings/percentTraffic",                        
        "value": "20.0"                                          
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/useStageCache",                        
        "value": "true"                                          
    }, {                                                         
        "op": "remove",                                          
        "path": "/canarySettings/stageVariableOverrides/var1"    
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/stageVariableOverrides/newVar", 
        "value": "newVal"                                        
    }, {                                                         
        "op": "replace",                                         
        "path": "/canarySettings/stageVariableOverrides/val2",   
        "value": "val4"                                          
      }]'
```



# Promozione di una release Canary
<a name="promote-canary-deployment"></a>

Quando si promuove una release canary, questa sostituisce le impostazioni correnti della fase. La promozione di una release Canary non comporta la disabilitazione della release Canary nella fase. Per disabilitare una release Canary, è necessario rimuovere le impostazioni Canary nella fase. Per promuovere una release canary, procedi come descritto di seguito.
+ Reimpostazione dell'[ID distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#deploymentId) della fase con le impostazioni dell'[ID distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) della release Canary. Questa operazione comporta l'aggiornamento dello snapshot API della fase con lo snapshot della release Canary e l'impostazione della versione di test come release di produzione.
+ Aggiornamento delle variabili di fase con le variabili di fase della release Canary, se presenti. Questa operazione comporta l'aggiornamento del contesto di esecuzione dell'API della fase con quello della release Canary. Senza questo aggiornamento, la nuova versione API può produrre risultati imprevisti se la versione di test usa variabili di fase diverse o valori diversi delle variabili di fase esistenti.
+ Impostazione della percentuale del traffico della release Canary su 0,0%.

**Topics**
+ [Promuovere una release Canary utilizzando la console API Gateway](#promote-canary-release-deployment-console)
+ [Promuovi una versione canaria usando il AWS CLI](#promote-canary-release-cli)

## Promuovere una release Canary utilizzando la console API Gateway
<a name="promote-canary-release-deployment-console"></a>

Per usare la console API Gateway per promuovere una distribuzione di una release Canary, esegui queste operazioni:

**Per promuovere l'implementazione di una release Canary**

1.  Accedi alla console API Gateway e seleziona un'API esistente nel riquadro di navigazione principale.

1.  Nel riquadro di navigazione principale scegli **Fasi**, quindi seleziona una fase esistente.

1.  Scegli la scheda **Canary**.

1.  Scegli **Promuovi Canary**.

1.  Verifica le modifiche da apportare e scegli **Promuovi Canary**.

Dopo la promozione, la release di produzione fa riferimento alla stessa versione API (**deploymentId**) della release Canary. È possibile verificarlo utilizzando il. AWS CLI Per un esempio, consulta [Promuovi una versione canaria usando il AWS CLI](#promote-canary-release-cli). 

## Promuovi una versione canaria usando il AWS CLI
<a name="promote-canary-release-cli"></a>

Per promuovere una versione canary alla versione di produzione utilizzando AWS CLI i comandi, chiamate il `update-stage` comando per copiare il file canary-associato `deploymentId` a quello associato allo stage`deploymentId`, per reimpostare la percentuale di traffico canarino a zero (`0.0`) e per copiare qualsiasi variabile dello stage canary-bound su quelle corrispondenti. 

Supponiamo di avere una distribuzione di rilascio di Canary, descritta da una fase simile alla seguente: 

```
{
    "_links": {
        ...
    },
    "accessLogSettings": {
        ...
    },
    "cacheClusterEnabled": false,
    "cacheClusterStatus": "NOT_AVAILABLE",
    "canarySettings": {
        "deploymentId": "eh1sby",
        "useStageCache": false,
        "stageVariableOverrides": {
            "sv2": "val3",
            "sv1": "val2"
        },
        "percentTraffic": 10.5
    },
    "createdDate": "2017-11-20T04:42:19Z",
    "deploymentId": "nfcn0x",
    "lastUpdatedDate": "2017-11-22T00:54:28Z",
    "methodSettings": {
        ...
    },
    "stageName": "prod",
    "variables": {
        "sv1": "val1"
    }
}
```

Utilizza il seguente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) per promuovere il canary:

```
aws apigateway update-stage  \
    --rest-api-id {rest-api-id}  \
    --stage-name '{stage-name}'  \
    --patch-operations '[{                                
        "op": "replace",                                  
        "value": "0.0",                                    
        "path": "/canarySettings/percentTraffic"         
      }, {                                                
        "op": "copy",                                     
        "from": "/canarySettings/stageVariableOverrides", 
        "path": "/variables"                             
      }, {                                                
        "op": "copy",                                     
        "from": "/canarySettings/deploymentId",           
        "path": "/deploymentId"                           
      }]'
```

L'output sarà simile al seguente:

```
{
    "_links": {
        ...
    },
    "accessLogSettings": {
        ...
    },
    "cacheClusterEnabled": false,
    "cacheClusterStatus": "NOT_AVAILABLE",
    "canarySettings": {
        "deploymentId": "eh1sby",
        "useStageCache": false,
        "stageVariableOverrides": {
            "sv2": "val3",
            "sv1": "val2"
        },
        "percentTraffic": 0
    },
    "createdDate": "2017-11-20T04:42:19Z",
    "deploymentId": "eh1sby",
    "lastUpdatedDate": "2017-11-22T05:29:47Z",
    "methodSettings": {
        ...
    },
    "stageName": "prod",
    "variables": {
        "sv2": "val3",
        "sv1": "val2"
    }
}
```

La promozione di una release canary nella fase non disabilita il canary e l'implementazione rimane un'implementazione di release canary. Per renderla una normale distribuzione di produzione, è necessario disabilitare le impostazioni Canary. Per ulteriori informazioni su come disabilitare una distribuzione di release Canary, consulta [Disabilitazione di una release Canary](delete-canary-deployment.md).

# Disabilitazione di una release Canary
<a name="delete-canary-deployment"></a>

Per disabilitare l'implementazione di una release Canary, è necessario impostare [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) su null per rimuoverla dalla fase. 

Puoi disabilitare una distribuzione Canary Release utilizzando la console API Gateway AWS CLI, o un AWS SDK.

**Topics**
+ [Disabilitazione di una release Canary utilizzando la console Gateway API](#delete-canary-release-console)
+ [Disattiva una versione canary usando il AWS CLI](#delete-canary-release-cli)

## Disabilitazione di una release Canary utilizzando la console Gateway API
<a name="delete-canary-release-console"></a>

Per usare la console Gateway API per disabilitare l'implementazione di una release Canary, procedi come segue:

**Per disabilitare l'implementazione di una release Canary**

1. Accedi alla console Gateway API e seleziona un'API esistente nel riquadro di navigazione principale.

1. Nel riquadro di navigazione principale scegli **Fasi**, quindi seleziona una fase esistente.

1.  Scegli la scheda **Canary**.

1.  Scegli **Elimina**.

1.  Confermare che si desidera eliminare la release Canary scegliendo **Delete (Elimina)**.

Di conseguenza, la proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) diventa `null` e viene rimossa dalla [fase](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) di distribuzione. Puoi verificarlo utilizzando. AWS CLI Per un esempio, consulta [Disattiva una versione canary usando il AWS CLI](#delete-canary-release-cli).

## Disattiva una versione canary usando il AWS CLI
<a name="delete-canary-release-cli"></a>

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente disattiva la distribuzione di rilascio canary:

```
aws apigateway update-stage \
    --rest-api-id abcd1234 \
    --stage-name canary \
    --patch-operations '[{"op":"remove", "path":"/canarySettings"}]'
```

L'output sarà simile al seguente:

```
{
    "stageName": "prod", 
    "accessLogSettings": {
        ...
    }, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": "nfcn0x", 
    "lastUpdatedDate": 1511309280, 
    "createdDate": 1511152939, 
    "methodSettings": {
        ...
    }
}
```

 Come illustrato nell’output, la proprietà [canarySettings](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#canarySettings) non è più presente nella [fase](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) della distribuzione di rilascio canary disabilitata.

# Aggiornamenti a REST APIs che richiedono una ridistribuzione
<a name="updating-api"></a>

Gestire un'API significa visualizzare, aggiornare ed eliminare le configurazioni API esistenti. Puoi gestire un'API utilizzando la console API Gateway, AWS CLI CloudFormation, un SDK o l'API REST API Gateway. L'aggiornamento di un'API implica la modifica di determinate proprietà delle risorse o delle impostazioni di configurazione dell'API. Gli aggiornamenti delle risorse richiedono una nuova implementazione dell'API, operazione non necessaria per gli aggiornamenti di configurazione. 

La tabella seguente descrive le risorse API che richiedono una nuova implementazione dell'API quando vengono aggiornate. 


| Risorsa | Note | 
| --- | --- | 
| [ApiKey](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html) | Per le proprietà applicabili e le operazioni supportate, consulta [apikey:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateApiKey.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [Authorizer](https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html) | Per le proprietà applicabili e le operazioni supportate, consulta [authorizer:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAuthorizer.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
|  [disableExecuteApiEndpoint](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html#apigw-UpdateRestApi-response-disableExecuteApiEndpoint) | L’aggiornamento richiede la modifica di una fase per l’API, ad esempio una nuova implementazione dell’API in una fase. | 
| [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html) | Per le proprietà applicabili e le operazioni supportate, consulta [documentationpart:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDocumentationPart.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [DocumentationVersion](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html) | Per le proprietà applicabili e le operazioni supportate, consulta [documentationversion:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDocumentationVersion.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html) | Per le proprietà applicabili e le operazioni supportate, consulta [gatewayresponse:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateGatewayResponse.html#remarks). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [Integration](https://docs.aws.amazon.com/apigateway/latest/api/API_Integration.html) |  Per le proprietà applicabili e le operazioni supportate, consulta [integration:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateIntegration.html). L'aggiornamento richiede la ridistribuzione dell'API.  | 
| [IntegrationResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_IntegrationResponse.html) | Per le proprietà applicabili e le operazioni supportate, consulta [integrationresponse:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateIntegrationResponse.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [Metodo](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) | Per le proprietà applicabili e le operazioni supportate, consulta [method:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html) | Per le proprietà applicabili e le operazioni supportate, consulta [methodresponse:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethodResponse.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [Modello](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html) | Per le proprietà applicabili e le operazioni supportate, consulta [model:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateModel.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [RequestValidator](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html) | Per le proprietà applicabili e le operazioni supportate, consulta [requestvalidator:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRequestValidator.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [Risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) | Per le proprietà applicabili e le operazioni supportate, consulta [resource:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateResource.html). L'aggiornamento richiede la ridistribuzione dell'API. | 
| [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html) | Per le proprietà applicabili e le operazioni supportate, consulta [restapi:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html). L'aggiornamento richiede la ridistribuzione dell'API. È inclusa la modifica delle policy di risorse. | 
| [VpcLink](https://docs.aws.amazon.com/apigateway/latest/api/API_VpcLink.html) | Per le proprietà applicabili e le operazioni supportate, consulta [vpclink:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateVpcLink.html). L'aggiornamento richiede la ridistribuzione dell'API. | 

La tabella seguente descrive le configurazioni API che non richiedono una nuova implementazione dell'API quando vengono aggiornate.


| Configurazione | Note | 
| --- | --- | 
| [Account](https://docs.aws.amazon.com/apigateway/latest/api/API_GetAccount.html) |  Per le proprietà applicabili e le operazioni supportate, consulta [account:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html). L'aggiornamento non richiede la ridistribuzione dell'API.  | 
| [Distribuzione](https://docs.aws.amazon.com/apigateway/latest/api/API_Deployment.html) | Per le proprietà applicabili e le operazioni supportate, consulta [deployment:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDeployment.html).  | 
| [DomainName](https://docs.aws.amazon.com/apigateway/latest/api/API_DomainName.html) | Per le proprietà applicabili e le operazioni supportate, consulta [domainname:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDomainName.html). L'aggiornamento non richiede la ridistribuzione dell'API. | 
| [BasePathMapping](https://docs.aws.amazon.com/apigateway/latest/api/API_BasePathMapping.html) |  Per le proprietà applicabili e le operazioni supportate, consulta [basepathmapping:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateBasePathMapping.html). L'aggiornamento non richiede la ridistribuzione dell'API.  | 
| [Tipo di indirizzo IP](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateRestApi.html) |  L'aggiornamento non richiede la ridistribuzione dell'API.  | 
| [Fase](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) |  Per le proprietà applicabili e le operazioni supportate, consulta [stage:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html). L'aggiornamento non richiede la ridistribuzione dell'API.  | 
| [Utilizzo](https://docs.aws.amazon.com/apigateway/latest/api/API_GetUsage.html) |  Per le proprietà applicabili e le operazioni supportate, consulta [usage:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsage.html). L'aggiornamento non richiede la ridistribuzione dell'API.  | 
| [UsagePlan](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html) | Per le proprietà applicabili e le operazioni supportate, consulta [usageplan:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html). L'aggiornamento non richiede la ridistribuzione dell'API. | 

# Nome di dominio personalizzato per REST pubblico APIs in API Gateway
<a name="how-to-custom-domains"></a>

*I nomi di dominio personalizzati* sono più semplici e intuitivi URLs che puoi fornire agli utenti delle tue API.

Dopo aver distribuito un'API, tu e i tuoi clienti potete richiamarla usando l'URL di base predefinito nel formato seguente: 

```
https://api-id.execute-api.region.amazonaws.com/stage
```

dove *api-id* viene generato da API Gateway, *region* è la AWS regione e *stage* viene specificato dall'utente al momento della distribuzione dell'API.

La parte del nome host dell'URL, `api-id.execute-api.region.amazonaws.com`, fa riferimento a un endpoint API. Il nome dell'endpoint API predefinito viene generato casualmente, è complesso da richiamare e non è intuitivo.

Con i nomi di dominio personalizzati, è possibile impostare il nome host dell'API e scegliere un percorso base (ad esempio `myservice`) per mappare l'URL alternativo all'API. Ad esempio, un URL di base dell'API più intuitivo può diventare:

```
https://api.example.com/myservice
```

**Nota**  
Per informazioni sui nomi di dominio personalizzati per uso privato APIs, consulta[Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md).

## Considerazioni
<a name="custom-domain-considerations"></a>

Le seguenti considerazioni potrebbero influire sull’utilizzo di un nome di dominio personalizzato:
+ È possibile disabilitare l'endpoint predefinito per un'API. I client possono comunque connettersi all'endpoint predefinito, ma riceveranno un codice di stato `403 Forbidden`.
+ Un nome di dominio personalizzato regionale può essere associato a REST APIs e HTTP APIs. Puoi utilizzare [API Gateway versione 2 APIs](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/api-reference.html) per creare e gestire nomi di dominio personalizzati regionali per REST APIs. 
+ Un nome di dominio personalizzato deve essere univoco all'interno di una regione per tutti gli AWS account. 
+ È possibile eseguire la migrazione di un nome di dominio personalizzato tra endpoint ottimizzati per l'edge e regionali, ma non la migrazione di un dominio personalizzato pubblico a un nome di dominio personalizzato privato.
+ È necessario creare o aggiornare il record di risorse del provider DNS per eseguire la mappatura all'endpoint API. In assenza di questa mappatura, le richieste API destinate al nome di dominio personalizzato non possono raggiungere API Gateway.
+ È possibile supportare un numero pressoché infinito di nomi di dominio senza superare la quota predefinita con un certificato jolly. Per ulteriori informazioni, consulta [Nomi di dominio personalizzati con caratteri jolly](#wildcard-custom-domain-names).
+ Puoi scegliere una policy di sicurezza per il dominio personalizzato. Per ulteriori informazioni, consulta [Scegli una politica di sicurezza per il tuo dominio personalizzato in API Gateway](apigateway-custom-domain-tls-version.md).
+ Per configurare le mappature API con più livelli, è necessario utilizzare un nome di dominio personalizzato regionale e la policy di sicurezza TLS 1.2.

## Prerequisiti per i nomi di dominio personalizzati
<a name="how-to-custom-domains-prerequisites"></a>

Di seguito sono riportati i prerequisiti per la creazione di un nome di dominio personalizzato pubblico o privato. Per informazioni sui nomi di dominio personalizzati per uso privato APIs, consulta[Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md).

### Registrare un nome di dominio
<a name="custom-domain-names-register"></a>

È necessario disporre di un nome di dominio Internet registrato per configurare nomi di dominio personalizzati per il tuo APIs. Puoi registrare un nome di dominio Internet utilizzando [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/) oppure un registrar di dominio di terze parti a tua scelta. Il nome di dominio personalizzato può essere il nome di un sottodominio o del dominio root (detto anche "apex di zona") di un dominio Internet registrato.

Il nome di dominio deve seguire la specifica [RFC 1035](https://tools.ietf.org/html/rfc1035#section-2.3.4) e può avere un massimo di 63 ottetti per etichetta e 255 ottetti in totale.

### Impostazione del certificato per il nome di dominio personalizzato
<a name="custom-domain-names-certificates"></a>

Prima di configurare un nome di dominio personalizzato per un'API, devi disporre di un SSL/TLS certificato pronto in ACM. Se ACM non è disponibile nella AWS regione in cui stai creando il tuo nome di dominio personalizzato, devi importare un certificato in API Gateway in quella regione.

Per importare un SSL/TLS certificato, devi fornire l'ente del SSL/TLS certificato in formato PEM, la relativa chiave privata e la catena di certificati per il nome di dominio personalizzato.

Ogni certificato archiviato in ACM è identificato dal relativo ARN. Con i certificati emessi da ACM, non devi preoccuparti di esporre dettagli sensibili del certificato, come la chiave privata. Per utilizzare un certificato AWS gestito per un nome di dominio, è sufficiente fare riferimento al relativo ARN. 

Se l'applicazione utilizza il blocco dei certificati, a volte noto come pinning SSL, per bloccare un certificato ACM, l'applicazione potrebbe non essere in grado di connettersi al dominio dopo il rinnovo del certificato. AWS Per ulteriori informazioni, consulta [Probemi nel blocco dei certificati](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html) nella *Guida per l'utente di AWS Certificate Manager *.

## Nomi di dominio personalizzati con caratteri jolly
<a name="wildcard-custom-domain-names"></a>

Con i nomi di dominio personalizzati con caratteri jolly, è possibile supportare un numero quasi infinito di nomi di dominio senza superare la [quota predefinita](limits.md). Ad esempio, è possibile dare a ciascuno dei clienti il proprio nome di dominio, `customername.example.com`.

Per creare un nome di dominio personalizzato con caratteri jolly, specificare un carattere jolly (`*`) come primo sottodominio di un dominio personalizzato che rappresenta tutti i possibili sottodomini di un dominio radice.

Ad esempio, il nome di dominio personalizzato con caratteri jolly `*.example.com` restituisce sottodomini quali `a.example.com`, `b.example.com` e `c.example.com`. Quando si crea il nome di dominio personalizzato con caratteri jolly, tutti i relativi sottodomini vengono instradati dalla modalità di routing del nome di dominio con caratteri jolly. Per indirizzare sottodomini verso diversi APIs, puoi effettuare una delle seguenti operazioni:
+ Utilizza le regole di routing per indirizzare le richieste in entrata verso destinazioni REST APIs diverse utilizzando `*.example.com` l'intestazione. `Host` Per ulteriori informazioni, consulta [Esempio 4: regole di routing per i nomi di dominio con caratteri jolly](rest-api-routing-rules-examples.md#rest-api-routing-rules-examples-rule-for-wildcard-domains). 
+ Creare un nome di dominio per i sottodomini da instradare a un endpoint diverso. In un unico AWS account, puoi avere entrambi e. `*.example.com` `a.example.com`

È possibile utilizzare le variabili di contesto `$context.domainName` e `$context.domainPrefix` per determinare il nome di dominio utilizzato da un client per chiamare l'API. Per ulteriori informazioni sulle variabili di contesto, consulta [Variabili per le trasformazioni dei dati per Gateway API](api-gateway-mapping-template-reference.md).

Per creare un nome di dominio personalizzato con caratteri jolly, è necessario fornire un certificato emesso da ACM che sia stato convalidato utilizzando il DNS o il metodo di convalida della posta elettronica.

**Nota**  
Non puoi creare un nome di dominio personalizzato con caratteri jolly se un altro AWS account ha creato un nome di dominio personalizzato che è in conflitto con il nome di dominio personalizzato con caratteri jolly. Ad esempio, se l'account A ha creato `a.example.com`, l'account B non può creare il nome di dominio personalizzato con caratteri jolly `*.example.com`.  
Se l'account A e l'account B condividono un proprietario, è possibile contattare il [Centro assistenza AWS](https://console.aws.amazon.com/support/home#/) per richiedere un'eccezione.

## Passaggi successivi per nomi di dominio personalizzati
<a name="how-to-custom-domains-next-steps"></a>

Di seguito sono riportati i passaggi successivi per i nomi di dominio personalizzati.

**Fasi successive**
+ Per informazioni su come impostare il SSL/TLS certificato, consulta. [Prepara i certificati in AWS Certificate Manager](how-to-specify-certificate-for-custom-domain-name.md)
+ Per informazioni su come creare un dominio personalizzato regionale, consulta [Configurazione di un nome di dominio personalizzato regionale in Gateway API](apigateway-regional-api-custom-domain-create.md).
+ Per informazioni su come creare un dominio personalizzato ottimizzato per l'edge, consulta [Configurazione di un nome di dominio personalizzato ottimizzato per l'edge in Gateway API](how-to-edge-optimized-custom-domain-name.md).
+ Per informazioni su come eseguire la migrazione tra nomi di dominio personalizzati regionali e ottimizzati per l'edge, consulta [Migrazione di un nome di dominio personalizzato a un tipo di endpoint API diverso in Gateway API](apigateway-regional-api-custom-domain-migrate.md).
+ Per informazioni su come connettere le fasi API a un nome di dominio personalizzato, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).
+ Per informazioni su come scegliere una policy di sicurezza per il dominio personalizzato, consulta [Scegli una politica di sicurezza per il tuo dominio personalizzato in API Gateway](apigateway-custom-domain-tls-version.md).
+ Per informazioni su come disattivare l'endpoint predefinito per il nome di dominio personalizzato, consulta [Disabilita l'endpoint predefinito per REST APIs](rest-api-disable-default-endpoint.md).
+ Per informazioni su come utilizzare i controlli dell'integrità di Route 53 per controllare il failover DNS da un'API di Gateway API, consulta [Configurazione dei controlli dell'integrità personalizzati per failover DNS per un'API di Gateway API](dns-failover.md).

Se è la prima volta che crei un nome di dominio personalizzato, ti consigliamo di iniziare con [Prepara i certificati in AWS Certificate Manager](how-to-specify-certificate-for-custom-domain-name.md), per specificare il certificato, quindi [Configurazione di un nome di dominio personalizzato regionale in Gateway API](apigateway-regional-api-custom-domain-create.md) per creare un nome di dominio personalizzato regionale. 

# Prepara i certificati in AWS Certificate Manager
<a name="how-to-specify-certificate-for-custom-domain-name"></a>

Prima di configurare un nome di dominio personalizzato per un'API, è necessario che sia già presente un certificato SSL/TLS in AWS Certificate Manager. Per ulteriori informazioni, consulta la [Guida per l'utente AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/).

## Considerazioni
<a name="how-to-specify-certificate-for-custom-domain-name-considerations"></a>

Di seguito sono riportate le considerazioni relative al tuo SSL/TLS certificato.
+ Se crei un nome di dominio personalizzato ottimizzato per i dispositivi edge, API Gateway lo sfrutta per supportare i certificati per i nomi CloudFront di dominio personalizzati. Pertanto, i requisiti e i vincoli di un certificato di nome di dominio personalizzato sono dettati da. SSL/TLS [CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html) La dimensione massima della chiave pubblica è ad esempio di 2048, mentre la dimensione della chiave privata può essere di 1024, 2048 e 4096. La dimensione della chiave pubblica è determinata dall'autorità di certificazione usata. Chiedi all'autorità di certificazione di restituire chiavi di dimensioni diverse dalla lunghezza predefinita. Per ulteriori informazioni, consulta [Accesso sicuro agli oggetti e Creazione di cookie](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https.html) [firmati URLs e firmati](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html).
+ Se crei un nome di dominio personalizzato regionale, la dimensione massima della chiave pubblica è 2048.
+ Per usare un certificato ACM con un nome di dominio personalizzato regionale, devi richiedere o importare il certificato nella stessa Regione dell'API. Il certificato deve coprire il nome di dominio personalizzato.
+  Per usare un certificato ACM con un nome di dominio personalizzato ottimizzato per l'edge, devi richiedere o importare il certificato nella Regione Stati Uniti orientali (Virginia settentrionale) – `us-east-1`.
+  È necessario disporre di un nome di dominio registrato, ad esempio `example.com`. È possibile usare [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/) o un registrar di dominio di terze parti accreditato. Per un elenco dei registrar, consulta la pagina [Accredited Registrar Directory](https://www.icann.org/en/accredited-registrars) nel sito Web ICANN. 

## Per creare o importare un SSL/TLS certificato in ACM
<a name="how-to-specify-certificate-for-custom-domain-name-setup"></a>

Le seguenti procedure mostrano come creare o importare un SSL/TLS certificato per un nome di dominio.

------
#### [ To request a certificate provided by ACM for a domain name ]

1. Accedere alla [console AWS Certificate Manager](https://console.aws.amazon.com/acm).

1. Scegliere **Request a certificate (Richiedi un certificato)**.

1. Per **Tipo di certificato**, scegli **Richiedi un certificato pubblico**.

1. Scegli **Next (Successivo)**.

1. In **Nome di dominio completo**, immetti un nome di dominio personalizzato per la tua API, ad esempio `api.example.com`.

1. Facoltativamente, scegliere **Add another name to this certificate (Aggiungi un altro nome a questo certificato)**.

1. Per **Metodo di convalida**, scegli un metodo per convalidare la proprietà del dominio.

1. Per **Algoritmo chiave**, scegli un algoritmo di crittografia.

1. Scegli **Richiedi**.

1. Per una richiesta valida, un proprietario registrato del dominio Internet deve accettare la richiesta prima che ACM emetta il certificato. Se utilizzi Route 53 per gestire i record DNS pubblici, puoi aggiornarli direttamente tramite la console ACM.

------
#### [ To import into ACM a certificate for a domain name ]

1.  Richiedi un SSL/TLS certificato con codifica PEM per il tuo nome di dominio personalizzato da un'autorità di certificazione. Per un elenco parziale di questi CAs, consulta [Mozilla](https://ccadb.my.salesforce-sites.com/mozilla/IncludedCACertificateReport) Included CA List. 

   1. Generare una chiave privata per il certificato e salvare l'output in un file usando il kit di strumenti [OpenSSL](https://www.openssl.org) disponibile nel sito Web OpenSSL:

      ```
      openssl genrsa -out private-key-file 2048
      ```

   1. Genera una richiesta di firma del certificato con la chiave privata generata in precedenza, usando OpenSSL:

      ```
      openssl req -new -sha256 -key private-key-file -out CSR-file
      ```

   1. Invia la richiesta di firma del certificato all'autorità di certificazione e salva il certificato risultante.

   1. Scarica la catena di certificati dall'autorità di certificazione.
**Nota**  
 Se ottieni la chiave privata in un altro modo e la chiave è crittografata, puoi usare il comando seguente per decrittarla prima di inviarla ad API Gateway per la configurazione di un nome di dominio personalizzato.   

   ```
   openssl pkcs8 -topk8 -inform pem -in MyEncryptedKey.pem -outform pem -nocrypt -out MyDecryptedKey.pem
   ```

1. Carica il certificato su AWS Certificate Manager:

   1. Accedere alla [console AWS Certificate Manager](https://console.aws.amazon.com/acm).

   1. Seleziona **Import a certificate** (Importa un certificato).

   1. Per **Corpo certificato**, inserisci il corpo del certificato server in formato PEM fornito dall'autorità di certificazione. Di seguito è illustrato un esempio abbreviato di tale certificato.

      ```
      -----BEGIN CERTIFICATE-----
      EXAMPLECA+KgAwIBAgIQJ1XxJ8Pl++gOfQtj0IBoqDANBgkqhkiG9w0BAQUFADBB
      ...
      az8Cg1aicxLBQ7EaWIhhgEXAMPLE
      -----END CERTIFICATE-----
      ```

   1. Per **Chiave privata del certificato**, inserisci la chiave privata del certificato in formato PEM. Di seguito è illustrato un esempio abbreviato di tale chiave. 

      ```
      -----BEGIN RSA PRIVATE KEY-----
      EXAMPLEBAAKCAQEA2Qb3LDHD7StY7Wj6U2/opV6Xu37qUCCkeDWhwpZMYJ9/nETO
      ...
      1qGvJ3u04vdnzaYN5WoyN5LFckrlA71+CszD1CGSqbVDWEXAMPLE
      -----END RSA PRIVATE KEY-----
      ```

   1. Per **Catena di certificati**, inserisci i certificati intermedi in formato PEM e, facoltativamente, il certificato root, uno dopo l'altro senza righe vuote. Se includi il certificato root, la catena di certificati deve iniziare con i certificati intermedi e terminare con il certificato root. Usa i certificati intermedi forniti dall'autorità di certificazione. Non includere intermediari non presenti nella catena del percorso di trust. Di seguito è illustrato un esempio abbreviato. 

      ```
      -----BEGIN CERTIFICATE-----
      EXAMPLECA4ugAwIBAgIQWrYdrB5NogYUx1U9Pamy3DANBgkqhkiG9w0BAQUFADCB
      ...
      8/ifBlIK3se2e4/hEfcEejX/arxbx1BJCHBvlEPNnsdw8EXAMPLE
      -----END CERTIFICATE-----
      ```

      Ecco un altro esempio.

      ```
      -----BEGIN CERTIFICATE-----
      Intermediate certificate 2
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      Intermediate certificate 1
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      Optional: Root certificate
      -----END CERTIFICATE-----
      ```

   1. Scegli **Successivo** e di nuovo **Successivo**.

------

Dopo la creazione o l'importazione del certificato, prendi nota del relativo ARN. Sarà necessario in seguito per la configurazione del nome di dominio personalizzato.

# Configurazione di un nome di dominio personalizzato regionale in Gateway API
<a name="apigateway-regional-api-custom-domain-create"></a>

Usa un nome di dominio personalizzato regionale per creare un URL di base dell'API intuitivo. Con un nome di dominio personalizzato regionale, puoi mappare le fasi HTTP e REST API allo stesso nome di dominio personalizzato e utilizzare l'autenticazione TLS reciproca. 

## Considerazioni
<a name="regional-custom-domain-names"></a>

Di seguito sono riportate alcune considerazioni relative al nome di dominio personalizzato regionale:
+ Devi fornire un certificato ACM specifico della Regione. Il certificato deve trovarsi nella stessa Regione dell'API. Per ulteriori informazioni sulla creazione o il caricamento di un certificato di un nome di dominio personalizzato consulta [Prepara i certificati in AWS Certificate Manager](how-to-specify-certificate-for-custom-domain-name.md).
+ Quando si crea un nome di dominio personalizzato regionale (o si esegue la migrazione di uno di essi) con un certificato ACM, Gateway API crea un ruolo collegato ai servizi nel tuo account. Il ruolo collegato ai servizi è necessario per collegare il certificato ACM all'endpoint regionale. Il ruolo è denominato **AWSServiceRoleForAPIGateway** e sarà collegato alla policy gestita **APIGatewayServiceRolePolicy**. Per ulteriori informazioni sull'uso del ruolo collegato ai servizi, consulta [Utilizzo dei ruoli collegati ai servizi](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html).
+ Dopo aver creato il nome di dominio personalizzato regionale, è necessario creare un record DNS per far sì che il nome di dominio personalizzato punti al dominio regionale. Questo consente al traffico destinato al nome di dominio personalizzato di essere reindirizzato al nome host regionale dell'API.

  Il record DNS può essere un record CNAME o un record alias A. Se si utilizza Route 53 come provider DNS, occorre creare un record di alias di tipo A. Se si utilizza un provider DNS di terze parti, occorre usare un record CNAME. Se si utilizza un record CNAME e si crea un endpoint VPC dell’interfaccia Gateway API con DNS privato abilitato per un’API privata, non è possibile risolvere il nome di dominio personalizzato all’interno del VPC che ospita l’API privata. 

## Creazione di un nome di dominio personalizzato regionale
<a name="apigateway-regional-api-custom-domain-create-procedure"></a>

La procedura seguente mostra come creare un nome di dominio personalizzato regionale. Una volta completata questa procedura, si crea una regola di routing per instradare le fasi dell’API al nome di dominio personalizzato.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Seleziona **Crea**.

1. In **Domain name (Nome di dominio)**, immettere un nome di dominio.

1. Per **Modalità di routing**, scegliere **Solo regole di routing**.

   In questa modalità di routing, puoi inviare traffico dal tuo nome di dominio personalizzato al tuo solo utilizzando le regole di routing. APIs Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

1. Per **Versione TLS minima**, seleziona una versione.

1. Sotto **Configurazione endpoint**, per **Tipo di endpoint API** scegli **Regionale**.

1. Scegliere un certificato ACM. Il certificato deve trovarsi nella stessa regione dell'API.

1. Scegli **Create** (Crea).

------
#### [ AWS CLI ]

Il [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-domain-name.html)comando seguente crea un nome di dominio personalizzato:

```
aws apigatewayv2 create-domain-name \ 
    --domain-name 'regional.example.com' \
    --domain-name-configurations CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678 \
    --routing-mode ROUTING_RULE_ONLY
```

L'output sarà simile al seguente:

```
{
    "ApiMappingSelectionExpression": "$request.basepath",
    "DomainName": "regional.example.com",
    "DomainNameConfigurations": [
        {
            "ApiGatewayDomainName": "d-numh1z56v6.execute-api.us-west-2.amazonaws.com",
            "CertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/123456789012-1234-1234-1234-12345678",
            "DomainNameStatus": "AVAILABLE",
            "EndpointType": "REGIONAL",
            "HostedZoneId": "Z2OJLYMUO9EFXC",
            "SecurityPolicy": "TLS_1_2"
        }
        "RoutingMode": "ROUTING_RULE_ONLY"
    ]
}
```

Il valore della proprietà `DomainNameConfigurations` restituisce il nome host dell'API regionale. Devi creare un record DNS per puntare il tuo nome di dominio personalizzato al nome del dominio regionale. Questo consente al traffico destinato al nome di dominio personalizzato di essere reindirizzato al nome host dell'API regionale.

------

## Creazione di una regola di routing per il nome di dominio personalizzato regionale
<a name="apigateway-regional-api-custom-domain-base-path-mapping"></a>

Dopo aver creato il tuo nome di dominio personalizzato, configuri il modo in cui il traffico viene instradato dal tuo nome di dominio personalizzato al tuo APIs. Poiché hai impostato la modalità di routing su`ROUTING_RULE_ONLY`, utilizzi le regole di routing per indirizzare le richieste in entrata dal tuo nome di dominio personalizzato al tuo. APIs

In questo esempio, si crea una regola catch-all che instrada a una fase dell’API tutte le richieste in entrata per il nome di dominio personalizzato. È anche possibile configurare le regole di routing in base a diverse condizioni di intestazione e percorso. Per ulteriori informazioni, consulta [Regole di routing per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs](rest-api-routing-rules.md).

------
#### [ Console di gestione AWS ]

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

1. Scegliere un nome di dominio personalizzato.

1. Nella scheda **Dettagli di routing**, scegliere **Aggiungi una regola di routing**.

1. Scegliere **Aggiungi una nuova condizione** per aggiungere una nuova condizione.

1. Mantenere questa regola senza condizioni. In tal modo si instradano all’API di destinazione e alla fase di destinazione tutte le richieste per il nome di dominio personalizzato.

1. Per **Azione**, selezionare nel menu a discesa l’API e la fase di destinazione.

1. Scegli **Next (Successivo)**.

1. Nel campo Priorità, immettere **100**.

   Gateway API valuta le regole in ordine di priorità, dal valore più basso a quello più alto. Poiché si tratta di una regola catch-all, si utilizza una priorità elevata in modo che Gateway API possa soddisfare qualsiasi regola aggiuntiva creata.

1. Scegliere **Crea una regola di routing**.

------
#### [ AWS CLI ]

Il comando `create-routing-rule` seguente crea una regola di routing catch-all:

```
aws apigatewayv2 create-routing-rule \
  --domain-name 'regional.example.com' \
  --priority 100 \
  --conditions  \
  --actions '[{
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }]'
```

------

È possibile modificare la modalità di routing e creare nuove regole in qualsiasi momento. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

## Creazione di un record DNS per il nome di dominio personalizzato regionale
<a name="apigateway-regional-api-custom-domain-dns-record"></a>

Dopo aver creato il nome di dominio personalizzato e le mappature dei percorsi di base, puoi creare un record DNS in modo che il nome di dominio personalizzato punti al nome di dominio regionale appena creato.

------
#### [ Console di gestione AWS ]

Per utilizzare il Console di gestione AWS, segui la documentazione di Route 53 sulla [configurazione di Route 53 per instradare il traffico verso API Gateway](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

------
#### [ AWS CLI ]

Per configurare i record DNS in modo da mappare il nome di dominio personalizzato regionale al relativo nome host dell'ID della zona ospitata, crea innanzitutto un file JSON contenente la configurazione per configurare un record DNS per il nome di dominio regionale. 

Il seguente `setup-dns-record.json` mostra come creare un record DNS `A` per mappare un nome di dominio personalizzato regionale (`regional.example.com`) al relativo nome host regionale (`d-numh1z56v6.execute-api.us-west-2.amazonaws.com`) fornito durante la creazione del nome di dominio personalizzato. Le proprietà `DNSName` e `HostedZoneId` di `AliasTarget` possono prendere rispettivamente i valori `regionalDomainName` e `regionalHostedZoneId` del nome di dominio personalizzato. Puoi anche ottenere la Regional Route 53 Hosted Zone IDs in [Amazon API Gateway Endpoints and Quotas](https://docs.aws.amazon.com/general/latest/gr/apigateway.html).

```
{
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "regional.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "d-numh1z56v6.execute-api.us-west-2.amazonaws.com",
          "HostedZoneId": "Z2OJLYMUO9EFXC",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
```

Quanto segue [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html)crea un record DNS per il tuo nome di dominio personalizzato regionale:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id Z2OJLYMUO9EFXC \
    --change-batch file://path/to/your/setup-dns-record.json
```

Sostituisci `hosted-zone-id` con l'ID della zona ospitata di Route 53 del record DNS impostato nel tuo account. Il valore del parametro `change-batch` punta a un file JSON (*setup-dns-record.json*) in una cartella (*path/to/your*).

------

# Configurazione di un nome di dominio personalizzato ottimizzato per l'edge in Gateway API
<a name="how-to-edge-optimized-custom-domain-name"></a>

Quando crei un nome di dominio personalizzato per un'API ottimizzata per l'edge, API Gateway configura una CloudFront distribuzione e un record DNS per mappare il nome di dominio API al CloudFront nome di dominio di distribuzione. Le richieste per l'API vengono quindi indirizzate ad API Gateway tramite la distribuzione mappata CloudFront . Questa mappatura è per le richieste API associate al nome di dominio personalizzato da indirizzare ad API Gateway tramite la distribuzione CloudFront mappata.

## Considerazioni
<a name="how-to-edge-optimized-custom-domain-name-considerations"></a>

Di seguito sono riportate alcune considerazioni relative al nome di dominio personalizzato ottimizzato per l’edge:
+  Per configurare un nome di dominio personalizzato ottimizzato per i dispositivi periferici o per aggiornarne il certificato, è necessario disporre dell'autorizzazione per aggiornare le distribuzioni. CloudFront 

  Per aggiornare le distribuzioni sono necessarie le seguenti autorizzazioni: CloudFront 

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
              "Sid": "AllowCloudFrontUpdateDistribution",
              "Effect": "Allow",
              "Action": [
                  "cloudfront:updateDistribution"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------
+ È necessario richiedere o importare un certificato per il nome di dominio personalizzato ottimizzato per l'edge nella Regione Stati Uniti orientali (Virginia settentrionale) – `us-east-1`.
+ La CloudFront distribuzione creata da API Gateway è di proprietà di un account specifico della regione affiliato ad API Gateway. Quando si tracciano le operazioni per creare e aggiornare tale CloudFront distribuzione CloudTrail, è necessario utilizzare questo ID account API Gateway. Per ulteriori informazioni, consulta [Registra la creazione di un nome di dominio personalizzato CloudTrail](#how-to-custom-domain-log-cloudfront-distribution-update-in-cloudtrail).
+  API Gateway supporta nomi di dominio personalizzati ottimizzati per i dispositivi perimetrali sfruttando la Server Name Indication (SNI) sulla distribuzione. CloudFront Per ulteriori informazioni sull'utilizzo di nomi di dominio personalizzati su una CloudFront distribuzione, incluso il formato di certificato richiesto e la dimensione massima della lunghezza della chiave del certificato, consulta [Using Alternate Domain Names and HTTPS](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-alternate-domain-names.html) nella *Amazon CloudFront Developer Guide*
+ Affinché un nome di dominio personalizzato ottimizzato per l'edge sia pronto sono necessari circa 40 minuti.
+ Dopo aver creato il nome di dominio personalizzato ottimizzato per i dispositivi periferici, devi creare un record DNS per mappare il nome di dominio personalizzato al nome di distribuzione. CloudFront 

## Creazione di un nome di dominio personalizzato ottimizzato per l'edge
<a name="how-to-custom-domains-console"></a>

La procedura seguente descrive come creare un nome di dominio personalizzato ottimizzato per l'edge per un'API.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegli **Aggiungi nome di dominio**.

1. In **Domain name (Nome di dominio)**, immettere un nome di dominio.

1. **Per la modalità **Routing**, scegli \$1ONLY. API\$1MAPPING**

1. Per **Tipo di endpoint API**, scegli **Ottimizzato per l'edge**.

1. Scegliere una versione di TLS minima.

1. Scegliere un certificato ACM.

1. Scegli **Aggiungi nome di dominio**.

------
#### [ REST API ]

1. Chiamare [domainname:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDomainName.html), specificando il nome di dominio personalizzato e l'ARN di un certificato archiviato in AWS Certificate Manager.

    La chiamata API riuscita restituisce una `201 Created` risposta contenente l'ARN del certificato e il nome di CloudFront distribuzione associato nel relativo payload.

1. Annota il nome del dominio di CloudFront distribuzione mostrato nell'output. Ti servirà nel passaggio successivo per impostare il target dell'alias del record A del dominio personalizzato nel DNS.

Per esempi di codice di questa chiamata all'API REST, consulta [domainname:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateDomainName.html).

------

Un nome di dominio personalizzato ottimizzato per l'edge impiega circa 40 minuti per essere pronto, ma la console visualizza immediatamente il nome di dominio di CloudFront distribuzione associato, sotto forma di`distribution-id.cloudfront.net`, insieme all'ARN del certificato. Nel frattempo, puoi creare una mappatura del percorso di base o una regola di routing e quindi configurare l'alias del record DNS per mappare il nome di dominio personalizzato al nome di dominio di distribuzione associato. CloudFront 

## Configurazione della mappatura del percorso di base di un'API con un nome di dominio personalizzato come nome host
<a name="how-to-custom-domains-mapping-console"></a>

Poiché la modalità di routing è impostata su`API_MAPPING_ONLY`, è possibile utilizzare la mappatura del percorso di base per utilizzare un singolo nome di dominio personalizzato come nome host di più nomi. APIs In questo modo, un'API è accessibile tramite la combinazione di nome di dominio personalizzato e percorso di base associato.

Ad esempio, se in Gateway API hai creato un'API denominata `PetStore` e un'altra denominata `Dogs` e hai configurato un nome di dominio personalizzato `api.example.com`, puoi impostare l'URL dell'API `PetStore` come `https://api.example.com`.

In questo modo, l'API `PetStore` viene associata al percorso di base di una stringa vuota. Se imposti l'URL dell'API `PetStore` come `https://api.example.com/PetStore`, l'API `PetStore` viene associata al percorso di base di `PetStore`. Puoi assegnare un percorso di base `MyDogList` per l'API `Dogs`. L'URL `https://api.example.com/MyDogList` è quindi l'URL root dell'API `Dogs`.

Per configurare le mappature delle API su più livelli, è possibile utilizzare solo un nome di dominio personalizzato regionale. I nomi di dominio personalizzati ottimizzati per l'edge non sono supportati. Per ulteriori informazioni, consulta [Usa le mappature delle API per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs](rest-api-mappings.md).

La procedura seguente consente di impostare le mappature dell'API per mappare percorsi dal nome di dominio personalizzato alle fasi API.

------
#### [ Console di gestione AWS ]

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

1. Seleziona **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale della console API Gateway.

1. Scegliere un nome di dominio personalizzato.

1. Scegliere **Configure API mappings (Configura mappature API)**.

1. Scegliere **Add new mapping (Aggiungi nuova mappatura)**.

1. Specificare **API**, **Stage (Fase)** e **Path (Percorso)** (facoltativo) per la mappatura.

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

------
#### [ REST API ]

 Richiamare [basepathmapping:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateBasePathMapping.html) su un nome di dominio personalizzato specifico, indicando le proprietà `basePath`, `restApiId` e `stage` della distribuzione nel payload della richiesta.

 In caso di esito positivo, la chiamata API restituisce una risposta `201 Created`.

Per esempi di codice della chiamata all'API REST, consulta [basepathmapping:create](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateBasePathMapping.html).

------

Per una maggiore flessibilità su come indirizzare il traffico verso il proprio APIs, è possibile modificare la modalità di routing in `ROUTING_RULE_ONLY` o `ROUTING_RULE_THEN_API_MAPPING` e creare una regola di routing. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

## Creazione di un record DNS per il nome di dominio personalizzato ottimizzato per l'edge
<a name="how-to-edge-optimized-custom-domain-name-dns-record"></a>

Dopo aver avviato la creazione del nome di dominio personalizzato ottimizzato per l'edge, configura l'alias del record DNS.

Ti consigliamo di utilizzare Route 53 per creare un alias di record A per il tuo nome di dominio personalizzato e specificare il nome di dominio di CloudFront distribuzione come destinazione dell'alias. Ciò significa che Route 53 è in grado di instradare il nome di dominio personalizzato anche se si tratta di un apex di zona. Per ulteriori informazioni, consulta la pagina relativa alla [scelta tra set di record della risorsa alias e non alias](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html) nella *Guida per gli sviluppatori di Amazon Route 53*.

 Per istruzioni su Amazon Route 53, consulta [Instradamento del traffico a un'API Amazon API Gateway utilizzando il nome di dominio](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html) nella *Guida per gli sviluppatori di Amazon Route 53*.

## Registra la creazione di un nome di dominio personalizzato CloudTrail
<a name="how-to-custom-domain-log-cloudfront-distribution-update-in-cloudtrail"></a>

Quando CloudTrail è abilitato per la registrazione delle chiamate API Gateway effettuate dal tuo account, API Gateway registra gli aggiornamenti di CloudFront distribuzione associati quando viene creato o aggiornato un nome di dominio personalizzato per un'API. Questi log sono disponibili in `us-east-1`. Poiché queste CloudFront distribuzioni sono di proprietà di API Gateway, ognuna di queste CloudFront distribuzioni segnalate è identificata da uno dei seguenti account API Gateway specifici della regione, anziché dall'ID dell' IDsaccount del proprietario dell'API. 


| **Region** | **ID account** | 
| --- | --- | 
| us-east-1 | 392220576650 | 
| us-east-2 | 718770453195 | 
| us-west-1 | 968246515281 | 
| us-west-2 | 109351309407 | 
| ca-central-1 | 796887884028 | 
| eu-west-1 | 631144002099 | 
| eu-west-2 | 544388816663 | 
| eu-west-3 | 061510835048 | 
| eu-central-1 | 474240146802 | 
| eu-central-2 | 166639821150 | 
| eu-north-1 | 394634713161 | 
| eu-south-1 | 753362059629 | 
| eu-south-2 | 359345898052 | 
| ap-northeast-1 | 969236854626 | 
| ap-northeast-2 | 020402002396 | 
| ap-northeast-3 | 360671645888 | 
| ap-southeast-1 | 195145609632 | 
| ap-southeast-2 | 798376113853 | 
| ap-southeast-3 | 652364314486 | 
| ap-southeast-4 | 849137399833 | 
| ap-south-1 | 507069717855 | 
| ap-south-2 | 644042651268 | 
| ap-east-1 | 174803364771 | 
| sa-east-1 | 287228555773 | 
| me-south-1 | 855739686837 | 
| me-central-1 | 614065512851 | 

## Rotazione di un certificato importato in ACM
<a name="how-to-rotate-custom-domain-certificate"></a>

 ACM gestisce automaticamente il rinnovo dei certificati emessi. Non è necessario ruotare alcun certificato emesso da ACM per i nomi di dominio personalizzati. CloudFront lo gestisce per tuo conto. 

 Se tuttavia importi un certificato in ACM e lo usi per un nome di dominio personalizzato, devi ruotarlo prima della scadenza. A tale scopo, è necessario importare un nuovo certificato di terze parti per il nome di dominio e ruotare il certificato esistente in quello nuovo. Il processo deve essere ripetuto quando il nuovo certificato importato scade. In alternativa, puoi richiedere a ACM di emettere un nuovo certificato per il nome di dominio e ruotare il certificato esistente in quello nuovo emesso da ACM. Dopodiché, puoi lasciare ACM e CloudFront gestire automaticamente la rotazione dei certificati. Per creare o importare un nuovo certificato ACM, segui la procedura riportata in [Per creare o importare un SSL/TLS certificato in ACM](how-to-specify-certificate-for-custom-domain-name.md#how-to-specify-certificate-for-custom-domain-name-setup).

La procedura seguente descrive come ruotare un certificato per un nome di dominio.

**Nota**  
Per ruotare un certificato importato in ACM sono necessari circa 40 minuti.

------
#### [ Console di gestione AWS ]

1. Richiedi o importa un certificato in ACM.

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

1. Seleziona **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale della console API Gateway.

1. Scegli un nome di dominio personalizzato ottimizzato per l'edge.

1. Per **Configurazione endpoint** scegli **Modifica**.

1. Seleziona un certificato nell'elenco a discesa **Certificato ACM**.

1. Scegli **Salva** per iniziare la rotazione del certificato per il nome di dominio personalizzato. 

------
#### [ REST API ]

 Richiama l'operazione [domainname:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDomainName.html) indicando l'ARN del nuovo certificato ACM per il nome di dominio specificato. 

------
#### [ AWS CLI ]

 Quanto segue [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)aggiorna il certificato ACM per un nome di dominio ottimizzato per l'edge.

```
aws apigateway update-domain-name \
    --domain-name edge.example.com \
    --patch-operations "op='replace',path='/certificateArn',value='arn:aws:acm:us-east-2:111122223333:certificate/CERTEXAMPLE123EXAMPLE'"
```

 Quanto segue [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)aggiorna il certificato ACM per un nome di dominio regionale.

```
aws apigateway update-domain-name \
    --domain-name regional.example.com \
    --patch-operations "op='replace',path='/regionalCertificateArn',value='arn:aws:acm:us-east-2:111122223333:certificate/CERTEXAMPLE123EXAMPLE'"
```

------

## Chiamata dell’API con nomi di dominio personalizzati quando si utilizza una mappatura percorso di base
<a name="how-to-custom-domains-call-api-with-sni"></a>

Chiamare un'API con un nome di dominio personalizzato equivale a chiamare l'API con il nome di dominio predefinito, a condizione che venga usato l'URL corretto.

Gli esempi seguenti confrontano e contrappongono un insieme di impostazioni personalizzate predefinite URLs e corrispondenti URLs di due APIs (`udxjef`e`qf3duz`) in una regione specificata (`us-east-1`) e di un determinato nome di dominio personalizzato (`api.example.com`).


| ID API | Fase | URL predefinito | Percorso di base | URL personalizzato | 
| --- | --- | --- | --- | --- | 
| udxjef | prod | https://udxjef.execute-api.us-east-1.amazonaws.com/prod | /petstore | https://api.example.com/negozio di animali | 
| udxjef | tst | https://udxjef.execute-api.us-east-1.amazonaws.com/tst | /petdepot | https://api.example.com/petdepot | 
| qf3duz | dev | https://qf3duz.execute-api.us-east-1.amazonaws.com/dev | /bookstore | https://api.example.com/libreria | 
| qf3duz | tst | https://qf3duz.execute-api.us-east-1.amazonaws.com/tst | /bookstand | https://api.example.com/leggio | 

Per una maggiore flessibilità su come indirizzare il traffico verso il tuo APIs, puoi creare una regola di routing. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

 API Gateway supporta i nomi di dominio personalizzati per un'API usando [SNI (Server Name Indication, Indicazione nome server)](https://en.wikipedia.org/wiki/Server_Name_Indication). Puoi richiamare l'API con un nome di dominio personalizzato usando un browser o una libreria client che supporta SNI. 

 API Gateway applica SNI sulla CloudFront distribuzione. Per informazioni su come vengono CloudFront utilizzati i nomi di dominio personalizzati, consulta [Amazon CloudFront Custom SSL.](https://aws.amazon.com/cloudfront/custom-ssl-domains/) 

# Migrazione di un nome di dominio personalizzato a un tipo di endpoint API diverso in Gateway API
<a name="apigateway-regional-api-custom-domain-migrate"></a>

 Puoi eseguire la migrazione di un nome di dominio personalizzato tra endpoint ottimizzati per edge ed endpoint regionali. Non è possibile eseguire la migrazione di un nome di dominio personalizzato pubblico a un nome di dominio personalizzato privato. Aggiungi prima di tutto il nuovo tipo di configurazione dell'endpoint all'elenco `endpointConfiguration.types` esistente per il nome di dominio personalizzato. Configura quindi un record DNS in modo che il nome di dominio personalizzato punti all'endpoint di cui è appena stato effettuato il provisioning. Infine, si rimuove l’endpoint del nome di dominio personalizzato obsoleto.

## Considerazioni
<a name="apigateway-regional-api-custom-domain-migration-considerations"></a>

Di seguito sono riportate alcune considerazioni relative alla migrazione del dominio personalizzato tra un endpoint API regionale e un endpoint API ottimizzato per l’edge:
+ Un nome di dominio personalizzato ottimizzato per l'edge richiede un certificato fornito da ACM della Regione Stati Uniti orientali (Virginia settentrionale), `us-east-1`. Questo certificato è distribuito un tutte le posizioni geografiche.
+ Un nome di dominio personalizzato regionale richiede un certificato fornito da ACM nella stessa Regione che ospita l'API. È possibile eseguire la migrazione di un nome di dominio personalizzato ottimizzato per l'edge che non si trova nella Regione `us-east-1` a un nome di dominio personalizzato regionale richiedendo un nuovo certificato ACM della Regione locale dell'API.
+ Per completare la migrazione tra un nome di dominio personalizzato ottimizzato per l'edge e un nome di dominio personalizzato regionale possono essere necessari fino a 60 secondi. Il tempo necessario per la migrazione dipende anche da quando si aggiornano i record DNS.
+ È possibile aggiungere una configurazione aggiuntiva dell'endpoint solo se la modalità di accesso all'endpoint è impostata su. `BASIC` Una volta che sono disponibili due configurazioni degli endpoint, non è possibile modificare la modalità di accesso agli endpoint. Per ulteriori informazioni, consulta [Modalità di accesso agli endpoint](apigateway-security-policies.md#apigateway-security-policies-endpoint-access-mode).
+ Se il nome di dominio personalizzato utilizza una politica di sicurezza che inizia con`SecurityPolicy_`, quando aggiungi un nuovo tipo di configurazione dell'endpoint, la modalità di accesso all'endpoint è la stessa per entrambi i tipi di endpoint e devi scegliere una policy di sicurezza che inizi con `SecurityPolicy_` per il nuovo tipo di configurazione dell'endpoint.

## Migrazione di nomi di dominio personalizzati
<a name="apigateway-api-custom-domain-names-migrate-procedure"></a>

**Nota**  
Per completare la migrazione, è necessario rimuovere l’endpoint obsoleto dal nome di dominio personalizzato.

La seguente procedura illustra come eseguire la migrazione di un nome di dominio personalizzato ottimizzato per l'edge a un nome di dominio personalizzato regionale.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegli un nome di dominio personalizzato ottimizzato per l'edge.

1. Per **Configurazione endpoint** scegli **Modifica**.

1. Scegli **Aggiungi endpoint regionale**.

1. Per **Certificato ACM** scegli un certificato.

   Il certificato regionale deve trovarsi nella stessa Regione dell'API regionale.

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

1. Configura un record DNS in modo che il nome di dominio personalizzato regionale punti al nome host regionale. Per ulteriori informazioni, consulta la [configurazione di Route 53 per instradare il traffico in Gateway API](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

1. Dopo aver verificato che la configurazione DNS utilizza l'endpoint corretto, elimina la configurazione dell'endpoint ottimizzato per l'edge. Scegli il nome di dominio personalizzato, quindi per **Configurazione dell'endpoint (ottimizzato per edge)** seleziona **Elimina**.

1. Conferma la scelta ed elimina l'endpoint.

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente migra un nome di dominio personalizzato ottimizzato da edge a un nome di dominio personalizzato regionale:

```
aws apigateway update-domain-name \
    --domain-name 'api.example.com' \
    --patch-operations  '[ 
        { "op":"add", "path": "/endpointConfiguration/types","value": "REGIONAL" },
        { "op":"add", "path": "/regionalCertificateArn", "value": "arn:aws:acm:us-west-2:123456789012:certificate/cd833b28-58d2-407e-83e9-dce3fd852149" }
      ]'
```

Il certificato regionale deve trovarsi nella stessa regione dell'API regionale. 

L'output sarà simile al seguente:

```
{
    "certificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/34a95aa1-77fa-427c-aa07-3a88bd9f3c0a",
    "certificateName": "edge-cert",
    "certificateUploadDate": "2017-10-16T23:22:57Z",
    "distributionDomainName": "d1frvgze7vy1bf.cloudfront.net",
    "domainName": "api.example.com",
    "endpointConfiguration": {
        "types": [
            "EDGE",
            "REGIONAL"
        ]
    },
    "regionalCertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/cd833b28-58d2-407e-83e9-dce3fd852149",
    "regionalDomainName": "d-fdisjghyn6.execute-api.us-west-2.amazonaws.com"
}
```

Per il nome di dominio personalizzato regionale migrato, la proprietà `regionalDomainName` risultante restituisce il nome host dell'API regionale. Devi configurare un record DNS in modo che il nome di dominio personalizzato regionale punti a questo nome host regionale. Questo consente al traffico destinato al nome di dominio personalizzato di essere instradato all'host regionale. 

Dopo avere impostato il record DNS, è possibile rimuovere il nome di dominio personalizzato ottimizzato per l'edge. Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente rimuove il nome di dominio personalizzato ottimizzato per i bordi:

```
aws apigateway update-domain-name \
    --domain-name api.example.com \
    --patch-operations '[
            {"op":"remove", "path":"/endpointConfiguration/types", "value":"EDGE"},
            {"op":"remove", "path":"certificateName"},
            {"op":"remove", "path":"certificateArn"}
        ]'
```

------

La procedura seguente mostra come migrare un nome di dominio personalizzato ottimizzato per i dispositivi periferici che utilizza una politica di sicurezza avanzata verso un nome di dominio personalizzato regionale che utilizza anche una politica di sicurezza avanzata.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegli un nome di dominio personalizzato ottimizzato per l'edge.

1. Per **Configurazione endpoint** scegli **Modifica**.

1. Scegli **Aggiungi endpoint regionale**.

1. Per **Certificato ACM** scegli un certificato.

   Il certificato regionale deve trovarsi nella stessa Regione dell'API regionale.

1. Per **Politica di sicurezza, scegli una politica** di sicurezza che inizi con. `SecurityPolicy_`

1. Per la **modalità di accesso Endpoint**, scegli **Basic**.

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

1. Configura un record DNS in modo che il nome di dominio personalizzato regionale punti al nome host regionale. Per ulteriori informazioni, consulta la [configurazione di Route 53 per instradare il traffico in Gateway API](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

1. Dopo aver verificato che la configurazione DNS utilizza l'endpoint corretto, elimina la configurazione dell'endpoint ottimizzato per l'edge. Scegli il nome di dominio personalizzato, quindi per **Configurazione dell'endpoint (ottimizzato per edge)** seleziona **Elimina**.

1. Conferma la scelta ed elimina l'endpoint.

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente migra un nome di dominio personalizzato ottimizzato dai bordi in un nome di dominio personalizzato regionale:

```
aws apigateway update-domain-name \
    --domain-name 'api.example.com' \
    --patch-operations  '[ 
        { "op":"add", "path": "/endpointConfiguration/types","value": "REGIONAL" },
        { "op":"replace", "path": "/securityPolicy", "value":"SecurityPolicy_TLS13_1_3_2025_09"},
        { "op":"add", "path": "/regionalCertificateArn", "value": "arn:aws:acm:us-west-2:123456789012:certificate/cd833b28-58d2-407e-83e9-dce3fd852149" }
      ]'
```

Il certificato regionale deve trovarsi nella stessa regione dell'API regionale. 

L'output sarà simile al seguente:

```
{
    "certificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/34a95aa1-77fa-427c-aa07-3a88bd9f3c0a",
    "certificateName": "edge-cert",
    "certificateUploadDate": "2017-10-16T23:22:57Z",
    "distributionDomainName": "d1frvgze7vy1bf.cloudfront.net",
    "domainName": "api.example.com",
    "endpointConfiguration": {
        "types": [
            "EDGE",
            "REGIONAL"
        ]
    },
    "securityPolicy": "SecurityPolicy_TLS13_1_3_2025_09",
    "endpointAccessMode": "BASIC",
    "regionalCertificateArn": "arn:aws:acm:us-west-2:123456789012:certificate/cd833b28-58d2-407e-83e9-dce3fd852149",
    "regionalDomainName": "d-fdisjghyn6.execute-api.us-west-2.amazonaws.com"
}
```

Per il nome di dominio personalizzato regionale migrato, la proprietà `regionalDomainName` risultante restituisce il nome host dell'API regionale. Devi configurare un record DNS in modo che il nome di dominio personalizzato regionale punti a questo nome host regionale. Questo consente al traffico destinato al nome di dominio personalizzato di essere instradato all'host regionale. 

Dopo avere impostato il record DNS, è possibile rimuovere il nome di dominio personalizzato ottimizzato per l'edge. Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente rimuove il nome di dominio personalizzato ottimizzato per i bordi:

```
aws apigateway update-domain-name \
    --domain-name api.example.com \
    --patch-operations '[
            {"op":"remove", "path":"/endpointConfiguration/types", "value":"EDGE"},
            {"op":"remove", "path":"certificateName"},
            {"op":"remove", "path":"certificateArn"}
        ]'
```

------

La seguente procedura mostra come eseguire la migrazione di un nome di dominio personalizzato regionale a un nome di dominio personalizzato ottimizzato per l'edge.

------
#### [ Console di gestione AWS ]

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli un nome di dominio personalizzato regionale.

1. Per **Configurazione endpoint** scegli **Modifica**.

1. Scegli **Aggiungi endpoint ottimizzato per edge**.

1. Per **Certificato ACM** scegli un certificato.

    Il certificato di dominio ottimizzato per edge deve essere creato nella regione `us-east-1`. 

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

1. Configura un record DNS in modo che il nome di dominio personalizzato ottimizzato per l'edge punti al nome host ottimizzato per l'edge. Per ulteriori informazioni, consulta la [configurazione di Route 53 per instradare il traffico in Gateway API](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

1. Dopo aver verificato che la configurazione DNS utilizza l'endpoint corretto, elimina la configurazione dell'endpoint regionale. Scegli il nome di dominio personalizzato, quindi per **Configurazione dell'endpoint (regionale)** seleziona **Elimina**.

1. Conferma la scelta ed elimina l'endpoint.

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente migra il nome di dominio personalizzato regionale in un nome di dominio personalizzato ottimizzato per Edge:

```
aws apigateway update-domain-name \
    --domain-name 'api.example.com' \
    --patch-operations  '[ 
        { "op":"add", "path": "/endpointConfiguration/types","value": "EDGE" },
        { "op":"add", "path": "/certificateName", "value": "edge-cert" },
	{"op":"add", "path": "/certificateArn", "value": "arn:aws:acm:us-east-1:738575810317:certificate/34a95aa1-77fa-427c-aa07-3a88bd9f3c0a"}
      ]'
```

Il certificato di dominio ottimizzato per edge deve essere creato nella regione `us-east-1`. 

L'output sarà simile al seguente:

```
{
    "certificateArn": "arn:aws:acm:us-east-1:738575810317:certificate/34a95aa1-77fa-427c-aa07-3a88bd9f3c0a",
    "certificateName": "edge-cert",
    "certificateUploadDate": "2017-10-16T23:22:57Z",
    "distributionDomainName": "d1frvgze7vy1bf.cloudfront.net",
    "domainName": "api.example.com",
    "endpointConfiguration": {
        "types": [
            "EDGE",
            "REGIONAL"
        ]
    },
    "regionalCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/3d881b54-851a-478a-a887-f6502760461d",
    "regionalDomainName": "d-cgkq2qwgzf.execute-api.us-east-1.amazonaws.com"
}
```

Per il nome di dominio personalizzato specificato, API Gateway restituisce il nome host dell'API ottimizzata per l'edge come valore della proprietà `distributionDomainName`. Devi impostare un record DNS in modo che il nome di dominio personalizzato ottimizzato per i confini punti al nome di dominio di questa distribuzione. Questo consente al traffico destinato al nome di dominio personalizzato ottimizzato per gli edge di essere instradato al nome host dell'API ottimizzata per edge. 

Dopo avere impostato il record DNS, è possibile rimuovere il tipo di endpoint `REGION` del nome di dominio personalizzato. Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente rimuove il tipo di endpoint regionale:

```
aws apigateway update-domain-name \
    --domain-name api.example.com \
    --patch-operations '[
        {"op":"remove", "path":"/endpointConfiguration/types", value:"REGIONAL"},
        {"op":"remove", "path":"regionalCertificateArn"}
      ]'
```

L'output sarà simile al seguente:

```
{
    "certificateArn": "arn:aws:acm:us-east-1:738575810317:certificate/34a95aa1-77fa-427c-aa07-3a88bd9f3c0a",
    "certificateName": "edge-cert",
    "certificateUploadDate": "2017-10-16T23:22:57Z",
    "distributionDomainName": "d1frvgze7vy1bf.cloudfront.net",
    "domainName": "api.example.com",
    "endpointConfiguration": {
        "types": "EDGE"
    }
}
```

------

# Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway
<a name="rest-api-routing-mode"></a>

Quando configuri la modalità di routing per il tuo nome di dominio personalizzato, imposti il modo in cui il traffico in entrata viene indirizzato al tuo. APIs Invii traffico al tuo indirizzo APIs utilizzando regole di routing, mappature API o regole di routing e mappature API. La sezione seguente illustra quando utilizzare le regole di routing e le mappature API, nonché come impostare la modalità di routing per il nome di dominio personalizzato.

## Quando utilizzare le regole di routing
<a name="when-to-use-routing-rules"></a>

Quando si utilizzano le regole di routing, si indirizzano le richieste in entrata che soddisfano determinate condizioni verso fasi REST specifiche. APIs Ad esempio, una regola può instradare una richiesta alla fase `production` della REST API `users` se contiene l’intestazione `version:v1` e il percorso di base `/users`. Utilizza le regole di routing per creare topologie di routing dinamiche avanzate che supportino casi d'uso come i A/B test o l'aumento dell'utilizzo di nuove versioni del tuo. APIs

Quando si indirizza il traffico a una REST API, è consigliabile utilizzare le regole di routing per il nome di dominio personalizzato. È possibile creare nuovamente qualsiasi mappatura API utilizzando le regole di routing. Per ulteriori informazioni, consulta [Nuova creazione di una mappatura API utilizzando le regole di routing](rest-api-routing-rules-recreate-api-mapping.md).

Per REST APIs, puoi anche utilizzare insieme le regole di routing e le mappature delle API. Quando si usano insieme le regole di routing e le mappature API, Gateway API valuta sempre le regole di routing prima di qualsiasi mappatura API. Le regole di routing e le mappature API si utilizzano insieme per migrare gli attuali nomi di dominio personalizzati o per esplorare le regole di routing.

### Considerazioni sulle regole di routing
<a name="considerations-for-private-preview"></a>

Le seguenti considerazioni potrebbero influire sull’utilizzo delle regole di routing:
+ WebSocket oppure HTTP APIs non sono supportati come destinazione APIs per le regole di routing.
+ Se il nome di dominio personalizzato presenta mappature API sia su REST che su HTTP APIs, le regole di routing non sono supportate.
+ È possibile creare una regola di routing di un dominio personalizzato privato per una REST API privata. È possibile creare una regola di routing di un dominio personalizzato pubblico per un’API regionale oppure ottimizzata per l’edge. 
+ Non è possibile creare una regola di routing di un dominio personalizzato pubblico per un’API privata. Non è possibile creare una regola di routing di un nome di dominio personalizzato privato per un’API pubblica.

## Scelta tra regole di routing e mappature API
<a name="choose-between-routing-rules-and-api-mappings"></a>

Quando possibile, è consigliabile utilizzare le regole di routing. Utilizza le mappature API solo per inviare traffico a un HTTP o a un'API. WebSocket 

# Impostazione della modalità di routing per il nome di dominio personalizzato
<a name="set-routing-mode"></a>

Puoi scegliere la modalità di routing utilizzata da API Gateway per indirizzare il traffico verso il tuo APIs. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md). In questa sezione vengono illustrate le modalità di routing per i nomi di dominio personalizzati. Devi impostare una modalità di routing per il tuo nome di dominio personalizzato per indirizzare il traffico verso il tuo. APIs Sono supportate le seguenti modalità di routing:
+ **ROUTING\$1RULE\$1THEN\$1 API\$1MAPPING**: utilizza questa modalità per inviare traffico al tuo APIs con regole di routing e mappature API. In questa modalità, tutte le regole di routing hanno la priorità su qualsiasi mappatura API. Per un esempio di questa modalità, consultare [Esempio 2: regole di routing e mappature API](rest-api-routing-rules-examples.md#rest-api-routing-rules-examples-rule-and-mappings). 
+ **ROUTING\$1RULE\$1ONLY: utilizza questa modalità per consentire solo alle regole** di routing di inviare traffico al tuo. APIs Quando il nome di dominio personalizzato utilizza questa modalità, non è possibile creare una mappatura delle API, ma è possibile utilizzare il comando per visualizzarla. [get-api-mappings](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/get-api-mappings.html) I chiamanti delle API non possono utilizzare le mappature API per accedere a questo nome di dominio.
+ **API\$1MAPPING\$1ONLY**: utilizza questa modalità per consentire solo alle mappature delle API di inviare traffico al tuo. APIs Quando il nome di dominio personalizzato usa questa modalità, non è possibile creare una regola di routing, ma è possibile utilizzare il comando `list-routing-rules` per visualizzarla. I chiamanti delle API non possono utilizzare le regole di routing per accedere a questo nome di dominio.

  Questa è la modalità di routing predefinita per tutti i nomi di dominio esistenti e per tutti i nuovi nomi di dominio che vengono creati.

Quando si crea un nome di dominio personalizzato utilizzando `apigateway`, `API_MAPPING_ONLY` è chiamato `BASE_PATH_MAPPING_ONLY` e `ROUTING_RULE_THEN_API_MAPPING` è chiamato `ROUTING_RULE_THEN_BASE_PATH_MAPPING`. Questo comportamento è presente solo per AWS CLI, o qualsiasi CloudFormation SDKs, non in. Console di gestione AWS

La procedura seguente illustra come modificare la modalità di routing per un nome di dominio personalizzato esistente. Quando si modifica la modalità di routing del nome di dominio personalizzato, i chiamanti delle API non possono accedere al nome di dominio utilizzando una modalità di routing non supportata.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale.

1. Scegliere un nome di dominio personalizzato.

1. Per **Dettagli del dominio**, scegliere **Modifica**.

1. **Per la modalità **Routing, scegliete ROUTING\$1RULE\$1THEN\$1**. API\$1MAPPING**

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

Se si modifica la modalità di routing in `ROUTING_RULE_ONLY` o `API_MAPPING_ONLY`, tutte le mappature API o le regole di routing create vengono rimosse dalla pagina dei dettagli del nome di dominio della console. Se si modifica la modalità di routing per supportare regole di routing o mappature API, queste risorse torneranno a essere presenti nella pagina.

------
#### [ AWS CLI - apigatewayv2 ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html)comando seguente aggiorna un nome di dominio per utilizzare la modalità di routing: `ROUTING_RULE_THEN_API_MAPPING`

```
aws apigatewayv2 update-domain-name \
  --domain-name 'api.example.com' \
  --routing-mode "ROUTING_RULE_THEN_API_MAPPING"
```

L'output sarà simile al seguente:

```
{
"ApiMappingSelectionExpression": "$request.basepath",
"DomainName": "api.example.com",
"DomainNameArn": "arn:aws:apigateway:us-west-2::/domainnames/api.example.com",
"DomainNameConfigurations": [
  {
      "ApiGatewayDomainName": "d-abcdefg.execute-api.us-west-2.amazonaws.com",
      "CertificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/abcdefg-123456-abcdefg",
      "DomainNameStatus": "AVAILABLE",
      "EndpointType": "REGIONAL",
      "HostedZoneId": "Z2OJLYMUO9EFXC",
      "SecurityPolicy": "TLS_1_2"
   }
 ],
"RoutingMode": "ROUTING_RULE_THEN_API_MAPPING",
"Tags": {}
}
```

------
#### [ AWS CLI - apigateway ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente aggiorna un nome di dominio personalizzato privato per utilizzare la modalità di routing: `ROUTING_RULE_THEN_BASE_PATH_MAPPING`

```
aws apigateway update-domain-name \
  --domain-name 'private.example.com' \
  --patch-operations "op='replace',path='/routingMode',value='ROUTING_RULE_THEN_BASE_PATH_MAPPING'"
```

L'output sarà simile al seguente:

```
{
"domainName": "private.example.com",
"domainNameId": "abcd1234",
"domainNameArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
"certificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
"certificateUploadDate": "2024-09-10T10:31:20-07:00",
"endpointConfiguration": {
  "types": [
    "PRIVATE"
   ],
  "ipAddressType": "dualstack"
  },
"domainNameStatus": "AVAILABLE",
"securityPolicy": "TLS_1_2",
"policy": "...",
"routingMode" : "ROUTING_RULE_THEN_BASE_PATH_MAPPING"
}
```

------

# Regole di routing per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs
<a name="rest-api-routing-rules"></a>

Una regola di routing è un insieme di condizioni che, se soddisfatte, invocano un’azione. Ad esempio, una regola può instradare qualsiasi richiesta in entrata per un nome di dominio personalizzato che contiene l’intestazione `Hello:World` e il percorso di base `users` alla fase `production` di una REST API.

Le regole vengono valutate in ordine di priorità; impostando la modalità di routing su `ROUTING_RULE_THEN_API_MAPPING`, Gateway API valuta sempre tutte le regole di routing prima di valutare qualsiasi mappatura API. Di seguito viene illustrato come una regola di routing utilizza condizioni, azioni e priorità. 

**Condizioni**  
Quando le condizioni di una regola vengono soddisfatte, l'operazione viene eseguita. Gateway API supporta fino a due condizioni di intestazione e una condizione di percorso. Gateway API valuta insieme le condizioni di intestazione e le condizioni di percorso di base.  
È possibile creare una regola senza condizioni. Quando Gateway API valuta questa regola, l’azione viene sempre eseguita. È possibile creare una regola senza condizioni come regola catch-all.  
Per ulteriori informazioni sulle condizioni di intestazione, consultare [Corrispondenza delle condizioni di intestazione](#rest-api-routing-rules-condition-headers). Per ulteriori informazioni sulle condizioni di percorso, consultare [Corrispondenza delle condizioni di percorso di base](#rest-api-routing-rules-condition-path). 

**Azioni**  
Le azioni sono il risultato della corrispondenza delle condizioni a una regola di routing. Attualmente, l’unica azione supportata consiste nell’invocare una fase di una REST API.  
Ogni regola può avere una sola azione.

**Priorità**  
La priorità determina l’ordine in cui vengono valutate le regole, dal valore più basso a quello più alto. Le regole non possono avere la stessa priorità.  
È possibile impostare la priorità su un valore compreso tra 1 e 1.000.000. Se una regola ha la priorità pari a uno, Gateway API la valuta per prima. Quando si crea una regola, è consigliabile aggiungere degli spazi vuoti nelle priorità. Questo approccio consente di cambiare la priorità delle regole e aggiungere nuove regole. Per ulteriori informazioni, consulta [Modifica della priorità di una regola di routing](apigateway-routing-rules-use.md#rest-api-routing-rules-change-priority).

Per esempi di come Gateway API valuta le regole di routing, consulta [Esempi di come Gateway API valuta le regole di routing](rest-api-routing-rules-examples.md).

## Tipi di condizione delle regole di routing di Gateway API
<a name="rest-api-routing-rules-condition-types"></a>

La sezione seguente illustra i tipi di condizione delle regole di routing. Gateway API soddisfa una regola solo se tutte le condizioni sono vere.

### Corrispondenza delle condizioni di intestazione
<a name="rest-api-routing-rules-condition-headers"></a>

Quando si crea una condizione di intestazione, è possibile eseguire la corrispondenza al nome dell’intestazione e al valore glob dell’intestazione, ad esempio `Hello:World`. Gateway API utilizza una corrispondenza letterale per convalidare la corrispondenza delle condizioni di intestazione. La condizione può utilizzare fino a due intestazioni specificando `AND` tra loro. Ad esempio, la condizione può essere soddisfatta se una richiesta in entrata contiene `Hello:World` e `x-version:beta`.

La corrispondenza del nome dell’intestazione non fa distinzione tra maiuscole e minuscole, ma il valore glob dell’intestazione rispetta la distinzione tra maiuscole e minuscole. `Hello:World` corrisponde a `hello:World`, ma non a `Hello:world`.

Per l’elenco dei valori di intestazione con limitazioni, consultare [Restrizioni](#rest-api-routing-rules-restrictions).

#### Utilizzo di caratteri jolly con le condizioni di intestazione
<a name="rest-api-routing-rules-condition-headers-wildcards"></a>

È possibile utilizzare i caratteri jolly solo nel valore glob dell’intestazione e il carattere jolly deve essere `*prefix-match`, `suffix-match*` o `*contains*`. La tabella seguente mostra degli esempi su come utilizzare i caratteri jolly per la corrispondenza delle condizioni di intestazione. 


|  Condizioni di intestazione  |  Richieste che soddisfano la regola di routing  |  Richieste che non soddisfano la regola di routing  | 
| --- | --- | --- | 
|  `x-version: a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*` e `x-version: *b*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: b*` e `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Nessuno  | 

Se si creano condizioni per più valori di intestazione, ad esempio `Accept:application/json,text/xml`, è consigliabile utilizzare `*contains*` per le condizioni di intestazione ed evitare di creare condizioni usando la virgola (`,`).

Poiché Gateway API utilizza una corrispondenza letterale per le condizioni di intestazione, le corrispondenze semantiche potrebbero essere instradate in modo diverso. La tabella riportata di seguito mostra la differenza dei risultati delle regole di routing.


|  Condizioni di intestazione  |  Richieste che soddisfano la regola di routing  |  Richieste che non soddisfano la regola di routing  | 
| --- | --- | --- | 
|  `Accept: *json`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `Accept: *json*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Nessuno  | 

### Corrispondenza delle condizioni di percorso di base
<a name="rest-api-routing-rules-condition-path"></a>

Quando si crea una condizione di percorso di base, se la richiesta in entrata contiene il percorso specificato, la regola viene soddisfatta. La corrispondenza rispetta la distinzione tra maiuscole e minuscole, quindi il percorso `New/Users` non corrisponde a `new/users`.

È possibile creare una condizione di percorso di base per un solo percorso di base.

Per l’elenco delle condizioni di percorso di base con limitazioni, consultare [Restrizioni](#rest-api-routing-rules-restrictions).

#### Eliminazione del percorso di base con le condizioni di percorso base
<a name="rest-api-routing-rules-condition-path-split"></a>

Quando si crea una condizione del percorso base, è possibile scegliere di rimuovere il percorso base. Quando si elimina il percorso di base, Gateway API rimuove il percorso di base corrispondente in entrata quando invoca l’API di destinazione. Questo è lo stesso comportamento di quando si utilizza una mappatura API. Se non si elimina il percorso di base, Gateway API inoltra l’intero percorso di base all’API di destinazione. È consigliabile eliminare il percorso di base solo quando si crea nuovamente una mappatura API.

La tabella seguente mostra esempi di come Gateway API valuta la condizione di eliminazione del percorso di base.


|  Condizione  | Eliminazione del percorso di base |  Richiesta in entrata  |  Risultato  | 
| --- | --- | --- | --- | 
|  Se il percorso di base contiene `PetStoreShopper/dogs`  |  True  |  `GET https://example.com/PetStoreShopper/dogs`  |  Gateway API chiama il metodo `GET` della risorsa `/`.  | 
|  Se il percorso di base contiene `PetStoreShopper/dogs`.  |  False  |  `GET https://example.com/PetStoreShopper/dogs`  |  Gateway API chiama il metodo `GET` della risorsa `PetStoreShopper/dogs`.  | 
|  Se il percorso di base contiene `PetStoreShopper`  |  True  |  `GET https://example.com/PetStoreShopper/dogs`  |  Gateway API chiama il metodo `GET` della risorsa `dogs`.  | 
|  Se il percorso di base contiene `PetStoreShopper`  |  False  |  `GET https://example.com/PetStoreShopper/dogs`  |  Gateway API chiama il metodo `GET` della risorsa `PetStoreShopper/dogs`.  | 
|  Se il percorso di base contiene `PetStoreShopper`  |  True  |  `GET https://example.com/PetStoreShopper?birds=available`  |  Gateway API chiama il metodo `GET` della risorsa `/` con il parametro della stringa di query `birds=available`.  | 
|  Se il percorso di base contiene `PetStoreShopper`  |  False  |  `GET https://example.com/PetStoreShopper?birds=available`  |  Gateway API chiama il metodo `GET` della risorsa `/PetStoreShopper` con il parametro della stringa di query `birds=available`.  | 

## Restrizioni
<a name="rest-api-routing-rules-restrictions"></a>
+ L'API di destinazione e il nome di dominio personalizzato devono trovarsi nello stesso AWS account.
+ Ogni regola può avere una sola API di destinazione. 
+ È possibile creare una regola di routing di un nome di dominio personalizzato privato per un’API privata e di un nome di dominio personalizzato pubblico per un’API pubblica. Non è possibile combinare insieme risorse pubbliche e private.
+ Se il nome di dominio personalizzato presenta mappature API sia su REST che su HTTP APIs, le regole di routing non sono supportate.
+ Il numero massimo per la priorità è 1.000.000.
+ Limitazioni di intestazione:
  + Ogni condizione `anyOf` può contenere un solo valore di intestazione.
  + Gli unici caratteri consentiti per i nomi delle intestazioni e i valori globali delle intestazioni sono specificati da [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230), ossia `a-z`, `A-Z`, `0-9` e i seguenti caratteri speciali: `*?-!#$%&'.^_`|~`.
  + È possibile utilizzare un carattere jolly nel valore glob dell’intestazione, ma deve essere `*prefix-match`, `suffix-match*` o `*contains*`. Non è possibile utilizzare `*` all’interno di un valore glob dell’intestazione.
  + I nomi delle intestazioni con caratteri jolly non sono supportati.
  + Il nome dell’intestazione non può contenere più di 40 caratteri.
  + Il valore glob dell’intestazione non può contenere più di 128 caratteri.
  + Il valore glob dell’intestazione per una corrispondenza infissa non può contenere più di 40 caratteri.
  + Le seguenti intestazioni non sono supportate come condizioni:
    + `access-control-*`
    + `apigw-*`
    + `Authorization`
    + `Connection`
    + `Content-Encoding`
    + `Content-Length`
    + `Content-Location`
    + `Forwarded`
    + `Keep-Alive`
    + `Origin`
    + `Proxy-Authenticate`
    + `Proxy-Authorization`
    + `TE`
    + `Trailers`
    + `Transfer-Encoding`
    + `Upgrade`
    + `x-amz-*`
    + `x-amzn-*`
    + `x-apigw-api-id`
    + `X-Forwarded-For`
    + `X-Forwarded-Host`
    + `X-Forwarded-Proto`
    + `x-restAPI`
    + `Via`
+ Limitazioni di percorso di base:
  + Il percorso di base non può contenere più di 128 caratteri.
  + Il percorso di base deve contenere solo lettere, numeri e i seguenti caratteri: `$-_.+!*'()/`.

    Questi caratteri non sono supportati per le espressioni regolari (regex). 
  + Il percorso di base non può iniziare né terminare con una barra rovesciata (`\`).

# Esempi di come Gateway API valuta le regole di routing
<a name="rest-api-routing-rules-examples"></a>

La sezione seguente illustra quattro esempi di come Gateway API valuta le regole di routing e le mappature API.

## Esempio 1: solo regole di routing
<a name="rest-api-routing-rules-examples-rule-only"></a>

In questo esempio, il nome di dominio personalizzato `https://petstore.example.com` ha la modalità di routing impostata su `ROUTING_RULE_ONLY` con le regole di routing e le priorità riportate di seguito.


|  ID della regola  |  Priorità  |  Condizioni  |  Azione  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Se la richiesta contiene l’intestazione `Hello:World`   |   API di destinazione 1   | 
|  `zzz000`  |   50   |   Se la richiesta contiene le intestazioni `Accept:image/webp` e `Pet:Dog-*` e se il percorso di base contiene `PetStoreShopper`  |   API di destinazione 2   | 
|  `efg456`  |   100   |  Nessuno  |   API di destinazione 3   | 

La tabella seguente mostra come Gateway API applica le regole di routing precedenti alle richieste di esempio.


| Richiesta | API selezionata | Spiegazione | 
| --- | --- | --- | 
|  `https://petstore.example.com -h "Hello:World"`  |  API di destinazione 1  |  La richiesta soddisfa la regola di routing `abc123`.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"`  |  API di destinazione 1  |  Gateway API valuta tutte le regole di routing in ordine di priorità. La regola di routing `abc123` ha la priorità assoluta e le condizioni sono soddisfatte, quindi Gateway API invoca API di destinazione 1. Sebbene le condizioni della richiesta corrispondano anche alla regola di routing `zzz000`, Gateway API non valuta nessun’altra regola di routing dopo aver effettuato una corrispondenza.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"`  |  API di destinazione 2  |  La richiesta soddisfa la regola di routing `zzz000`. Questa è una corrispondenza perché la stringa `Pet:Dog-Bella` corrisponde a `Pet:Dog-*`  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"`  |  API di destinazione 3  |  La richiesta non soddisfa la regola di routing `abc123`. La richiesta non soddisfa la regola di routing `zzz000` perché non sono presenti tutte le intestazioni necessarie. La regola di priorità successiva corrisponde a tutte le richieste in entrata, quindi Gateway API invoca API di destinazione 3.  | 

## Esempio 2: regole di routing e mappature API
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

In questo esempio, il nome di dominio personalizzato `https://petstore.diagram.example.com` ha la modalità di routing impostata su `ROUTING_RULE_THEN_API_MAPPING` e le seguenti regole di routing e mappature API.


|  ID della regola  |  Priorità  |  Condizioni  |  Azione  | 
| --- | --- | --- | --- | 
|  `abc123`  |   1   |   Se la richiesta contiene `pets`   |   Invoca la fase `Prod` dell’API `PetStore`.   | 
|  `000zzz`  |   5   |   Se la richiesta contiene l’intestazione `Cookie`:`*ux=beta*` e se il percorso di base contiene `/refunds`  |   Invoca la fase `Beta` dell’API `Refunds`.   | 

La tabella riportata di seguito mostra le mappature API per `https://petstore.backup.example.com`.


|  Mappatura API  |  API selezionata  | 
| --- | --- | 
|   `/refunds`   |   Invoca la fase `Prod` dell’API `Refunds`.   | 
|   `(none)`   |   Invoca la fase `Prod` dell’API `Search`.   | 

Il diagramma seguente mostra come Gateway API applica le regole di routing e le mappature API precedenti alle richieste di esempio. Le richieste di esempio sono riepilogate nella tabella che segue il diagramma.

![\[Diagramma di come Gateway API applica le regole di routing e le mappature API precedenti.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/rr-diagram.png)


La tabella seguente mostra come Gateway API applica le regole di routing e le mappature API precedenti alle richieste di esempio.


| Richiesta | API selezionata | Spiegazione | 
| --- | --- | --- | 
|  `https://petstore.diagram.com/pets`  |  La fase `Prod` dell’API `PetStore`.  |  La richiesta soddisfa la regola di routing `abc123`.  | 
|  `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"`  |  La fase `Beta` dell’API `Refunds`.  |  La richiesta soddisfa la regola di routing `000zzz`. L’intestazione `Cookie` contiene la corrispondenza `*contains*` e la corrispondenza del percorso di base corrette per questa condizione.   | 
|  `https://petstore.diagram.example.com/refunds`  |  La fase `Prod` dell’API `Refunds`.   |  La richiesta non ha le intestazioni necessarie per soddisfare la regola di routing `zzz000`. Se Gateway API non riesce a soddisfare correttamente una regola di routing, utilizza le mappature API. Gateway API può mappare il percorso di base alla fase `Prod` dell’API `Refunds`.   | 
|  `https://petstore.diagram.example.com/`  |  La fase `Prod` dell’API `Search`.   |  La richiesta esegue la corrispondenza della mappatura API al percorso vuoto `(none)`.  | 

## Esempio 3: regole di routing e mappature API con più livelli
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

In questo esempio, il nome di dominio personalizzato `https://petstore.backup.example.com` ha la modalità di routing impostata su `ROUTING_RULE_THEN_API_MAPPING` e le seguenti regole di routing e mappature API.

La tabella seguente mostra le regole di routing per `https://petstore.backup.example.com`.


|  ID della regola  |  Priorità  |  Condizioni  |  Azione  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Se la richiesta contiene l’intestazione `Hello:World`   |   API di destinazione 1   | 
|  `000zzz`  |   50   |   Se la richiesta contiene le intestazioni `Accept`:`image/webp` e `Pet:Dog-*` e se il percorso di base contiene `PetStoreShopper`  |  API di destinazione 2  | 

La tabella riportata di seguito mostra le mappature API per `https://petstore.backup.example.com`.


|  Mappatura API  |  API selezionata  | 
| --- | --- | 
|   `PetStoreShopper`   |   API di destinazione 3   | 
|   `PetStoreShopper/cats`   |   API di destinazione 4   | 

La tabella seguente mostra come Gateway API applica le regole di routing e le mappature API precedenti alle richieste di esempio.


| Richiesta | API selezionata | Spiegazione | 
| --- | --- | --- | 
|  `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" `  |  API di destinazione 3  |  La richiesta non ha le intestazioni necessarie per soddisfare la regola di routing `zzz000`. Se Gateway API non riesce a soddisfare correttamente una regola di routing, utilizza le mappature API. Gateway API può mappare il percorso di base all’API di destinazione 3.  | 
|  `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"`  |  API di destinazione 1  |  La richiesta soddisfa la regola di routing `abc123`. Se la modalità di routing è impostata su `ROUTING_RULE_THEN_API_MAPPING`, le regole di routing hanno sempre la priorità sulle mappature API.  | 
|  `https://petstore.example.com/Admin -h "Pet:Dog-Bella"`  |  Nessuno  |  La richiesta non soddisfa nessuna regola di routing o mappatura API. Poiché non esiste una regola di routing predefinita, Gateway API rifiuta la chiamata e invia al chiamante un codice di stato `403 Forbidden`.  | 

## Esempio 4: regole di routing per i nomi di dominio con caratteri jolly
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

In questo esempio, il nome di dominio personalizzato `https://*.example.com` è un nome di dominio con caratteri jolly. Il carattere jolly supporta tutti i sottodomini che vengono instradati nuovamente allo stesso dominio. L'esempio seguente di regole di routing modifica questo comportamento per consentire ai sottodomini di indirizzarsi verso destinazioni diverse APIs utilizzando l'intestazione. `Host`

La tabella seguente mostra le regole di routing per `https://*.example.com`.


|  ID della regola  |  Priorità  |  Condizioni  |  Azione  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Se la richiesta contiene l’intestazione `Host:a.example.com`   |   API di destinazione 1   | 
|  `000zzz`  |   50   |   Se la richiesta contiene l’intestazione `Host:b.example.com`  |  API di destinazione 2  | 
|  `efg456`  |   500   |  Nessuno  |  API di destinazione 3  | 

La tabella seguente mostra come Gateway API applica le regole di routing precedenti alle richieste di esempio.


| Richiesta | API selezionata | Spiegazione | 
| --- | --- | --- | 
|  `https://a.example.com`  |  API di destinazione 1  |  L’intestazione `Host` è `a.example.com`. Questa richiesta soddisfa la regola di routing `abc123`.  | 
|  `https://b.example.com`  |  API di destinazione 2  |  L’intestazione `Host` è `b.example.com`. Questa richiesta soddisfa la regola di routing `000zzz`.  | 
|  `https://testing.example.com`  |  API di destinazione 3  |  Questa richiesta soddisfa la regola di routing catch-all `efg456`.  | 

# Come utilizzare le regole di routing
<a name="apigateway-routing-rules-use"></a>

Puoi creare una regola di routing utilizzando o qualsiasi AWS SDK. Console di gestione AWS AWS CLI Dopo aver creato una regola, è possibile modificarne la priorità.

## Creazione di una regola di routing
<a name="rest-api-routing-rules-create"></a>

La procedura seguente mostra come creare una regola di routing per un nome di dominio personalizzato con la modalità di routing impostata su `ROUTING_RULE_THEN_API_MAPPING` o `ROUTING_RULE_ONLY`.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegliere un nome di dominio personalizzato.

1. Nella scheda **Dettagli di routing**, scegliere **Aggiungi una regola di routing**.

1. Scegliere **Aggiungi una nuova condizione** per aggiungere una nuova condizione.

   È possibile aggiungere una condizione di intestazione o di percorso di base. Per eseguire la corrispondenza di tutte le richieste in entrata al nome di dominio personalizzato, non aggiungere condizioni. 

1. Per **Azione**, selezionare nel menu a discesa l’API e la fase di destinazione.

1. Scegli **Next (Successivo)**.

1. Nel campo Priorità, immettere un numero per la priorità.

   Gateway API valuta le regole in ordine di priorità, dal valore più basso a quello più alto.

   Se si crea una regola senza condizioni, è consigliabile utilizzare una priorità con valore elevato.

1. Scegliere **Crea una regola di routing**.

------
#### [ AWS CLI ]

Il [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)comando seguente crea una regola di routing con una priorità di 50. In questo esempio, Gateway API instrada tutte le richieste in entrata che hanno le intestazioni `Hello:World` e `x-version:beta` e il percorso di base `PetStoreShopper` all’API di destinazione `a1b2c3`.

```
 aws apigatewayv2 create-routing-rule \
  --domain-name 'api.example.com' \
  --priority 50 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

L'output sarà simile al seguente.

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 50,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

## Modifica della priorità di una regola di routing
<a name="rest-api-routing-rules-change-priority"></a>

È possibile modificare la priorità di una regola di routing. La modifica ha effetto immediato e potrebbe influire sul modo in cui gli utenti delle API invocano i nomi di dominio personalizzati. Quando si impostano le priorità delle regole di routing, è consigliabile lasciare degli spazi vuoti tra le regole.

Ad esempio, si considerino due regole di routing, una regola `abc123` con la priorità 50 e una regola `zzz000` con la priorità 150. Per modificare la priorità delle regole in modo che Gateway API valuti prima la regola `zzz000`, è possibile impostare la priorità della regola `zzz000` su 30.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegliere un nome di dominio personalizzato.

1. Nella scheda **Dettagli di routing**, scegliere la regola di routing, quindi scegliere **Modifica**. 

1. Scegli **Next (Successivo)**.

1. Per Priorità, immettere la nuova priorità.

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

------
#### [ AWS CLI ]

Il [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html)comando seguente modifica la priorità di una regola di routing. `abc123`

```
 aws apigatewayv2 put-routing-rule \
  --domain-name 'api.example.com' \
  --priority 30 \
  --routing-rule-id abc123 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

L'output sarà simile al seguente:

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 38,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

# Nuova creazione di una mappatura API utilizzando le regole di routing
<a name="rest-api-routing-rules-recreate-api-mapping"></a>

È possibile creare nuovamente una mappatura API utilizzando le regole di routing. Per creare nuovamente una mappatura API, è necessario attivare l’eliminazione del percorso di base. Questo approccio preserva il comportamento delle mappature API. Per ulteriori informazioni, consulta [Eliminazione del percorso di base con le condizioni di percorso base](rest-api-routing-rules.md#rest-api-routing-rules-condition-path-split).

Il seguente tutorial mostra come creare nuovamente la mappatura API `https:// api.example.com/orders/v2/items/categories/5` come regola di routing e come aggiornare i log di accesso per registrare l’ID della regola di routing che Gateway API utilizza per inviare il traffico all’API.

------
#### [ Console di gestione AWS ]

**Per impostare la modalità di routing su ROUTING\$1RULE\$1THEN\$1 API\$1MAPPING**

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegliere il nome di dominio personalizzato.

1. Per **Dettagli del dominio**, scegliere **Modifica**.

1. **Per la modalità **Routing, scegliete ROUTING\$1RULE\$1THEN\$1**. API\$1MAPPING**

1. Seleziona **Salva** 

Dopo aver impostato la modalità di routing, si crea la regola di routing.

**Per creare la regola di routing**

1. Nella scheda **Dettagli di routing**, scegliere **Aggiungi una regola di routing**.

1. Scegliere **Aggiungi una nuova condizione** e quindi scegliere **Percorso**.

1. Per **Percorso**, immettere **orders/v2/items/categories/5**.

1. Per **Percorso base della striscia**, scegliere **Attivo**.

1. Per **API di destinazione**, scegliere l’API di destinazione desiderata.

1. Per **Fase di destinazione**, scegliere la fase di destinazione desiderata.

1. Scegli **Next (Successivo)**.

1. Per Priorità, immettere una priorità.

   Anche se si mantiene la mappatura API esistente, Gateway API utilizzerà sempre la nuova regola di routing poiché le regole di routing hanno sempre la priorità sulle mappature API.

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

Dopo aver creato la regola di routing, si aggiorna il formato del log di accesso per la fase o si crea un nuovo log per verificare che Gateway API utilizzi la regola di routing per inviare traffico all’API.

**Per aggiornare i log di accesso**

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

1. Scegliere l'API.

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

1. Per **Log e tracciamento**, scegliere **Modifica**.

   Se non è disponibile un gruppo di log, consulta [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md).

1. Aggiungere **\$1context.customDomain.routingRuleIdMatched** al formato dei log.

   Questo gruppo di log registra l’ID della regola di routing utilizzato da Gateway API per inviare il traffico all’API. Per ulteriori informazioni, consulta [Non riesco a capire come API Gateway abbia inviato il traffico al mio APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

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

Dopo aver aggiornato i log di accesso, si invoca del nome di dominio personalizzato. Di seguito è riportato un esempio di comando curl per invocare il nome di dominio personalizzato `https://api.example.com` con il percorso di base `orders/v2/items/categories/5`.

```
curl "https://api.example.com/orders/v2/items/categories/5"
```

Dopo aver richiamato con successo il nome di dominio personalizzato, conferma che Logs mostri il. CloudWatch `routingRuleIdMatched` Per informazioni su come utilizzare la console CloudWatch Logs per visualizzare un gruppo di log, consulta. [Visualizza gli eventi di registro dell'API Gateway nella CloudWatch console](view-cloudwatch-log-events-in-cloudwatch-console.md)

------
#### [ AWS CLI ]

1. Utilizzare il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html)comando seguente per aggiornare il nome di dominio in `api.example.com` modo da utilizzare la modalità di routing. `ROUTING_RULE_THEN_API_MAPPING`

   ```
   aws apigatewayv2 update-domain-name \
     --domain-name 'api.example.com' \
     --routing-mode ROUTING_RULE_THEN_API_MAPPING
   ```

1. Utilizzare il [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)comando seguente per creare una nuova regola di routing per ricreare la mappatura delle API. `https://api.example.com/orders/v2/items/categories/5`

   ```
   aws apigatewayv2 create-routing-rule \
     --domain-name 'api.example.com' \
     --priority 50 \
     --conditions '[
     {
       "MatchBasePaths": {
         "AnyOf": [
           "orders/v2/items/categories/5"
         ]
       }
     }
   ]' \
     --actions '[
     {
       "InvokeApi": {
         "ApiId": "a1b2c3",
         "Stage": "prod",
         "StripBasePath": true
       }
     }
   ]'
   ```

1. Utilizza il seguente comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) per aggiornare il formato dei log di accesso in modo da includere la variabile `$context.customDomain.routingRuleIdMatched`. Questa variabile registra l’ID della regola di routing utilizzata da Gateway API per inviare il traffico all’API. Questo log si usa per verificare che Gateway API utilizzi la regola di routing per inviare traffico all’API. Per ulteriori informazioni, consulta [Non riesco a capire come API Gateway abbia inviato il traffico al mio APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

   ```
   aws apigateway update-stage \
     --rest-api-id a1bc2c3 \
     --stage-name prod \
     --patch-operations "op=replace,path=/accessLogSettings/format,value='\$context.path \$context.customDomain.routingRuleIdMatched \$context.requestId \$context.extendedRequestId'"
   ```

   Se non è disponibile un gruppo di log, consulta [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md).

1. Utilizza il seguente comando curl di esempio per invocare il nome di dominio personalizzato con il percorso di base `orders/v2/items/categories/5`.

   ```
   curl "https://api.example.com/orders/v2/items/categories/5
   ```

1. Utilizzate il [filter-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html)comando seguente per ottenere gli eventi di registro dal gruppo di log `access-log-group-orders` che contiene l'ID della regola di routing. `abc123`

   ```
   aws logs filter-log-events --log-group-name access-log-group-orders --filter-pattern abc123
   ```

    Questo comando conferma che Gateway API utilizza la regola di routing per inviare traffico all’API.

------

# Risoluzione dei problemi relativi alle regole di routing
<a name="rest-api-routing-rules-troubleshoot"></a>

La seguente guida può aiutare a risolvere i problemi relativi alle regole di routing.

## Non riesco a capire come API Gateway abbia inviato il traffico al mio APIs
<a name="rest-api-routing-rules-logging"></a>

È possibile utilizzare i log di accesso per la fase della REST API per registrare e risolvere i problemi delle regole di routing. È possibile visualizzare l’ID della regola di routing utilizzato da Gateway API per inviare il traffico all’API usando la variabile `$context.customDomain.routingRuleIdMatched`. Per visualizzare la mappatura API utilizzata da Gateway API per inviare il traffico all’API, si usa la variabile `$context.customDomain.basePathMatched`. 

 Per registrare le regole di routing, devi configurare [un ARN del ruolo CloudWatch Logs appropriato](set-up-logging.md#set-up-access-logging-permissions) per il tuo account e creare un gruppo di log.

Il gruppo di log di accesso di esempio seguente può recuperare le informazioni pertinenti per la risoluzione dei problemi relativi alle regole di routing e alle mappature API. Gateway API popola solo la variabile di contesto per il meccanismo di routing utilizzato, in caso contrario la variabile di contesto è `-`. 

------
#### [ CLF ]

```
$context.path $context.customDomain.routingRuleIdMatched $context.customDomain.basePathMatched $context.requestId $context.extendedRequestId
```

------
#### [ JSON ]

```
{"requestPath": "$context.path", "routingRuleId" : "$context.customDomain.routingRuleIdMatched", "API mapping" : "$context.customDomain.basePathMatched", "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId"}
```

------
#### [ XML ]

```
<request id="$context.requestId"> <requestPath>$context.path</requestPath> <ruleId>$context.customDomain.routingRuleIdMatched</ruleId> <ApiMapping>$context.customDomain.basePathMatched</ApiMapping> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
```

------
#### [ CSV ]

```
$context.path,$context.customDomain.routingRuleIdMatched,$context.customDomain.basePathMatched,$context.requestId,$context.extendedRequestId
```

------

È consigliabile inoltre verificare la modalità di routing per il nome di dominio personalizzato. Per ulteriori informazioni, consulta [Impostazione della modalità di routing per il nome di dominio personalizzato](set-routing-mode.md).

## Impossibile abilitare le regole di routing sul nome di dominio personalizzato
<a name="rest-routing-rules-access-denied"></a>

È possibile ricevere da Gateway API il seguente errore:

```
Your account doesn’t have permission to use RoutingRules.
This might be caused by an IAM policy in your account with a deny statement on BasePathMapping or ApiMapping.
To grant permission for this account to use RoutingRules, use the UpdateAccount API.
This will impact any existing IAM policies that deny access to BasePathMapping or ApiMapping.
See API Gateway documentation for further details.
```

Riceverai questo errore se disponi o disponi di una policy IAM che nega l'accesso a o. [BasePathMapping[ApiMapping](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html#amazonapigatewaymanagementv2-resources-for-iam-policies)](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html#amazonapigatewaymanagement-resources-for-iam-policies) Quando si abilitano le regole di routing per un nome di dominio personalizzato, anche se la policy continua a negare l’accesso a `BasePathMapping` o `ApiMapping`, è possibile utilizzare la stessa policy per accedere a `RoutingRule`. Ciò consente a un utente di modificare il comportamento di routing del nome di dominio personalizzato.

Ad esempio, se si dispone di una policy simile alla seguente:

```
{
    "Sid": "DenyCreatingApiMappings",
    "Effect": "Deny",
    "Action": "apigateway:POST",
    "Resource": [
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings"
    ]
}
```

Quando si abilitano le regole di routing per `example.com`, questa policy continua a negare l’accesso alla creazione di `ApiMapping` ma non nega l’accesso alla creazione di `RoutingRule`.

È consigliabile controllare le policy IAM dell’account. La policy di esempio seguente nega l’accesso alla creazione di `ApiMapping`, `BasePathMapping` e `RoutingRule`:

```
{
    "Sid": "DenyCreatingBasePathMappingsApiMappings",
    "Effect": "Deny",
    "Action": "apigateway:POST",
    "Resource": [
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/basepathmappings",
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings"
    ]
},
{
    "Sid": "DenyCreatingRoutingRules",
    "Effect": "Deny",
    "Action": "apigateway:CreateRoutingRule",
    "Resource": [
        "arn:aws:apigateway:us-west-2:111122223333:/domainnames/example.com/routingrules/*"
    ]
}
```

Dopo aver verificato che tutte le policy sono state aggiornate, è possibile aggiornare le impostazioni dell’API a livello di account per abilitare le regole di routing per una Regione.

Utilizza il seguente comando [update-account](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html) per aggiornare le impostazioni dell’API a livello di account per una Regione:

```
aws apigateway update-account --patch-operations 'op=remove,path=/features,value=BlockedForRoutingRules' --region us-west-2
```

Dopo aver aggiornato le impostazioni dell’API a livello di account, è possibile modificare la modalità di routing del nome di dominio personalizzato. È anche possibile continuare a utilizzare le policy IAM per negare l’accesso a `RoutingRules`, `ApiMapping` o `BasePathMapping`.

# Usa le mappature delle API per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs
<a name="rest-api-mappings"></a>

È possibile utilizzare le mappature API per connettere le fasi API a un nome di dominio personalizzato. Questo invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato.

Una mappatura API specifica un'API, una fase e, facoltativamente, un percorso da utilizzare per la mappatura. Ad esempio, puoi mappare `https://api.example.com/orders` lo `production` stadio di un'API.

È possibile mappare le fasi HTTP e API REST allo stesso nome di dominio personalizzato.

Prima di creare una mappatura API, è necessario disporre di un'API, di una fase e di un nome di dominio personalizzato. Per ulteriori informazioni sulla creazione di un nome di dominio personalizzato, consulta [Configurazione di un nome di dominio personalizzato regionale in Gateway API](apigateway-regional-api-custom-domain-create.md).

## Richieste in arrivo al tuo nome di dominio personalizzato
<a name="rest-api-mappings-incoming-requests"></a>

Quando mappi un nome di dominio personalizzato su una fase dell'API, API Gateway elimina il percorso di base in entrata. Ciò rimuove il percorso di base mappato dalla chiamata all'API. Ad esempio, se la mappatura del percorso di base era `https://api.example.com/orders/shop/5` allo `test` stage e utilizzassi la seguente richiesta`https://api.example.com/orders/shop/5/hats`, API Gateway richiamerebbe la `/hats` risorsa dello `test` stadio dell'API, non la `orders/shop/5/hats` risorsa.

## Mappatura delle richieste API
<a name="rest-api-mappings-evalutation"></a>

Di seguito viene spiegato come API Gateway valuta le mappature delle API.

È possibile creare una mappatura delle API utilizzando mappature a livello singolo, ad esempio una mappatura delle API dallo `orders` stadio di un'API e una mappatura dell'API `beta` dallo stadio di un'API allo stadio di un'API. `shipping` `alpha` Per i nomi di dominio personalizzati regionali con la politica di sicurezza TLS 1.2, API Gateway supporta mappature API a più livelli. È possibile creare una mappatura delle API dallo `orders/v1/items` `alpha` stadio di un'API `orders/v2/items` allo stadio di un'API. `beta` Quando si crea una mappatura con più livelli, API Gateway invia le richieste alla mappatura API con il percorso di corrispondenza più lungo.

È possibile creare una mappatura API sul percorso vuoto. `(none)` Se nessun percorso corrisponde alla richiesta, API Gateway invia la richiesta al percorso vuoto`(none)`.

In questo esempio, il nome di dominio personalizzato `https://api.example.com` presenta le seguenti mappature API.


|  Mappatura delle API  |  API selezionata  | 
| --- | --- | 
|  `(none)`  |   API 1   | 
|   `orders`   |   API 2   | 
|  `orders/v1/items`  |   API 3   | 
|  `orders/v2/items`  |   API 4   | 
|  `orders/v1/items/categories`  |   API 5   | 

La tabella seguente mostra come API Gateway applica le precedenti mappature API a richieste di esempio.


| Richiesta | API selezionata | Spiegazione | 
| --- | --- | --- | 
|  `https://api.example.com/orders`  |  API 2  |  La richiesta corrisponde esattamente a questa mappatura API.  | 
|  `https://api.example.com/orders/v1/items`  |  API 3  |  La richiesta corrisponde esattamente a questa mappatura API.  | 
|  `https://api.example.com/orders/v2/items`  |  API 4  |  La richiesta corrisponde esattamente a questa mappatura API.  | 
|  `https://api.example.com/orders/v1/items/123`  |  API 3  |  API Gateway sceglie la mappatura con il percorso corrispondente più lungo. `123` alla fine della richiesta non influisce sulla selezione. Consultare [Richieste in arrivo al tuo nome di dominio personalizzato](#rest-api-mappings-incoming-requests).  | 
|  `https://api.example.com/orders/v2/items/categories/5`  |  API 5  |  API Gateway sceglie la mappatura con il percorso corrispondente più lungo.  | 
|  `https://api.example.com/customers`  |  API 1  |  API Gateway utilizza la mappatura vuota come catch-all.  | 
|  `https://api.example.com/ordersandmore`  |  API 2  |  API Gateway sceglie la mappatura con il prefisso corrispondente più lungo. Per un nome di dominio personalizzato configurato con mappature a livello singolo, ad esempio solo `https://api.example.com/orders` e `https://api.example.com/`, API Gateway sceglie `API 1`, poiché non esiste un percorso corrispondente con `ordersandmore`.  | 

## Restrizioni
<a name="rest-api-mappings-restrictions"></a>
+ In una mappatura API, il nome di dominio personalizzato e quello mappato APIs devono trovarsi nello stesso AWS account.
+ Le mappature API devono contenere solo lettere, numeri e i seguenti caratteri: `$-_.+!*'()/`.
+ La lunghezza massima per il percorso in una mappatura API è di 300 caratteri.
+ È possibile disporre di 200 mappature API con più livelli per ogni nome di dominio. Questo limite non include la mappatura delle API con livelli singoli, ad esempio. `/prod`
+ Puoi mappare HTTP solo su un nome APIs di dominio personalizzato regionale con la politica di sicurezza TLS 1.2.
+ Non è possibile eseguire il WebSocket APIs mapping allo stesso nome di dominio personalizzato di un'API HTTP o di un'API REST.
+ Dopo aver creato le mappature API, è necessario creare o aggiornare il record di risorse del provider DNS per eseguire la mappatura all'endpoint API.
+ Se si crea una mappatura API con più livelli, Gateway API converte tutti i nomi di intestazione in lettere minuscole.

## Creare una mappatura API
<a name="rest-api-mappings-examples"></a>

Per creare una mappatura API, innanzitutto è necessario creare un nome di dominio personalizzato, un'API e una fase. Il nome di dominio personalizzato deve avere una modalità di routing impostata su `ROUTING_RULE_THEN_API_MAPPING` o`API_MAPPING_ONLY`. Per informazioni su come impostare la modalità di routing, vedere. [Impostazione della modalità di routing per il nome di dominio personalizzato](set-routing-mode.md)

Per esempi AWS Serverless Application Model di modelli che creano tutte le risorse, vedi [Sessions With SAM](https://github.com/aws-samples/sessions-with-aws-sam/tree/master/custom-domains) on GitHub.

------
#### [ Console di gestione AWS ]

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

1. Scegliere **Custom Domain Names (Nomi di dominio personalizzati)** nel riquadro di navigazione principale. 

1. Scegliere un nome di dominio personalizzato.

1. **Nella scheda **Dettagli di routing**, scegli Configura mappature API.**

1. Specifica **API**, **Fase** e **Percorso** per la mappatura.

1. Selezionare **Salva**.

------
#### [ AWS CLI ]

Il seguente comando della [create-api-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api-mapping.html) crea una mappatura API. In questo esempio, API Gateway invia le richieste `api.example.com/v1/orders` all'API e alla fase specificate.

**Nota**  
Per creare mappature API con più livelli, è necessario utilizzare `apigatewayv2`.

```
aws apigatewayv2 create-api-mapping \
    --domain-name api.example.com \
    --api-mapping-key v1/orders \
    --api-id a1b2c3d4 \
    --stage test
```

------
#### [ CloudFormation ]

L' CloudFormation esempio seguente crea una mappatura delle API.

**Nota**  
Per creare mappature API con più livelli, è necessario utilizzare `AWS::ApiGatewayV2`.

```
MyApiMapping:
  Type: 'AWS::ApiGatewayV2::ApiMapping'
  Properties:
    DomainName: api.example.com
    ApiMappingKey: 'orders/v2/items'
    ApiId: !Ref MyApi
    Stage: !Ref MyStage
```

------

# Tipi di indirizzi IP per nomi di dominio personalizzati in API Gateway
<a name="rest-custom-domain-ip-address-type"></a>

Quando crei un nome di dominio personalizzato, specifichi il tipo di indirizzi IP che possono richiamare il tuo dominio. Puoi scegliere di risolvere IPv4 gli indirizzi IPv4 per richiamare il tuo dominio oppure puoi scegliere dualstack per consentire sia IPv4 agli indirizzi che agli IPv6 indirizzi di richiamare il tuo dominio. Ti consigliamo di impostare il tipo di indirizzo IP su dualstack per ridurre l'esaurimento dello spazio IP o per il tuo livello di sicurezza. [Per ulteriori informazioni sui vantaggi di un tipo di indirizzo IP dualstack, consulta on. IPv6 AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html)

È possibile modificare il tipo di indirizzo IP aggiornando la configurazione dell'endpoint del nome di dominio.

## Considerazioni sui tipi di indirizzi IP
<a name="api-gateway-ip-address-type-considerations"></a>

Le seguenti considerazioni potrebbero influire sull'utilizzo dei tipi di indirizzi IP.
+ Il tipo di indirizzo IP predefinito per i nomi di dominio personalizzati per il pubblico di API Gateway APIs è IPv4.
+ I nomi di dominio personalizzati privati possono avere solo un tipo di indirizzo IP dualstack.
+ Non è necessario che il nome di dominio personalizzato abbia lo stesso tipo di indirizzo IP per tutti gli indirizzi APIs mappati su di esso. Se disabiliti l'endpoint API predefinito, ciò potrebbe influire sul modo in cui i chiamanti possono richiamare il tuo dominio.

## Modifica il tipo di indirizzo IP di un nome di dominio personalizzato
<a name="rest-custom-domain-ip-address-type-change"></a>

È possibile modificare il tipo di indirizzo IP aggiornando la configurazione dell'endpoint del nome di dominio. È possibile aggiornare la configurazione dell'endpoint utilizzando il Console di gestione AWS AWS CLI CloudFormation, o un AWS SDK.

------
#### [ Console di gestione AWS ]

**Per modificare il tipo di indirizzo IP di un nome di dominio personalizzato**

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

1. Scegli un nome di dominio pubblico personalizzato.

1. Scegli la **configurazione dell'endpoint**.

1. Per il tipo di indirizzo IP, seleziona uno **IPv4**o **Dualstack**.

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

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente aggiorna un'API in modo che abbia un tipo di indirizzo IP dualstack:

```
aws apigateway update-domain-name \
    --domain-name dualstack.example.com \
    --patch-operations "op='replace',path='/endpointConfiguration/ipAddressType',value='dualstack'"
```

L'output sarà simile al seguente:

```
{
    "domainName": "dualstack.example.com",
    "certificateUploadDate": "2025-02-04T14:46:10-08:00",
    "regionalDomainName": "d-abcd1234.execute-api.us-east-1.amazonaws.com",
    "regionalHostedZoneId": "Z3LQWSYCGH4ADY",
    "regionalCertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "domainNameStatus": "AVAILABLE",
    "securityPolicy": "TLS_1_2",
    "tags": {}
}
```

------

# Scegli una politica di sicurezza per il tuo dominio personalizzato in API Gateway
<a name="apigateway-custom-domain-tls-version"></a>

Una *policy di sicurezza* è una combinazione predefinita di versione TLS minima e suite di crittografia offerta da Gateway API. Quando i client stabiliscono un handshake TLS sull’API o sul nome di dominio personalizzato, la policy di sicurezza applica la versione di TLS e il pacchetto di crittografia accettato da API Gateway. Le politiche di sicurezza proteggono i tuoi nomi di dominio APIs e quelli personalizzati da problemi di sicurezza della rete, come la manomissione e l'intercettazione tra un client e un server.

API Gateway supporta policy di sicurezza legacy e policy di sicurezza avanzate. `TLS_1_0`e `TLS_1_2` sono politiche di sicurezza obsolete. Utilizza queste politiche di sicurezza per carichi di lavoro generalizzati o per iniziare a creare un'API. Qualsiasi politica che inizia con `SecurityPolicy_` è una politica di sicurezza avanzata. Utilizza queste policy per carichi di lavoro regolamentati, governance avanzata o per utilizzare la crittografia post-quantistica. Quando utilizzi una policy di sicurezza avanzata, devi anche impostare la modalità di accesso agli endpoint per una governance aggiuntiva. Per ulteriori informazioni, consulta [Modalità di accesso agli endpoint](apigateway-security-policies.md#apigateway-security-policies-endpoint-access-mode).

## Considerazioni
<a name="apigateway-custom-domain-tls-version-considerations"></a>

Di seguito sono riportate le considerazioni relative alle politiche di sicurezza per i nomi di dominio personalizzati per REST APIs in API Gateway:
+ Non è possibile abilitare il TLS reciproco su un nome di dominio che utilizza una politica di sicurezza avanzata.
+ Non è possibile mappare un'API HTTP a un nome di dominio che utilizza una politica di sicurezza avanzata.
+ Se abiliti la mappatura del percorso di base a più livelli su un'API REST che utilizza una politica di sicurezza avanzata, non puoi creare una mappatura del percorso di base su un'API HTTP per lo stesso nome di dominio.
+ La tua API può essere mappata su un nome di dominio personalizzato con una politica di sicurezza diversa dalla tua API. Quando richiami quel nome di dominio personalizzato, API Gateway utilizza la politica di sicurezza dell'API per negoziare l'handshake TLS. Se si disabilita l’endpoint API predefinito, si potrebbe influire sul modo in cui i chiamanti possono invocare l’API.
+ API Gateway supporta le politiche di sicurezza su tutti APIs. Tuttavia, puoi scegliere solo una politica di sicurezza per REST APIs. API Gateway supporta solo la politica `TLS_1_2` di sicurezza per HTTP o WebSocket APIs.
+ API Gateway non supporta l'aggiornamento di una policy di sicurezza per un nome di dominio con più tipi di endpoint. Se disponi di più tipi di endpoint per un nome di dominio, eliminane uno per aggiornare la politica di sicurezza.

## In che modo API Gateway applica le politiche di sicurezza
<a name="apigateway-custom-domain-tls-version-understanding"></a>

L'esempio seguente mostra come API Gateway applica le policy di `SecurityPolicy_TLS13_1_3_2025_09` sicurezza utilizzando la policy di sicurezza come esempio.

La politica `SecurityPolicy_TLS13_1_3_2025_09` di sicurezza accetta il traffico TLS 1.3 e rifiuta il traffico TLS 1.2 e TLS 1.0. Per il traffico TLS 1.3, la politica di sicurezza accetta le seguenti suite di crittografia:
+ `TLS_AES_128_GCM_SHA256`
+ `TLS_AES_256_GCM_SHA384`
+ `TLS_CHACHA20_POLY1305_SHA256`

API Gateway non accetta altre suite di crittografia. Ad esempio, la politica di sicurezza rifiuterebbe qualsiasi traffico TLS 1.3 che utilizza la suite di crittografia. `AES128-SHA`

Per monitorare il protocollo TLS e i client di crittografia utilizzati per accedere al tuo API Gateway, puoi utilizzare le variabili `$context.tlsVersion` e di `$context.cipherSuite` contesto nei tuoi log di accesso. Per ulteriori informazioni, consulta [Monitoraggio delle REST API in Gateway API](rest-api-monitor.md).

Per visualizzare le politiche di sicurezza predefinite per tutti i nomi di dominio REST APIs e personalizzati, consulta. [Politiche di sicurezza predefinite](apigateway-security-policies-list.md#apigateway-security-policies-default) Per visualizzare le politiche di sicurezza supportate per tutti i nomi di dominio REST APIs e personalizzati, vedere[Policy di sicurezza supportate](apigateway-security-policies-list.md).

## Modifica la politica di sicurezza del tuo nome di dominio personalizzato
<a name="apigateway-security-policies-update-custom-domain-name"></a>

Se modifichi la politica di sicurezza, il completamento dell'aggiornamento richiede circa 15 minuti. Puoi monitorare il tuo nome `lastUpdateStatus` di dominio personalizzato. Man mano che il nome di dominio personalizzato `lastUpdateStatus` viene aggiornato, lo sarà `PENDING` e quando sarà `AVAILABLE` completato.

Quando utilizzi una politica di sicurezza che inizia con`SecurityPolicy_`, devi anche attivare la modalità di accesso agli endpoint. Per ulteriori informazioni, consulta [Modalità di accesso agli endpoint](apigateway-security-policies.md#apigateway-security-policies-endpoint-access-mode).

------
#### [ Console di gestione AWS ]

**Per modificare la politica di sicurezza di un nome di dominio personalizzato**

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

1. Scegli un nome di dominio personalizzato che invii il traffico a REST. APIs

   Assicurati che ci sia un solo tipo di endpoint associato al tuo nome di dominio personalizzato.

1. Scegli **Impostazioni personalizzate del nome di dominio**, quindi scegli **Modifica**.

1. Per **Politica di sicurezza**, seleziona una nuova politica.

1. Per la **modalità di accesso agli endpoint**, scegli **Strict**.

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

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente aggiorna un nome di dominio per utilizzare la politica `SecurityPolicy_TLS13_1_3_2025_09` di sicurezza:

```
aws apigateway update-domain-name \
    --domain-name example.com \
    --patch-operations '[
        {
            "op": "replace",
            "path": "/securityPolicy",
            "value": "SecurityPolicy_TLS13_1_3_2025_09"
        }, 
        {
            "op": "replace",
            "path": "/endpointAccessMode",
            "value": "STRICT"
        }
    ]'
```

L'output sarà simile al seguente:

```
{
   "domainName": "example.com",
   "endpointConfiguration": { 
      "types": [ "REGIONAL" ], 
      "ipAddressType": "dualstack" 
   },
   "regionalCertificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
   "securityPolicy": "SecurityPolicy_TLS13_1_3_2025_09",
   "endpointAccessMode": "STRICT"
}
```

------

## Informazioni su HTTP APIs e WebSocket APIs
<a name="apigateway-rest-additional-apis"></a>

Per ulteriori informazioni su HTTP APIs e WebSocket APIs, vedere [Politica di sicurezza per HTTP APIs in API Gateway](http-api-ciphers.md) e[Politica di sicurezza per WebSocket APIs API Gateway](websocket-api-ciphers.md).

# Disabilita l'endpoint predefinito per REST APIs
<a name="rest-api-disable-default-endpoint"></a>

Per impostazione predefinita, i client possono richiamare l'API utilizzando l'endpoint `execute-api` generato da API Gateway per l'API. Per garantire che i client possano accedere all'API solo utilizzando un nome di dominio personalizzato con l'autenticazione TLS reciproca, disattivare l'endpoint `execute-api` predefinito. I client possono comunque connettersi all'endpoint predefinito, ma riceveranno un codice di stato `403 Forbidden`. La disabilitazione dell’endpoint predefinito influisce su tutte le fasi dell’API. Questa impostazione diventa effettiva quando si aggiorna un’impostazione su una fase, ad esempio quando si aggiorna l’implementazione sulla fase.

La procedura seguente mostra come disabilitare l'endpoint predefinito per una REST API.

------
#### [ Console di gestione AWS ]

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

1. Scegliere una REST API.

1. Nel pannello di navigazione principale scegli **Impostazioni API**.

1. Scegliere un'API.

1. In **Dettagli API** seleziona **Modifica**.

1. Per **Endpoint predefinito** seleziona **Inattivo**.

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

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

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

1. Implementa nuovamente l’API in una fase o aggiorna un’impostazione su una fase per rendere effettivo l’aggiornamento.

------
#### [ AWS CLI ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente disabilita l'endpoint predefinito: 

```
aws apigateway update-rest-api \
    --rest-api-id abcdef123 \
    --patch-operations op=replace,path=/disableExecuteApiEndpoint,value='True'
```

Dopo aver disabilitato l'endpoint predefinito, è necessario distribuire l'API per rendere effettiva la modifica.

Il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente crea un’implementazione e la associa a una fase:

```
aws apigateway create-deployment \
    --rest-api-id abcdef123 \
    --stage-name dev
```

------

# Configurazione dei controlli dell'integrità personalizzati per failover DNS per un'API di Gateway API
<a name="dns-failover"></a>

Puoi utilizzare i controlli di integrità di Amazon Route 53 per controllare il failover DNS da un'API API Gateway in una regione primaria Regione AWS a una in una regione secondaria. Questo può aiutare a mitigare gli impatti in caso di problema regionale. Se si utilizza un dominio personalizzato, è possibile eseguire il failover senza richiedere ai client di modificare gli endpoint API.

Quando si sceglie [Evaluate Target Health](https://docs.aws.amazon.com/Route53/latest/APIReference/API_AliasTarget.html#Route53-Type-AliasTarget-EvaluateTargetHealth>Evaluate Target Health) (Valutazione dello stato target) per un record alias, tali record non riescono solo quando il servizio API Gateway non è disponibile nella regione. In alcuni casi, il tuo API Gateway APIs può subire interruzioni prima di quel momento. Per controllare direttamente il failover DNS, configura i controlli di integrità personalizzati di Route 53 per il tuo API Gateway. APIs Per questo esempio, si utilizza un CloudWatch allarme che aiuta gli operatori a controllare il failover DNS. Per altri esempi e altre considerazioni sulla configurazione del failover, consulta [Creazione di meccanismi di disaster recovery utilizzando Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/) ed [Esecuzione dei controlli di integrità di Route 53 su risorse private in un VPC](https://aws.amazon.com/blogs/networking-and-content-delivery/performing-route-53-health-checks-on-private-resources-in-a-vpc-with-aws-lambda-and-amazon-cloudwatch/) con e. AWS Lambda CloudWatch

**Topics**
+ [Prerequisiti](#dns-failover-prereqs)
+ [Fase 1: Configurazione delle risorse](#dns-failover-intial-setup)
+ [Fase 2: Avvio del failover nella regione secondaria](#dns-failover-initiate)
+ [Fase 3: Test del failover](#dns-failover-test)
+ [Fase 4: Ritorno alla regione primaria](#dns-failover-return)
+ [Fasi successive: personalizzare e verificare periodicamente](#dns-failover-next-steps)

## Prerequisiti
<a name="dns-failover-prereqs"></a>

Per completare questa procedura, è necessario creare e configurare le risorse seguenti:
+ Un nome di dominio di cui si è proprietari.
+ Un certificato ACM per quel nome di dominio in due. Regioni AWS Per ulteriori informazioni, consulta [Prerequisiti per i nomi di dominio personalizzati](how-to-custom-domains.md#how-to-custom-domains-prerequisites).
+ Una zona ospitata Route 53 per il nome di dominio in uso. Per ulteriori informazioni, consulta [Utilizzo delle zone ospitate](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) nella Guida per gli sviluppatori di Amazon Route 53.

Per ulteriori informazioni su come creare record DNS di failover Route 53 per i nomi di dominio, consulta [Scelta una policy di instradamento](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html) nella Guida per sviluppatori Amazon Route 53. Per ulteriori informazioni su come monitorare un CloudWatch allarme, consulta [Monitoring a CloudWatch alarm](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-creating-values.html#health-checks-creating-values-cloudwatch) nella Amazon Route 53 Developer Guide.

## Fase 1: Configurazione delle risorse
<a name="dns-failover-intial-setup"></a>

In questo esempio, vengono create le seguenti risorse per configurare il failover DNS per il nome di dominio in uso:
+ API Gateway APIs in due Regioni AWS
+ Nomi di dominio personalizzati API Gateway con lo stesso nome in due Regioni AWS
+ Mappature API Gateway che collegano l'API Gateway APIs ai nomi di dominio personalizzati
+ Record DNS di failover di Route 53 per i nomi di dominio
+ Un CloudWatch allarme nella regione secondaria
+ Un controllo dello stato di salute della Route 53 basato sull' CloudWatch allarme nella regione secondaria

Innanzitutto, accertarsi di disporre di tutte le risorse richieste nelle regioni primaria e secondaria. La regione secondaria deve contenere l'allarme e il controllo dell'integrità. In questo modo, non si dipende dalla regione primaria per eseguire il failover. Ad esempio, CloudFormation i modelli che creano queste risorse, vedi [samples/primary.zip](samples/primary.zip)e [samples/secondary.zip](samples/secondary.zip).

**Importante**  
Prima del failover nella regione secondaria, accertarsi che tutte le risorse necessarie siano disponibili. In caso contrario, l'API non sarà pronta per il traffico nella regione secondaria. 

## Fase 2: Avvio del failover nella regione secondaria
<a name="dns-failover-initiate"></a>

Nell'esempio seguente, la regione di standby riceve una CloudWatch metrica e avvia il failover. Utilizziamo una metrica personalizzata che richiede l'intervento dell'operatore per avviare il failover.

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 1 \
    --region us-west-1
```

Sostituisci i dati metrici con i dati corrispondenti per l'allarme che hai configurato. CloudWatch 

## Fase 3: Test del failover
<a name="dns-failover-test"></a>

Richiamare l'API e verificare di ricevere una risposta dalla regione secondaria. Se si sono utilizzati i modelli di esempio della fase 1, la risposta cambia da `{"message": "Hello from the primary Region!"}` a `{"message": "Hello from the secondary Region!"}` dopo il failover.

```
curl https://my-api.example.com

{"message": "Hello from the secondary Region!"}
```

## Fase 4: Ritorno alla regione primaria
<a name="dns-failover-return"></a>

Per tornare alla regione principale, invia una CloudWatch metrica che determini il superamento del controllo sanitario.

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 0 \
    --region us-west-1
```

Sostituisci i dati metrici con i dati corrispondenti per l' CloudWatch allarme che hai configurato.

Richiamare l'API e verificare di ricevere una risposta dalla regione primaria. Se si sono utilizzati i modelli di esempio della fase 1, la risposta cambia da `{"message": "Hello from the secondary Region!"}` a `{"message": "Hello from the primary Region!"}`.

```
curl https://my-api.example.com

{"message": "Hello from the primary Region!"}
```

## Fasi successive: personalizzare e verificare periodicamente
<a name="dns-failover-next-steps"></a>

Questo esempio dimostra un modo per configurare il failover DNS. È possibile utilizzare una varietà di CloudWatch metriche o endpoint HTTP per i controlli di integrità che gestiscono il failover. Verificare periodicamente i meccanismi di failover per accertarsi che funzionino come previsto e che gli operatori conoscano le procedure di failover.

# Ottimizzazione delle prestazioni di REST APIs
<a name="rest-api-optimize"></a>

Dopo aver reso disponibile la tua API per essere chiamata, potrebbe essere necessario ottimizzarla per renderla più reattività. API Gateway fornisce alcune strategie per ottimizzare l'API, come il caching delle risposte e la compressione del payload. In questa sezione viene descritto come abilitare queste funzionalità.

**Topics**
+ [Impostazioni della cache per REST APIs in API Gateway](api-gateway-caching.md)
+ [Compressione del payload per REST APIs in API Gateway](api-gateway-gzip-compression-decompression.md)

# Impostazioni della cache per REST APIs in API Gateway
<a name="api-gateway-caching"></a>

Puoi abilitare il caching delle API in Gateway API per memorizzare nella cache le risposte dell'endpoint. Con il caching, è possibile ridurre il numero di chiamate effettuate all'endpoint e migliorare la latenza delle richieste all'API.

Quando abiliti la memorizzazione nella cache per una fase, API Gateway memorizza nella cache le risposte dall'endpoint per un periodo specificato time-to-live (TTL), in secondi. Per rispondere alla richiesta, API Gateway ricerca la risposta dell'endpoint nella cache anziché effettuare una richiesta all'endpoint. Il valore predefinito di TTL per il caching dell'API è 300 secondi. Il valore massimo di TTL è 3600 secondi. TTL=0 indica che il caching è disabilitato.

**Nota**  
Il caching è il miglior tentativo. Puoi utilizzare le `CacheMissCount` metriche `CacheHitCount` e in Amazon CloudWatch per monitorare le richieste che API Gateway fornisce dalla cache delle API.

La dimensione massima di una risposta che può essere memorizzata nella cache è 1048576 byte. la crittografia dei dati della cache può aumentare le dimensioni della risposta quando viene memorizzata nella cache.

Questo è un servizio idoneo ai fini HIPAA. [Per ulteriori informazioni sull' AWS U.S. Health Insurance Portability and Accountability Act del 1996 (HIPAA) e sull'utilizzo AWS dei servizi per elaborare, archiviare e trasmettere informazioni sanitarie protette (PHI), vedere Panoramica HIPAA.](https://aws.amazon.com/compliance/hipaa-compliance/)

**Importante**  
Quando abiliti il caching per una fase, il sistema di caching sarà abilitato per impostazione predefinita solo per i metodi `GET`. Ciò consente di garantire la sicurezza e la disponibilità dell'API. Puoi abilitare il caching per altri metodi [ignorando le impostazioni del metodo](#override-api-gateway-stage-cache-for-method-cache).

**Importante**  
Per il caching viene applicato un addebito orario in base alle dimensioni della cache selezionata. Il caching non è idoneo per il piano gratuito. AWS Per ulteriori informazioni, consulta [Prezzi di API Gateway](https://aws.amazon.com/api-gateway/pricing/).

## Abilitazione del caching di Amazon API Gateway
<a name="enable-api-gateway-caching"></a>

In Gateway API è possibile abilitare il caching per una fase specifica.

 Quando abiliti il caching, devi scegliere una capacità di cache. In generale, una capacità più ampia garantisce prestazioni migliori ma comporta costi più alti. Per le dimensioni della cache supportate, [cacheClusterSize](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateStage.html#apigw-CreateStage-request-cacheClusterSize)consulta l'*API Gateway API Reference*.

 Il caching in API Gateway è consentito mediante la creazione di un'istanza di cache dedicata. Questo processo può richiedere fino a 4 minuti. 

La capacità di caching può essere modificata in API Gateway rimuovendo l'istanza di cache esistente e creandone una nuova con una capacità modificata. Tutti i dati esistenti memorizzati nella cache vengono eliminati. 

**Nota**  
La capacità della cache influisce sulla CPU, sulla memoria e sulla larghezza di banda della rete dell'istanza della cache. Di conseguenza, la capacità della cache può influire sulle prestazioni della cache.   
API Gateway consiglia di eseguire un test di caricamento di 10 minuti per verificare che la capacità della cache sia appropriata per il carico di lavoro. Assicurati che il traffico durante il test di carico rispecchi il traffico di produzione. Ad esempio, includi un aumento graduale, un traffico costante e picchi di traffico. Il test di caricamento deve includere risposte che possono essere fornite dalla cache, nonché risposte univoche che aggiungono elementi alla cache. Durante il test di caricamento, monitora i parametri di latenza, 4xx, 5xx, hit della cache e mancato riscontro nella cache. In base a questi parametri, regola la capacità della cache a seconda delle esigenze. Per ulteriori informazioni sul test di carico, consulta [Come faccio a selezionare la migliore capacità di Amazon API Gateway Cache per evitare di raggiungere un limite di velocità?](https://repost.aws/knowledge-center/api-gateway-cache-capacity).

------
#### [ Console di gestione AWS ]

 Nella console Gateway API, è possibile configurare il caching nella pagina **Fasi**. Viene effettuato il provisioning della cache della fase desiderata e specificata un'impostazione di cache predefinita a livello di metodo. Attivando la cache predefinita a livello di metodo, il caching a livello di metodo viene attivato per tutti i metodi `GET` nella fase, a meno che il metodo in questione non disponga di una sostituzione dedicata. Tutti i metodi `GET` aggiuntivi che implementi nella fase disporranno di una cache a livello di metodo. Per configurare l'impostazione del caching a livello di metodo per metodi specifici nella fase, è possibile utilizzare le sostituzioni dei metodi. Per ulteriori informazioni sulle sostituzioni dei metodi, consulta [Sostituzione del caching a livello di fase di Gateway API per il caching a livello di metodo](#override-api-gateway-stage-cache-for-method-cache).

**Per configurare il caching dell'API per una fase specifica:**

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

1. Scegliere **Stages (Fasi)**.

1. Nell'elenco **Stages (Fasi)** dell'API, selezionare la fase.

1. Nella sezione **Dettagli fase** scegli **Modifica**.

1. In **Impostazioni aggiuntive**, per **Impostazioni cache** attiva **Cache API con provisioning**.

   In questo modo viene effettuato il provisioning di un cluster di cache per la fase.

1. Per attivare il caching per la fase, attiva **Memorizzazione nella cache predefinita a livello di metodo**.

   In questo modo viene attivato il caching a livello di metodo per tutti i metodi `GET` nella fase. Tutti i metodi `GET` aggiuntivi che implementi nella fase disporranno di una cache a livello di metodo. 
**Nota**  
Se hai un'impostazione esistente per una cache a livello di metodo, la modifica dell'impostazione del caching predefinito a livello di metodo non influisce sull'impostazione esistente.  
![\[Attiva la cache API con provisioning e il caching predefinito a livello di metodo.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-caching-stage-flow.png)

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

------
#### [ AWS CLI ]

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna una fase per allocare una cache e attiva il caching a livello di metodo per tutti i metodi `GET` della fase:

```
aws apigateway update-stage \
    --rest-api-id a1b2c3 \
    --stage-name 'prod' \
    --patch-operations file://patch.json
```

Il contenuto di `patch.json` è il seguente:

```
[
     {
          "op": "replace",
          "path": "/cacheClusterEnabled",
          "value": "true"
     },
     {
          "op": "replace",
          "path": "/cacheClusterSize",
          "value": "0.5"
     },
     {
        "op": "replace",
        "path": "/*/*/caching/enabled",
        "value": "true"
     }
]
```

**Nota**  
Se hai un'impostazione esistente per una cache a livello di metodo, la modifica dell'impostazione del caching predefinito a livello di metodo non influisce sull'impostazione esistente.

------

**Nota**  
 Per completare la creazione o l'eliminazione di una cache, API Gateway impiega circa 4 minuti.   
Una volta creata la cache, il valore **Cluster di cache** cambia da `Create in progress` a `Active`. Quando invece viene completata l'eliminazione della cache, il valore **Cluster di cache** cambia da `Delete in progress` a `Inactive`.  
Quando attivi il caching a livello di metodo per tutti i metodi della fase, il valore **Memorizzazione nella cache predefinita a livello di metodo** cambia in `Active`. Se disattivi il caching a livello di metodo per tutti i metodi della fase, il valore **Memorizzazione nella cache predefinita a livello di metodo** cambia in `Inactive`. Se hai un'impostazione esistente per una cache a livello di metodo, la modifica dello stato della cache non influisce su tale impostazione. 

Se abiliti il caching in **Impostazioni cache** di una fase, vengono memorizzati nella cache solo i metodi `GET`. Per garantire la sicurezza e la disponibilità dell'API, ti consigliamo di non modificare questa impostazione. Tuttavia, puoi abilitare il caching per altri metodi [ignorando le impostazioni del metodo](#override-api-gateway-stage-cache-for-method-cache).

 Puoi verificare che il caching funzioni come previsto in due modi: 
+  Ispeziona le CloudWatch metriche di e per la tua API **CacheHitCount**e il tuo stage **CacheMissCount**. 
+  Inserisci un timestamp nella risposta. 

**Nota**  
Non utilizzare l'`X-Cache`intestazione della CloudFront risposta per determinare se l'API viene fornita dall'istanza della cache di API Gateway.

## Sostituzione del caching a livello di fase di Gateway API per il caching a livello di metodo
<a name="override-api-gateway-stage-cache-for-method-cache"></a>

Puoi ignorare le impostazioni della cache a livello di fase attivando o disattivando il caching per un metodo specifico. È possibile anche modificare il periodo TTL oppure attivare o disattivare la crittografia per le risposte memorizzate nella cache. 

Se si prevede che nelle risposte di un metodo che si sta memorizzando nella cache siano inclusi dati sensibili, crittografare i dati della cache. Potrebbe essere necessario eseguire questa operazione per rispettare vari framework di conformità. Per ulteriori informazioni, consultare [Amazon API Gateway controls](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) nella *Guida per l’utente di AWS Security Hub *.

------
#### [ Console di gestione AWS ]

La modifica dell'impostazione del caching predefinito a livello di metodo nei **dettagli della fase** non influisce sulle impostazioni della cache a livello di metodo che dispongono di sostituzioni.

Se prevedi che nelle risposte di un metodo che si sta memorizzando nella cache siano inclusi dati sensibili, in **Cache Settings (Impostazioni cache)**, scegliere **Encrypt cache data (Crittografa dati cache)**.

**Per configurare il caching dell'API per i singoli metodi utilizzando la console:**

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

1. Selezionare l'API.

1. Scegliere **Stages (Fasi)**.

1. Nell'elenco **Stages (Fasi)** dell'API, espandere la fase e scegliere un metodo nell'API.

1. Nella sezione **Sostituzioni del metodo**, scegli **Modifica**.

1. Nella sezione **Impostazioni metodo**, attiva o disattiva **Abilita cache metodo** o personalizza le altre opzioni desiderate.
**Nota**  
Il caching non è attivo finché non si effettua il provisioning di un cluster di cache per la fase.

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

------
#### [ AWS CLI ]

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente disattiva la cache solo per il metodo `GET /pets`:

```
aws apigateway update-stage /
    --rest-api-id a1b2c3 /
    --stage-name 'prod' /
    --patch-operations file://patch.json
```

Il contenuto di `patch.json` è il seguente:

```
[{
        "op": "replace",
        "path": "/~1pets/GET/caching/enabled",
        "value": "false"
}]
```

------

## Uso dei parametri di metodo o di integrazione come chiavi di cache per indicizzare le risposte memorizzate nella cache
<a name="enable-api-gateway-cache-keys"></a>

Puoi utilizzare parametri di metodo o di integrazione come chiavi di cache per indicizzare le risposte memorizzate nella cache Sono inclusi: intestazioni personalizzate, percorsi URL o stringhe di query. È possibile specificare alcuni o tutti i parametri come chiave di cache, ma è necessario specificare almeno un valore. Se disponi di una chiave di cache, Gateway API memorizza nella cache le risposte di ciascun valore di chiave separatamente, anche quando la chiave di cache non è presente.

**Nota**  
Le chiavi di cache sono necessarie per la configurazione del caching su una risorsa.

 Ad esempio, supponiamo di avere una richiesta espressa nel seguente formato: 

```
GET /users?type=... HTTP/1.1
host: example.com
...
```

In questa richiesta `type` può assumere il valore `admin` o `regular`. Se includi il parametro `type` come parte della chiave di cache, le risposte da `GET /users?type=admin` vengono memorizzate nella cache separatamente da quelle di `GET /users?type=regular`. 

 Quando una richiesta di metodo o di integrazione usa più di un parametro, puoi scegliere di includere alcuni di essi o tutti per creare la chiave di cache. Ad esempio puoi includere solo il parametro `type` nella chiave di cache per la richiesta seguente, eseguita nell'ordine elencato in un periodo TTL: 

```
GET /users?type=admin&department=A HTTP/1.1
host: example.com
...
```

 La risposta da questa richiesta viene memorizzata nella cache e utilizzata per servire la seguente richiesta: 

```
GET /users?type=admin&department=B HTTP/1.1
host: example.com
...
```

------
#### [ Console di gestione AWS ]

Per includere un parametro della richiesta di metodo o di integrazione in una chiave di cache nella console API Gateway, seleziona **Caching** dopo avere aggiunto il parametro. 

![\[Inclusione dei parametri di metodo o di integrazione come chiavi di cache per indicizzare la risposta memorizzata nella cache\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-caching-including-parameter-as-cache-key-new-console.png)


------
#### [ AWS CLI ]

Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea un metodo `GET` e richiede il parametro della stringa di query `type`:

```
aws apigateway put-method /
    --rest-api-id a1b2c3 /
    --resource-id aaa111 /
    --http-method GET /
    --authorization-type "NONE" /
    --request-parameters "method.request.querystring.type=true"
```

Il comando [put-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-integration.html) seguente crea un’integrazione per il metodo `GET` con un endpoint HTTP e specifica che Gateway API memorizza nella cache il parametro della richiesta di metodo `type`.

```
aws apigateway put-integration /
    --rest-api-id a1b2c3 /
    --resource-id aaa111 /
    --http-method GET /
    --type HTTP /
    --integration-http-method GET /
    --uri 'https://example.com' /
    --cache-key-parameters "method.request.querystring.type"
```

Per specificare che Gateway API memorizzi nella cache un parametro della richiesta di integrazione, utilizzare `integration.request.location.name` come parametro della chiave di cache.

------

## Scaricare la cache della fase API in API Gateway
<a name="flush-api-caching"></a>

Quando il caching dell'API è abilitato, puoi scaricare la cache della fase API per garantire che i client dell'API ricevano le risposte più recenti dagli endpoint di integrazione.

------
#### [ Console di gestione AWS ]

**Per svuotare la cache della fase API**

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

1. Scegliere un’API che abbia una fase con una cache.

1. Nel riquadro di navigazione principale scegliere **Fasi**, quindi scegliere una fase con una cache.

1. Scegliere il menu **Operazioni fase**, quindi selezionare **Svuota cache della fase**.

------
#### [ AWS CLI ]

Il [flush-stage-cache](https://docs.aws.amazon.com/cli/latest/reference/apigateway/flush-stage-cache.html)comando seguente svuota la cache dello stage:

```
aws apigateway flush-stage-cache \
    --rest-api-id a1b2c3 \
    --stage-name prod
```

------

**Nota**  
Una volta scaricata la cache, le risposte vengono servite dall'endpoint di integrazione fino a quando la cache non viene creata nuovamente. Durante questo periodo, il numero di richieste inviate all'endpoint di integrazione potrebbe aumentare. L'operazione potrebbe aumentare temporaneamente la latenza complessiva delle API. 

## Invalidare una voce della cache di API Gateway
<a name="invalidate-method-caching"></a>

Un client dell'API può invalidare una voce cache esistente e ricaricarla dall'endpoint di integrazione per le singole richieste. Il client deve inviare una richiesta contenente l'intestazione `Cache-Control: max-age=0`. Il client riceve la risposta direttamente dall'endpoint di integrazione anziché dalla cache, a condizione che il client sia autorizzato a eseguire questa operazione. In questo modo, la voce di cache esistente viene sostituita con la nuova risposta recuperata dall'endpoint di integrazione. 

 Per concedere l'autorizzazione per un client, collegare una policy del formato seguente a un ruolo di esecuzione IAM per l'utente.

**Nota**  
La convalida della cache tra più account non è supportata.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:InvalidateCache"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:111111111111:api-id/stage-name/GET/resource-path-specifier"
            ]
        }
    ]
}
```

------

 Questa policy consente al servizio di esecuzione API Gateway di invalidare la cache per le richieste nella risorsa o nelle risorse specificate. Per specificare un gruppo di risorse di destinazione, usa un carattere jolly (\$1) per `account-id`, `api-id` e altre voci nel valore ARN di `Resource`. Per ulteriori informazioni su come impostare le autorizzazioni per il servizio di esecuzione API Gateway, consulta [Controllo degli accessi a una REST API con le autorizzazioni IAM](permissions.md). 

 Se non imponi una policy `InvalidateCache` (o scegli la casella di controllo **Require authorization (Richiedi autorizzazione)** nella console), qualsiasi client può invalidare la cache di API. Se tutti i client o la maggior parte di essi invalidano la cache dell'API, si potrebbe avere un aumento significativo sulla latenza dell'API. 

 Quando la policy è attiva, il caching è abilitato e l'autorizzazione è richiesta.

È possibile specificare il modo in cui Gateway API gestisce le richieste non autorizzate scegliendo tra le seguenti opzioni:

**Col codice stato 403 la richiesta ha esito negativo**  
Gateway API restituisce una risposta `403 Unauthorized`.  
 Per impostare questa opzione utilizzando l'API, usa `FAIL_WITH_403`.

**Ignora intestazione controllo cache, aggiungi un avviso nell’intestazione della risposta**  
Gateway API elabora la richiesta e aggiunge un’intestazione di avviso nella risposta.  
 Per impostare questa opzione utilizzando l'API, usa `SUCCEED_WITH_RESPONSE_HEADER`. 

**Ignora intestazione controllo cache**  
Gateway API elabora la richiesta senza aggiungere un’intestazione di avviso nella risposta.  
 Per impostare questa opzione utilizzando l'API, usa `SUCCEED_WITHOUT_RESPONSE_HEADER`.

È possibile impostare il comportamento di gestione delle richieste non autorizzate tramite la console Gateway API o AWS CLI.

------
#### [ Console di gestione AWS ]

**Per specificare come vengono gestite le richieste non autorizzate**

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

1. Scegliere un’API che abbia una fase con una cache.

1. Nel riquadro di navigazione principale scegliere **Fasi**, quindi scegliere una fase con una cache.

1. Per **Dettagli fase**, scegliere **Modifica**.

1. Per **Gestione delle richieste non autorizzate**, selezionare un’opzione.

1. Scegli **Continua**.

1. Esamina le modifiche e scegli **Salva modifiche**.

------
#### [ AWS CLI ]

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente aggiorna una fase per gestire le richieste non autorizzate con esito negativo della richiesta e codice di stato 403:

```
aws apigateway update-stage /
    --rest-api-id a1b2c3 /
    --stage-name 'prod' /
    --patch-operations 'op=replace,path=/*/*/caching/unauthorizedCacheControlHeaderStrategy,value="FAIL_WITH_403"'
```

------

## CloudFormation esempio di stage con cache
<a name="cfn-cache-example"></a>

Il CloudFormation modello seguente crea un'API di esempio, fornisce una cache `0.5` da GB per lo `Prod` stage e attiva la memorizzazione nella cache a livello di metodo per tutti i metodi. `GET`

**Importante**  
Per il caching viene applicato un addebito orario in base alle dimensioni della cache selezionata. Il caching non rientra nel piano gratuito di AWS . Per ulteriori informazioni, consulta [Prezzi di API Gateway](https://aws.amazon.com/api-gateway/pricing/).

### CloudFormation Modello di esempio
<a name="cfn-cache-example-code"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: cache-example
  PetsResource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'pets'
  PetsMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: GET
      ApiKeyRequired: true
      AuthorizationType: NONE
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - PetsMethodGet
    Properties:
      RestApiId: !Ref Api
  ApiStage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
      StageName: Prod
      Description: Prod Stage with a cache
      RestApiId: !Ref Api
      DeploymentId: !Ref ApiDeployment
      CacheClusterEnabled: True
      CacheClusterSize: 0.5
      MethodSettings:
        - ResourcePath: /*
          HttpMethod: '*'
          CachingEnabled: True
```

# Compressione del payload per REST APIs in API Gateway
<a name="api-gateway-gzip-compression-decompression"></a>

 API Gateway permette al client di chiamare l'API con payload compressi usando una delle [codifiche di contenuto supportate](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). Per impostazione predefinita, API Gateway supporta la decompressione del payload di richiesta del metodo. È tuttavia necessario configurare l'API per abilitare la compressione del payload di risposta del metodo. 

 Per abilitare la compressione in un'[https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html), imposta la proprietà [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#minimumCompressionSize) su un valore intero non negativo compreso tra 0 e 10485760 (10 milioni di byte) quando crei l'API oppure dopo averla creata. Per disabilitare la compressione nell'API, imposta la proprietà `minimumCompressionSize` su null oppure rimuovila. È possibile abilitare o disabilitare la compressione per un'API utilizzando la console API Gateway AWS CLI, o l'API REST di API Gateway. 

Se desideri che la compressione venga applicata a payload di qualsiasi dimensione, imposta il valore di `minimumCompressionSize` su zero. La compressione di dati di piccole dimensioni può tuttavia comportare un aumento della dimensione finale dei dati. La compressione in API Gateway e la decompressione nel client possono inoltre comportare un aumento della latenza globale e richiedere tempi di elaborazione maggiori. Esegui test case sull'API per determinare un valore ottimale.

Il client può inviare una richiesta API con un payload compresso e un'intestazione `Content-Encoding` appropriata per consentire a Gateway API di decomprimere e applicare i modelli di mappatura appropriati prima di passare la richiesta all'endpoint di integrazione. Dopo che la compressione è stata abilitata e l'API distribuita, il client può ricevere una risposta API con un payload compresso se specifica un'intestazione `Accept-Encoding` appropriata nella richiesta del metodo. 

Quando l'endpoint di integrazione prevede e restituisce payload JSON non compressi, un modello di mappatura configurato per un payload JSON non compresso è applicabile al payload compresso. Per un payload di richiesta del metodo compresso, API Gateway decomprime il payload, applica il modello di mappatura e passa la richiesta mappata all'endpoint di integrazione. Per un payload di risposta di integrazione non compresso, API Gateway applica il modello di mappatura, comprime il payload mappato e restituisce il payload compresso al client. 

**Topics**
+ [Abilitazione della compressione del payload per un'API in Gateway API](api-gateway-enable-compression.md)
+ [Chiamata di un metodo API con un payload compresso in Gateway API](api-gateway-make-request-with-compressed-payload.md)
+ [Ricezione di una risposta API con un payload compresso in Gateway API](api-gateway-receive-response-with-compressed-payload.md)

# Abilitazione della compressione del payload per un'API in Gateway API
<a name="api-gateway-enable-compression"></a>

Puoi abilitare la compressione per un'API utilizzando la console API Gateway AWS CLI, o un AWS SDK.

Per un'API esistente, dopo aver abilitato la compressione, è necessario distribuire l'API per rendere effettiva la modifica. Per una nuova API, puoi distribuirla dopo aver terminato la configurazione.

**Nota**  
La codifica dei contenuti con la massima priorità deve essere supportata da API Gateway. In caso contrario, la compressione non viene applicata al payload della risposta.

**Topics**
+ [Abilitazione della compressione dei payload per un'API mediante la console API Gateway](#api-gateway-enable-compression-console)
+ [Abilita la compressione del payload per un'API utilizzando il AWS CLI](#api-gateway-enable-compression-cli)
+ [Codifiche di contenuto supportate da API Gateway](#api-gateway-supported-content-encodings)

## Abilitazione della compressione dei payload per un'API mediante la console API Gateway
<a name="api-gateway-enable-compression-console"></a>

Nella procedura seguente viene descritto come abilitare la compressione del payload per un'API. 

**Per abilitare la compressione del payload usando la console API Gateway**

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

1. Seleziona un'API esistente o creane una nuova.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**. 

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Attiva l'opzione **Codifica contenuto** per abilitare la compressione del payload. In **Dimensione corpo minima**, immetti un numero per la dimensione di compressione minima (in byte). Per disattivare la compressione, disattiva l'opzione **Codifica contenuto**.

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

## Abilita la compressione del payload per un'API utilizzando il AWS CLI
<a name="api-gateway-enable-compression-cli"></a>



Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente crea un'API con compressione del payload:

```
aws apigateway create-rest-api \
    --name "My test API" \
    --minimum-compression-size 0
```

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente abilita la compressione del payload per un'API esistente:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=0
```

La proprietà `minimumCompressionSize` ha un valore intero non negativo compreso tra 0 e 10485760 (10M byte). Misura la soglia di compressione. Se la dimensione del payload è inferiore a questo valore, la compressione o la decompressione non vengono applicate al payload. Impostando il valore su zero, la compressione viene applicata per qualsiasi dimensione di payload.

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente disattiva la compressione del payload:

```
aws apigateway update-rest-api \
    --rest-api-id 1234567890 \
    --patch-operations op=replace,path=/minimumCompressionSize,value=
```

È anche possibile impostare `value` su una stringa vuota `""` o omettere completamente la proprietà `value` nella chiamata precedente.

## Codifiche di contenuto supportate da API Gateway
<a name="api-gateway-supported-content-encodings"></a>

API Gateway supporta le codifiche di contenuto seguenti:
+ `deflate`
+ `gzip`
+ `identity`

API Gateway supporta anche il formato di intestazione `Accept-Encoding` seguente, in base alla specifica [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4):
+ `Accept-Encoding:deflate,gzip`
+ `Accept-Encoding:`
+ `Accept-Encoding:*`
+ `Accept-Encoding:deflate;q=0.5,gzip;q=1.0`
+ `Accept-Encoding:gzip;q=1.0,identity;q=0.5,*;q=0`

# Chiamata di un metodo API con un payload compresso in Gateway API
<a name="api-gateway-make-request-with-compressed-payload"></a>

Per effettuare una richiesta API con un payload compresso, il client deve impostare l'intestazione `Content-Encoding` con una delle [codifiche di contenuto supportate](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). 

Supponiamo che tu sia un client API e desideri chiamare il metodo PetStore API (`POST /pets`). Il metodo non deve essere chiamato usando l'output JSON seguente:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Length: ...

{
  "type": "dog",
  "price": 249.99
}
```

Deve invece essere chiamato con lo stesso payload compresso usando la codifica GZIP:

```
POST /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Content-Encoding:gzip
Content-Length: ...

���RPP*�,HU�RPJ�OW��e&���L,�,-y�j
```

Quando API Gateway riceve la richiesta, verifica se la codifica di contenuto specificata è supportata. Tenta quindi di decomprimere il payload con la codifica di contenuto specificata. Se la decompressione ha esito positivo, la richiesta viene inviata all'endpoint di integrazione. Se la codifica specificata non è supportata oppure se il payload fornito non è compresso con la codifica specificata, API Gateway restituisce la risposta di errore `415 Unsupported Media Type`. L'errore non viene registrato in CloudWatch Logs, se si verifica nella fase iniziale della decompressione prima che l'API e la fase vengano identificate. 

# Ricezione di una risposta API con un payload compresso in Gateway API
<a name="api-gateway-receive-response-with-compressed-payload"></a>

Quando effettua una richiesta in un'API abilitata per la compressione, il client può scegliere di ricevere un payload di risposta compresso con un determinato formato specificando un'intestazione `Accept-Encoding` con una [codifica di contenuto supportata](api-gateway-enable-compression.md#api-gateway-supported-content-encodings). 

API Gateway comprime il payload di risposta solo quando vengono soddisfatte le condizioni seguenti:
+  La richiesta in ingresso ha l'intestazione `Accept-Encoding` con una codifica di contenuto e un formato supportati. 
**Nota**  
Se l'intestazione non è impostata, il valore predefinito è `*`, come definito in [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4). In tal caso, API Gateway non comprime il payload. Alcuni browser o client possono aggiungere `Accept-Encoding` (ad esempio, `Accept-Encoding:gzip, deflate, br`) automaticamente alle richieste abilitate per la compressione. Ciò può attivare la compressione del payload in Gateway API. Se i valori dell'intestazione `Accept-Encoding` supportati non sono specificati in modo esplicito, API Gateway non comprime il payload. 
+  La proprietà `minimumCompressionSize` è impostata nell'API per abilitare la compressione.
+  La risposta di integrazione non ha un'intestazione `Content-Encoding`. 
+  La dimensione di un payload di risposta di integrazione, dopo l'applicazione del modello di mappatura applicabile, è maggiore o uguale al valore di `minimumCompressionSize` specificato.

API Gateway applica l'eventuale modello di mappatura configurato per la risposta di integrazione prima della compressione del payload. Se la risposta di integrazione contiene un'intestazione `Content-Encoding`, API Gateway presuppone che il payload di risposta di integrazione sia già compresso e ignora l'elaborazione della compressione.

Un esempio è l'esempio di PetStore API e la seguente richiesta:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept: application/json
```

Il back-end risponde alla richiesta con un payload JSON non compresso simile a quanto segue:

```
200 OK

[
  { 
    "id": 1, 
    "type": "dog", 
    "price": 249.99 
  }, 
  { 
    "id": 2, 
    "type": "cat", 
    "price": 124.99 
  }, 
  { 
    "id": 3, 
    "type": "fish", 
    "price": 0.99 
  } 
]
```

Per ricevere l'output come payload compresso, il client API può inviare una richiesta come illustrato di seguito:

```
GET /pets
Host: {petstore-api-id}.execute-api.{region}.amazonaws.com
Accept-Encoding:gzip
```

Il client riceve la risposta con un'intestazione `Content-Encoding` e un payload con codifica GZIP simile a quanto segue: 

```
200 OK
Content-Encoding:gzip
...

���RP�

J�)JV
�:P^IeA*������+(�L	�X�YZ�ku0L0B7!9��C#�&����Y��a���^�X
```

Quando il payload di risposta è compresso, solo la dimensione dei dati compressi viene fatturata per il trasferimento dati.

# Distribuisci il tuo REST APIs ai clienti in API Gateway
<a name="rest-api-distribute"></a>

Questa sezione fornisce dettagli sulla distribuzione del tuo API Gateway APIs ai tuoi clienti. La distribuzione dell'API include la generazione SDKs per i clienti di applicazioni da scaricare e integrare con le loro applicazioni client, la documentazione dell'API in modo che i clienti sappiano come richiamarla dalle loro applicazioni client e la messa a disposizione dell'API come parte delle offerte di prodotti.



**Topics**
+ [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md)
+ [Documentazione per REST APIs in API Gateway](api-gateway-documenting-api.md)
+ [Genera SDKs per REST APIs in API Gateway](how-to-generate-sdk.md)
+ [Vendi il tuo API Gateway APIs tramite Marketplace AWS](sell-api-as-saas-on-aws-marketplace.md)

# Piani di utilizzo e chiavi API per REST APIs in API Gateway
<a name="api-gateway-api-usage-plans"></a>

Dopo aver creato, testato e distribuito i tuoi APIs, puoi utilizzare i piani di utilizzo di API Gateway per renderli disponibili come offerte di prodotti per i tuoi clienti. Puoi configurare piani di utilizzo e chiavi API per consentire ai clienti di accedere a determinati APIs piani di utilizzo e iniziare a limitare le richieste a quelle APIs basate su limiti e quote definiti. Questi possono essere impostati a livello API o metodo API.

## Cosa sono i piani di utilizzo e le chiavi API?
<a name="api-gateway-api-usage-plans-overview"></a>

Un *piano di utilizzo* consente di specificare chi può accedere a una o più fasi e metodi API distribuiti, inclusa la frequenza di richiesta di destinazione per iniziare a limitare le richieste. Il piano utilizza chiavi API per identificare client API e chi può accedere akke fasi API associate a ciascuna chiave. 

Le *chiavi API* sono valori stringa alfanumerici che vengono distribuiti ai clienti degli sviluppatori di applicazioni per concedere l'accesso all'API. Puoi utilizzare le chiavi API insieme agli [autorizzatori Lambda](apigateway-use-lambda-authorizer.md), ai [ruoli IAM](permissions.md) o [Amazon Cognito per controllare l'accesso](apigateway-integrate-with-cognito.md) al tuo. APIs API Gateway può generare chiavi API per tuo conto o puoi importarle da un [file CSV](api-key-file-format.md). Puoi generare una chiave API in API Gateway o importarla in API Gateway da un'origine esterna. Per ulteriori informazioni, consulta [Configura le chiavi API per REST APIs in API Gateway](api-gateway-setup-api-keys.md). 

Una chiave API ha un nome e un valore. I termini "chiave API" e "valore di chiave API" vengono spesso usati in modo intercambiabile. Il nome non può superare 1024 caratteri. Il valore è una stringa alfanumerica tra 20 e 128 caratteri, ad esempio, `apikey1234abcdefghij0123456789`.

**Importante**  
I valori di chiave API devono essere univoci. Se provi a creare due chiavi API con nomi diversi e lo stesso valore, queste vengono considerate da API Gateway la stessa chiave API.  
Una chiave API può essere associata a più piani di utilizzo. Un piano di utilizzo può essere associato a più fasi. Tuttavia, una determinata chiave API può essere associata a un solo piano di utilizzo per ogni fase dell'API.

Un *limite di throttling* imposta il punto di destinazione in cui dovrebbe iniziare la limitazione delle richieste. Può essere impostato a livello API o metodo API.

Un *limite di quota* è il numero massimo di richieste con una determinata chiave API che possono essere inviate in un intervallo di tempo specificato. Puoi configurare singoli metodi API per richiedere l'autorizzazione per le chiavi API in base alla configurazione del piano di utilizzo.

I limiti di throttling e di quote si applicano alle richieste per le singole chiavi API che vengono aggregate nelle fasi API in un piano di utilizzo.

**Nota**  
I piani di utilizzo della limitazione (della larghezza di banda della rete) e le quote non sono limiti rigidi e vengono applicati sulla base del miglior tentativo. In alcuni casi, i client possono superare le quote impostate. Non fare affidamento sulle quote del piano di utilizzo o limitazione (della larghezza di banda della rete) per controllare i costi o bloccare l'accesso a un'API. Considerare l’utilizzo di [Budget AWS](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) per monitorare i costi e [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) gestire le richieste API.

## Best practice per le chiavi API e i piani di utilizzo
<a name="apigateway-usage-plans-best-practices"></a>

Di seguito vengono fornite le best practice da seguire quando usi chiavi API e piani di utilizzo.

**Importante**  
Non utilizzare chiavi API per l'autenticazione o l'autorizzazione per controllare l'accesso ai tuoi. APIs Se ne hai più APIs in un piano di utilizzo, un utente con una chiave API valida per un'API in quel piano di utilizzo può accedere APIs a *tutte le* API di quel piano di utilizzo. Per controllare gli accessi all'API, utilizza invece un ruolo IAM, un [sistema di autorizzazione Lambda](apigateway-use-lambda-authorizer.md) o un [pool di utenti di Amazon Cognito](apigateway-integrate-with-cognito.md).
Utilizzare le chiavi API generate da API Gateway. Le chiavi API non devono includere informazioni riservate; i client in genere le trasmettono in intestazioni che possono essere registrate.
+ Se utilizzi un portale per sviluppatori per pubblicare i tuoi APIs, tieni presente che tutti i tuoi contenuti APIs in un determinato piano di utilizzo possono essere sottoscritti dai clienti, anche se non li hai resi visibili ai tuoi clienti.
+ In alcuni casi, i client possono superare le quote impostate. Non fare affidamento sui piani di utilizzo per controllare i costi. Considera l'utilizzo di [Budget AWS](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) per monitorare i costi e di [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) per gestire le richieste API.
+ Dopo aver aggiunto una chiave API a un piano di utilizzo, il completamento dell'operazione di aggiornamento potrebbe richiedere alcuni minuti.

# Scelta dell'origine di una chiave API in Gateway API
<a name="api-gateway-api-key-source"></a>

Quando associ un piano di utilizzo a un'API e abiliti chiavi API su metodi API, ogni richiesta in ingresso all'API deve contenere una [chiave API](api-gateway-basic-concept.md#apigateway-definition-api-key). API Gateway legge la chiave e la confronta con le chiavi nel piano di utilizzo. Se esiste una corrispondenza, API Gateway esegue il throttling delle richieste in base alla quota e al limite delle richieste del piano. In caso contrario, genera un'eccezione `InvalidKeyParameter` e l'intermediario riceve una risposta `403 Forbidden`.

L'API di API Gateway è in grado di ricevere chiavi API da una delle due seguenti origini:

**`HEADER`**  
Devi distribuire le chiavi API ai clienti e chiedere loro di passare la chiave API come intestazione `X-API-Key` di ogni richiesta in ingresso. 

**`AUTHORIZER`**  
Puoi fare in modo che la chiave API venga restituita da un'autorizzazione Lambda come parte della risposta di autorizzazione. Per ulteriori informazioni sulla risposta delle autorizzazioni, consulta [Output da un sistema di autorizzazione Lambda di Gateway API](api-gateway-lambda-authorizer-output.md).

**Nota**  
Per informazioni sulle best practice da prendere in considerazione, consulta [Best practice per le chiavi API e i piani di utilizzo](api-gateway-api-usage-plans.md#apigateway-usage-plans-best-practices).

La procedura seguente descrive come scegliere un’origine della chiave API per un’API.

------
#### [ Console di gestione AWS ]

**Per scegliere un’origine della chiave API per un’API**

1. Accedere alla console API Gateway.

1. Seleziona un'API esistente o creane una nuova.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**. 

1. Nella sezione **Dettagli API**, scegli **Modifica**. 

1.  In **Origine chiave API**, seleziona `Header` o `Authorizer` nell'elenco a discesa.

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

------
#### [ AWS CLI ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente aggiorna un'API per impostare l'origine della chiave API su`AUTHORIZER`:

```
aws apigateway update-rest-api --rest-api-id 1234123412 --patch-operations op=replace,path=/apiKeySource,value=AUTHORIZER
```

Per fare in modo che il client invii una chiave API, impostare `value` su `HEADER` nel comando precedente.

------
#### [ REST API ]

Per scegliere un'origine di chiave API per un'API utilizzando l'API REST API Gateway, invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html) come segue:

```
PATCH /restapis/fugvjdxtri/ HTTP/1.1
Content-Type: application/json
Host: apigateway.us-east-1.amazonaws.com
X-Amz-Date: 20160603T205348Z
Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20160603/us-east-1/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature={sig4_hash}

{
  "patchOperations" : [
    {
        "op" : "replace",
        "path" : "/apiKeySource",
        "value" : "HEADER"
    }
  ]
}
```

Per fare in modo che un'autorizzazione restituisca una chiave API, imposta `value` su `AUTHORIZER` nell'input `patchOperations` precedente.

------

# Formato file chiave API di API Gateway
<a name="api-key-file-format"></a>

API Gateway può importare le chiavi API dai file esterni in formato CSV (comma-separated value), quindi associare le chiavi importate a uno o più piani di utilizzo. Il file importato deve contenere le colonne `Name` e `Key`. Per i nomi delle intestazioni di colonna non viene rilevata la distinzione tra maiuscole e minuscole e le colonne possono essere disposte in qualsiasi ordine, come mostrato nel'esempio seguente: 

```
Key,name
apikey1234abcdefghij0123456789,MyFirstApiKey
```

Il valore di `Key` deve essere costituito da un numero di caratteri compreso tra 20 e 128. Un valore `Name` non può superare 1024 caratteri. 

Un file di chiavi API può includere anche la colonna `Description`, `Enabled` o `UsagePlanIds`, come mostrato nell'esempio seguente: 

```
Name,key,description,Enabled,usageplanIds
MyFirstApiKey,apikey1234abcdefghij0123456789,An imported key,TRUE,c7y23b
```

Quando una chiave è associata a più di un piano di utilizzo, il `UsagePlanIds` valore è una stringa separata da virgole del piano di utilizzo IDs, racchiusa tra un paio di virgolette doppie o singole, come illustrato nell'esempio seguente:

```
Enabled,Name,key,UsageplanIds
true,MyFirstApiKey,apikey1234abcdefghij0123456789,"c7y23b,glvrsr"
```

Le colonne non riconosciute sono consentite ma vengono ignorate. Il valore predefinito è una stringa vuota o il valore booleano `true`. 

La stessa chiave API può essere importata più volte e la versione più recente sovrascrive la precedente. Due chiavi API sono identiche se hanno lo stesso valore `key`. 

**Nota**  
Per informazioni sulle best practice da prendere in considerazione, consulta [Best practice per le chiavi API e i piani di utilizzo](api-gateway-api-usage-plans.md#apigateway-usage-plans-best-practices).

# Configura le chiavi API per REST APIs in API Gateway
<a name="api-gateway-setup-api-keys"></a>

Per configurare le chiavi API, completa queste operazioni:
+ Configura i metodi API in modo che richiedano una chiave API.
+ Crea o importa in una Regione una chiave API per l’API.

Prima di impostare le chiavi API, è necessario aver creato un'API e averla distribuita in una fase. Una volta creata una chiave API, non può essere modificata.

Per istruzioni su come creare e distribuire un'API utilizzando la console API Gateway, consulta rispettivamente [Sviluppa REST APIs in API Gateway](rest-api-develop.md) e [Implementazione di REST API in Gateway API](how-to-deploy-api.md).

Dopo aver creato una chiave API, è necessario associarla a un piano di utilizzo. Per ulteriori informazioni, consulta [Configurazione dei piani di utilizzo per REST APIs in API Gateway](api-gateway-create-usage-plans.md).

**Nota**  
Per informazioni sulle best practice da prendere in considerazione, consulta [Best practice per le chiavi API e i piani di utilizzo](api-gateway-api-usage-plans.md#apigateway-usage-plans-best-practices).

**Topics**
+ [Richiesta di una chiave API per un metodo](#api-gateway-usage-plan-configure-apikey-on-method)
+ [Crea una chiave API](#api-gateway-usage-plan-create-apikey)
+ [Importazione di chiavi API](#api-gateway-usage-pan-import-apikey)

## Richiesta di una chiave API per un metodo
<a name="api-gateway-usage-plan-configure-apikey-on-method"></a>

La procedura seguente mostra come configurare un metodo API in modo che richieda una chiave API.

------
#### [ Console di gestione AWS ]

**Per configurare un metodo API in modo che richieda una chiave API**

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale di API Gateway, scegliere **Resources (Risorse)**.

1. In **Resources (Risorse)** creare un nuovo metodo o sceglierne uno esistente.

1. Nella scheda **Richiesta metodo**, in **Impostazioni richiesta metodo**, scegli **Modifica**.  
![\[Aggiunta di una chiave API a un metodo\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-new-console-add-key-to-method.png)

1. Seleziona **Chiave API necessaria**.

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

1. Distribuisci o ridistribuisci l'API per rendere effettivo il requisito.

Se l'opzione **Chiave API necessaria** è impostata su `false` e non si esegue la procedura precedente, la chiave API associata a una fase API non viene utilizzata per il metodo.

------
#### [ AWS CLI ]

Il comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) seguente crea un metodo `PUT` che richiede una chiave API:

```
aws apigateway put-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --authorization-type "NONE" \
    --api-key-required
```

Il comando [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) seguente aggiorna un metodo esistente in modo che richieda una chiave API:

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/apiKeyRequired",value="true"
```

------
#### [ REST API ]

Per configurare un metodo in modo che richieda una chiave API, procedi in uno dei seguenti modi:
+ Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html) per creare un metodo. Imposta `apiKeyRequired` un `true` nel payload di richiesta.
+ Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html) per impostare `apiKeyRequired` su `true`.

------

## Crea una chiave API
<a name="api-gateway-usage-plan-create-apikey"></a>

La procedura seguente mostra come creare una chiave API. Non tenere conto di questo passaggio se desideri importare la chiave API.

------
#### [ Console di gestione AWS ]

**Per creare una chiave API**

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale di Gateway API, scegli **Chiavi API**.

1. Scegli **Crea chiave API**.  
![\[Creazione di chiavi API per i piani di utilizzo\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-choose-create-api-key-from-actions-menu.png)

1. In **Nome**, immetti un nome.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. In **Chiave API**, scegli **Genera automaticamente** per fare in modo che Gateway API generi il valore della chiave oppure scegli **Personalizza** per creare il tuo valore di chiave.

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

------
#### [ AWS CLI ]

Il [create-api-key](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-api-key.html)comando seguente crea una chiave API:

```
 aws apigateway create-api-key \
    --name 'Dev API key' \
    --description 'API key for Devs' \
    --enabled
```

------
#### [ REST API ]

Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateApiKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateApiKey.html) per creare una chiave API.

------

## Importazione di chiavi API
<a name="api-gateway-usage-pan-import-apikey"></a>

La procedura seguente descrive come importare le chiavi API. Non tenere conto di questo passaggio se è già stata creata una chiave API.

------
#### [ Console di gestione AWS ]

**Per importare chiavi API**

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale, scegli **Chiavi API**.

1. Scegli il menu a discesa **Operazioni** e quindi **Importa chiavi API**. 

1. Per caricare un file di chiavi con valori separati da virgole, scegli **Scegli file**. Puoi anche immettere le chiavi nell'editor di testo. Per informazioni sul formato del file, consulta [Formato file chiave API di API Gateway](api-key-file-format.md).

1. Scegli **Errore su avvertenze** per arrestare l'importazione se si verifica un errore oppure **Ignora avvisi** per continuare a importare voci di chiavi valide in caso di presenza di avvisi.

1. Scegli **Importa** per importare le tue chiavi API.

------
#### [ AWS CLI ]

Il [import-api-keys](https://docs.aws.amazon.com/cli/latest/reference/apigateway/import-api-keys.html)comando seguente importa una chiave API:

```
aws apigateway import-api-key \
    a--body fileb://keys.csv \
    --format csv
```

------
#### [ REST API ]

Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html) per importare una chiave API da un file. Per il formato file, consulta [Formato file chiave API di API Gateway](api-key-file-format.md).

------

Non è possibile modificare il valore della nuova chiave API. Dopo aver creato l’API, si configura un piano di utilizzo. Per ulteriori informazioni, consulta [Configurazione dei piani di utilizzo per REST APIs in API Gateway](api-gateway-create-usage-plans.md).

# Configurazione dei piani di utilizzo per REST APIs in API Gateway
<a name="api-gateway-create-usage-plans"></a>

Prima di creare un piano di utilizzo, è necessario avere configurato le chiavi API desiderate. Per ulteriori informazioni, consulta [Configura le chiavi API per REST APIs in API Gateway](api-gateway-setup-api-keys.md).

**Topics**
+ [Eseguire la migrazione dell'API a Piani di utilizzo predefiniti (se necessario)](#api-gateway-usage-plan-migrate-to-default)
+ [Creazione di un piano di utilizzo](#api-gateway-usage-plan-create)
+ [Aggiunta di una fase a un piano di utilizzo](#api-gateway-usage-plan-add-stage)
+ [Aggiunta di una chiave API a un piano di utilizzo](#api-gateway-usage-plan-add-key)

## Eseguire la migrazione dell'API a Piani di utilizzo predefiniti (se necessario)
<a name="api-gateway-usage-plan-migrate-to-default"></a>

Se hai iniziato a usare API Gateway *dopo* l'introduzione della caratteristica dei piani di utilizzo l'11 agosto 2016, troverai che i piani di utilizzo sono abilitati automaticamente in tutte le regioni supportate.

Se hai iniziato a utilizzare API Gateway prima di quella data, potrebbe essere necessario migrare ai piani di utilizzo predefiniti. Ti verrà proposta l'opzione **Enable Usage Plans (Abilita piani di utilizzo)** prima di usare i piani di utilizzo per la prima volta nella regione selezionata. Quando abiliti questa opzione, vengono creati piani di utilizzo predefiniti per ogni fase API univoca associata alle chiavi API esistenti. Nel piano di utilizzo predefinito, non vengono impostati inizialmente throttle o limiti di quota e le associazioni tra le chiavi API e le fasi API sono copiate sui piani di utilizzo. Il comportamento dell'API resta inalterato. Tuttavia, è necessario utilizzare la [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html)`apiStages`proprietà per associare i valori di fase dell'API specificati (`apiId`and`stage`) alle chiavi API incluse (via [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html)), anziché utilizzare la [ApiKey](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html)`stageKeys`proprietà.

Per controllare se hai già eseguito la migrazione ai piani di utilizzo predefiniti, utilizza il comando della CLI [https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-account.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-account.html). Nell'output del comando, l'elenco `features` include una voce `"UsagePlans"` quando i piani di utilizzo sono abilitati.

Puoi anche APIs migrare i tuoi piani di utilizzo predefiniti utilizzando AWS CLI quanto segue:

**Per migrare ai piani di utilizzo predefiniti utilizzando il AWS CLI**

1. Invoca questo comando della CLI: [https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html).

1. Per il parametro `cli-input-json`, utilizza il seguente JSON:

   ```
   [
       {
           "op": "add",
           "path": "/features",
           "value": "UsagePlans"
       }
   ]
   ```

## Creazione di un piano di utilizzo
<a name="api-gateway-usage-plan-create"></a>

La procedura seguente illustra come creare un piano di utilizzo.

------
#### [ Console di gestione AWS ]

**Per creare un piano di utilizzo**

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

1. Nel riquadro di navigazione principale di Gateway API, scegli **Piani di utilizzo** e quindi **Crea piano di utilizzo**.  
![\[Entità dei piani di utilizzo delle API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-setup.png)

1. In **Nome**, immetti un nome.

1.  (Facoltativo) In **Descrizione**, immetti una descrizione. 

1. Per impostazione predefinita, i piani di utilizzo abilitano la limitazione (della larghezza di banda della rete). Immetti un valore in **Tariffa** e **Ottimizzazione** per il tuo piano di utilizzo. Scegli **Throttling** per disattivare la limitazione (della larghezza di banda della rete). 

1. Per impostazione predefinita, i piani di utilizzo abilitano una quota per un periodo di tempo. In **Richieste**, immetti il numero totale di richieste che un utente può effettuare nel periodo di validità del tuo piano di utilizzo. Scegli **Quota** per disattivare la quota.

1. Scegli **Crea piano di utilizzo**.

------
#### [ AWS CLI ]

Il [create-usage-plan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-usage-plan.html)comando seguente crea un piano di utilizzo che viene ripristinato all'inizio del mese:

```
aws apigateway create-usage-plan \
    --name "New Usage Plan" \
    --description "A new usage plan" \
    --throttle burstLimit=10,rateLimit=5 \
    --quota limit=500,offset=0,period=MONTH
```

------
#### [ REST API ]

Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlan.html) per creare un piano di utilizzo.

------

## Aggiunta di una fase a un piano di utilizzo
<a name="api-gateway-usage-plan-add-stage"></a>

La procedura seguente illustra come aggiungere una fase a un piano di utilizzo.

------
#### [ Console di gestione AWS ]

**Per aggiungere una fase a un piano di utilizzo**

1. Seleziona il piano di utilizzo.

1.  Nella scheda **Fasi associate**, scegli **Aggiungi fase**.  
![\[Aggiungi una fase API a un piano di utilizzo.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-add-stage.png)

1.  In **API**, seleziona un'API. 

1.  In **Fase**, seleziona una fase. 

1. (Facoltativo) Per attivare la limitazione (della larghezza di banda della rete) a livello di metodo, esegui le operazioni indicate di seguito:

   1. Scegli **Throttling a livello di metodo** e quindi **Aggiungi metodo**.

   1. In**Risorsa**, seleziona una risorsa nella tua API. 

   1. In **Metodo**, seleziona un metodo nella tua API. 

   1.  Immetti un valore in **Tariffa** e **Ottimizzazione** per il tuo piano di utilizzo. 

1. Scegli **Aggiungi al piano di utilizzo**.

------
#### [ AWS CLI ]

Il [update-usage-plan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-usage-plan.html)comando seguente aggiunge lo `Prod` stadio di un'API a un piano di utilizzo:

```
aws apigateway update-usage-plan \
    --usage-plan-id abc123 \
    --patch-operations op="add",path="/apiStages",value="a1b1c2:Prod"
```

------
#### [ REST API ]

Chiama [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html) per aggiornare un piano di utilizzo.

------

## Aggiunta di una chiave API a un piano di utilizzo
<a name="api-gateway-usage-plan-add-key"></a>

La procedura seguente descrive come aggiungere una chiave API a un piano di utilizzo.

------
#### [ Console di gestione AWS ]

**Per aggiungere una chiave a un piano di utilizzo**

1. Nella scheda **Chiavi API associate**, scegli **Aggiungi chiave API**.   
![\[Entità dei piani di utilizzo delle API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/api-gateway-new-console-usage-plan-keys-create-add-key.png)

1. 

   1.  Per associare una chiave esistente al tuo piano di utilizzo, seleziona **Aggiungi chiave esistente**, quindi seleziona la chiave esistente nel menu a discesa.

   1. Per creare una nuova chiave API, seleziona **Crea e aggiungi nuova chiave**, quindi crea una nuova chiave. Per ulteriori informazioni su come creare una nuova chiave, consulta [Crea una chiave API](api-gateway-setup-api-keys.md#api-gateway-usage-plan-create-apikey).

1. Scegli **Aggiungi chiave API**.

------
#### [ AWS CLI ]

Il [create-usage-plan-key](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-usage-plan-key.html)comando seguente associa una chiave API esistente a un piano di utilizzo:

```
aws apigateway create-usage-plan-key \
    --usage-plan-id a1b2c3 \
    --key-type "API_KEY" \
    --key-id aaa111bbb
```

------
#### [ REST API ]

Chiama [https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_CreateUsagePlanKey.html) per associare una chiave API esistente a un piano di utilizzo.

Puoi anche associare direttamente APIs le tue chiavi a un piano di utilizzo quando le importi. Invoca [https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ImportApiKeys.html) per aggiungere una o più chiavi API direttamente al piano di utilizzo specificato. Il payload della richiesta deve contenere valori di chiavi API, l'identificativo del piano di utilizzo associato, i flag booleani che indicano che le chiavi sono abilitate per il piano di utilizzo e, possibilmente, nomi e descrizioni delle chiavi API. 

L'esempio che segue della richiesta `apikey:import` aggiunge tre chiavi API (identificate da `key`, `name` e `description`) a un piano di utilizzo (identificato da `usageplanIds`): 

```
POST /apikeys?mode=import&format=csv&failonwarnings=fase HTTP/1.1
Host: apigateway.us-east-1.amazonaws.com
Content-Type: text/csv
Authorization: ...

key,name, description, enabled, usageplanIds
abcdef1234ghijklmnop8901234567, importedKey_1, firstone,  tRuE, n371pt 
abcdef1234ghijklmnop0123456789, importedKey_2, secondone, TRUE, n371pt
abcdef1234ghijklmnop9012345678, importedKey_3,          , true, n371pt
```

Di conseguenza, vengono create tre risorse `UsagePlanKey` che vengono aggiunte a `UsagePlan`.

Puoi aggiungere chiavi API anche a più di un piano di utilizzo. A questo scopo, modifica ogni valore della colonna `usageplanIds` in una stringa separata da virgole contenente gli identificatori del piano di utilizzo selezionato e racchiusa tra apici (`"n371pt,m282qs"` o `'n371pt,m282qs'`).

------

**Nota**  
Una chiave API può essere associata a più piani di utilizzo. Un piano di utilizzo può essere associato a più fasi. Tuttavia, una determinata chiave API può essere associata a un solo piano di utilizzo per ogni fase dell'API.

# Mantieni un piano di utilizzo per REST APIs in API Gateway
<a name="api-gateway-usage-plan-manage-usage"></a>

La gestione di un piano di utilizzo implica il monitoraggio delle quote utilizzate e rimanenti in un determinato periodo di tempo, se necessario, e l'estensione delle quote rimanenti di una quantità specificata. Le procedure seguenti descrivono come monitorare le quote.

------
#### [ Console di gestione AWS ]

**Per monitorare le quote utilizzate e rimanenti**

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

1. Nel riquadro di navigazione principale di Gateway API, scegli **Piani di utilizzo**.

1. Seleziona un piano di utilizzo.

1. Scegli la scheda **Chiavi API associate** per visualizzare il numero di richieste rimanenti per il periodo di tempo per ciascuna chiave.

1. (Facoltativo) Scegli **Esporta dati di utilizzo**, quindi scegli una data in **Da** e una data in **A**. Quindi, scegli **JSON** o **CSV** per il formato dei dati esportati e infine scegli **Esporta**.

   L'esempio di seguito mostra un file esportato. 

   ```
   {
       "px1KW6...qBazOJH": [
         [
           0,
           5000
         ],
         [
           0,
           5000
         ],
         [
           0,
           10
         ]
       ]
     }
   ```

   I dati di utilizzo nell'esempio mostrano i dati di utilizzo per un client API identificato dalla chiave API (`px1KW6...qBazOJH`) tra il 1 e il 3 agosto 2016. I dati di utilizzo giornalieri mostrano le quote utilizzate e rimanenti. In questo esempio il sottoscrittore non ha ancora usato le quote riservate e l'amministratore o il proprietario dell'API ha ridotto la quota rimanente da 5000 a 10 il terzo giorno.

Le procedure seguenti descrivono come modificare le quote.

**Per estendere le quote rimanenti**

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

1. Nel riquadro di navigazione principale di Gateway API, scegli **Piani di utilizzo**.

1. Seleziona un piano di utilizzo.

1. Scegli la scheda **Chiavi API associate** per visualizzare il numero di richieste rimanenti per il periodo di tempo per ciascuna chiave.

1. Seleziona una chiave API, quindi scegli **Concedi estensione utilizzo**.

1. Immetti un numero di quote in **Richieste rimanenti**. Puoi aumentare o diminuire le richieste rimanenti per il periodo di validità del tuo piano di utilizzo. 

1. Scegli **Aggiorna quota**.

------
#### [ AWS CLI ]

I seguenti [update-usage-plan](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-usage-plan.html)esempi aggiungono, rimuovono o modificano le impostazioni di limitazione a livello di metodo in un piano di utilizzo.

**Nota**  
Assicurarsi di modificare `us-east-1` nel valore di regione appropriato per l'API.

Per aggiungere o sostituire un limite di tasso per il throttling di una risorsa e un metodo singoli:

```
aws apigateway --region us-east-1 update-usage-plan --usage-plan-id planId --patch-operations op="replace",path="/apiStages/apiId:stage/throttle/resourcePath/httpMethod/rateLimit",value="0.1"
```

Per aggiungere o sostituire un limite di ottimizzazione per il throttling di una risorsa e un metodo singoli:

```
aws apigateway --region us-east-1 update-usage-plan --usage-plan-id planId --patch-operations op="replace",path="/apiStages/apiId:stage/throttle/resourcePath/httpMethod/burstLimit",value="1"
```

Per rimuovere le impostazioni di throttling a livello di metodo per una risorsa e un metodo singoli:

```
aws apigateway --region us-east-1 update-usage-plan --usage-plan-id planId --patch-operations op="remove",path="/apiStages/apiId:stage/throttle/resourcePath/httpMethod",value=""
```

Per rimuovere tutte le impostazioni di throttling a livello di metodo per un'API:

```
aws apigateway --region us-east-1 update-usage-plan --usage-plan-id planId --patch-operations op="remove",path="/apiStages/apiId:stage/throttle ",value=""
```

Di seguito è riportato un esempio utilizzando l'API di esempio Pet Store:

```
aws apigateway --region us-east-1 update-usage-plan --usage-plan-id planId --patch-operations op="replace",path="/apiStages/apiId:stage/throttle",value='"{\"/pets/GET\":{\"rateLimit\":1.0,\"burstLimit\":1},\"//GET\":{\"rateLimit\":1.0,\"burstLimit\":1}}"'
```

------
#### [ REST API ]

Chiama [https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateUsagePlan.html) per gestire un piano di utilizzo.

------

# Crea e configura chiavi API e piani di utilizzo con CloudFormation
<a name="api-key-usage-plan-cfn"></a>

 Puoi utilizzarlo CloudFormation per richiedere chiavi API sui metodi API e creare un piano di utilizzo per un'API. Il CloudFormation modello di esempio esegue le seguenti operazioni:
+ Crea un'API Gateway API con i metodi `GET` e `POST`.
+ Richiede una chiave API per i metodi `GET` e `POST`. Questa API riceve le chiavi dall'intestazione `X-API-KEY` di ogni richiesta in entrata. 
+ Creazione di una chiave API.
+ Crea un piano di utilizzo per specificare una quota mensile di 1000 richieste al mese, un limite di velocità di limitazione di 100 richieste al secondo e un limite di limitazione di 200 richieste al secondo. 
+ Specifica un limite di velocità di limitazione a livello di metodo di 50 richieste al secondo e un limite a livello di metodo di 100 richieste al secondo per il metodo `GET`.
+ Associa le fasi API e le chiavi API al piano di utilizzo. 

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  StageName:
    Type: String
    Default: v1
    Description: Name of API stage.
  KeyName:
    Type: String
    Default: MyKeyName
    Description: Name of an API key
Resources:
  Api:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      Name: keys-api
      ApiKeySourceType: HEADER
  PetsResource:
    Type: 'AWS::ApiGateway::Resource'
    Properties:
      RestApiId: !Ref Api
      ParentId: !GetAtt Api.RootResourceId
      PathPart: 'pets'
  PetsMethodGet:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: GET
      ApiKeyRequired: true
      AuthorizationType: NONE
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  PetsMethodPost:
    Type: 'AWS::ApiGateway::Method'
    Properties:
      RestApiId: !Ref Api
      ResourceId: !Ref PetsResource
      HttpMethod: POST
      ApiKeyRequired: true
      AuthorizationType: NONE
      Integration:
        Type: HTTP_PROXY
        IntegrationHttpMethod: GET
        Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/
  ApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    DependsOn:
      - PetsMethodGet
    Properties:
      RestApiId: !Ref Api
      StageName: !Sub '${StageName}'
  UsagePlan:
    Type: AWS::ApiGateway::UsagePlan
    DependsOn:
      - ApiDeployment
    Properties:
      Description: Example usage plan with a monthly quota of 1000 calls and method-level throttling for /pets GET 
      ApiStages:
        - ApiId: !Ref Api
          Stage: !Sub '${StageName}'
          Throttle:
            "/pets/GET": 
              RateLimit: 50.0
              BurstLimit: 100
      Quota:
        Limit: 1000
        Period: MONTH
      Throttle:
        RateLimit: 100.0
        BurstLimit: 200
      UsagePlanName: "My Usage Plan"
  ApiKey:
    Type: AWS::ApiGateway::ApiKey
    Properties: 
      Description: API Key
      Name: !Sub '${KeyName}'
      Enabled: True
  UsagePlanKey:
    Type: AWS::ApiGateway::UsagePlanKey
    Properties:
      KeyId: !Ref ApiKey
      KeyType: API_KEY
      UsagePlanId: !Ref UsagePlan
Outputs:
  ApiRootUrl:
    Description: Root Url of the API
    Value: !Sub 'https://${Api}.execute-api.${AWS::Region}.amazonaws.com/${StageName}'
```

# Configurazione di un metodo per utilizzare le chiavi API con una definizione OpenAPI
<a name="api-key-usage-plan-oas"></a>

È possibile utilizzare una definizione OpenAPI per richiedere le chiavi API per un metodo.

Crea l'oggetto requisito di sicurezza di ogni metodo per richiedere una chiave API che invochi il metodo. Quindi, definisci `api_key` nella definizione di sicurezza. Dopo aver creato l'API, aggiungi la nuova fase API al piano di utilizzo.

L'esempio seguente crea un'API e richiede una chiave API per i metodi `POST` e `GET`:

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger" : "2.0",
  "info" : {
    "version" : "2024-03-14T20:20:12Z",
    "title" : "keys-api"
  },
  "basePath" : "/v1",
  "schemes" : [ "https" ],
  "paths" : {
    "/pets" : {
      "get" : {
        "responses" : { },
        "security" : [ {
          "api_key" : [ ]
        } ],
        "x-amazon-apigateway-integration" : {
          "type" : "http_proxy",
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/",
          "passthroughBehavior" : "when_no_match"
        }
      },
      "post" : {
        "responses" : { },
        "security" : [ {
          "api_key" : [ ]
        } ],
        "x-amazon-apigateway-integration" : {
          "type" : "http_proxy",
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/",
          "passthroughBehavior" : "when_no_match"
        }
      }
    }
  },
  "securityDefinitions" : {
    "api_key" : {
      "type" : "apiKey",
      "name" : "x-api-key",
      "in" : "header"
    }
  }
}
```

------
#### [ OpenAPI 3.0 ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "keys-api",
    "version" : "2024-03-14T20:20:12Z"
  },
  "servers" : [ {
    "url" : "{basePath}",
    "variables" : {
      "basePath" : {
        "default" : "v1"
      }
    }
  } ],
  "paths" : {
    "/pets" : {
      "get" : {
        "security" : [ {
          "api_key" : [ ]
        } ],
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/",
          "passthroughBehavior" : "when_no_match",
          "type" : "http_proxy"
        }
      },
      "post" : {
        "security" : [ {
          "api_key" : [ ]
        } ],
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/",
          "passthroughBehavior" : "when_no_match",
          "type" : "http_proxy"
        }
      }
    }
  },
  "components" : {
    "securitySchemes" : {
      "api_key" : {
        "type" : "apiKey",
        "name" : "x-api-key",
        "in" : "header"
      }
    }
  }
}
```

------

# Testa i piani di utilizzo per REST APIs in API Gateway
<a name="api-gateway-usage-plan-test-with-postman"></a>

Ad esempio, utilizziamo l' PetStore API, che è stata creata in[Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md). Presupponiamo che l'API sia configurata per l'uso della chiave API `Hiorr45VR...c4GJc`. La procedura seguente illustra come testare un piano di utilizzo.

**Per testare il piano di utilizzo**
+ Fai una richiesta `GET` nella risorsa Pets (`/pets`), con i parametri di query `?type=...&page=...` dell'API (ad esempio, `xbvxlpijch`) in un piano di utilizzo:

  ```
  GET /testStage/pets?type=dog&page=1 HTTP/1.1
  x-api-key: Hiorr45VR...c4GJc
  Content-Type: application/x-www-form-urlencoded
  Host: xbvxlpijch.execute-api.ap-southeast-1.amazonaws.com
  X-Amz-Date: 20160803T001845Z
  Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20160803/ap-southeast-1/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-api-key, Signature={sigv4_hash}
  ```
**Nota**  
Devi inviare questa richiesta al componente `execute-api` di API Gateway e fornire la chiave API necessaria (ad esempio `Hiorr45VR...c4GJc`) nell'intestazione `x-api-key` obbligatoria.

  Se riesce, la risposta restituisce un codice di stato `200 OK` e un payload contenente i risultati richiesti dal back-end: Se dimentichi di impostare l'intestazione `x-api-key` o se la imposti con una chiave sbagliata, ottieni una risposta `403 Forbidden`. Tuttavia, se non hai configurato il metodo in modo che richieda una chiave API, probabilmente otterrai la risposta `200 OK`, anche se imposti l'intestazione `x-api-key` in modo non corretto e se vengono superati i imiti di throttling e di quota del piano di utilizzo. 

  A volte, quando si verifica un errore interno in cui API Gateway non riesce ad applicare i limiti di throttling o le quote del piano di utilizzo per la richiesta, API Gateway elabora la richiesta senza applicare i limiti di throttling o le quote specificate nel piano i utilizzo. Tuttavia, registra un messaggio di errore `Usage Plan check failed due to an internal error` in CloudWatch. Puoi ignorare questi errori occasionali. 

# Chiamata di un metodo tramite una chiave API
<a name="api-gateway-api-key-call"></a>

A seconda del tipo di origine della chiave API scelta, usa una delle procedure seguenti per utilizzare chiavi API con origine intestazione o chiavi API restituite dall'autorizzazione nell'invocazione di metodo: 

**Per utilizzare chiavi API con origine intestazione:**

1.  Crea un'API con i metodi API desiderati e quindi implementa l'API in una fase.

1.  Crea un nuovo piano di utilizzo o scegline uno esistente. Aggiungi la fase API distribuita al piano di utilizzo. Collega una chiave API al piano di utilizzo o scegli una chiave API esistente nel piano. Prendi nota del valore della chiave API scelta.

1.  Configura i metodi API in modo che richiedano una chiave API. 

1.  Ridistribuisci l'API nella stessa fase. Se distribuisci l'API in una nuova fase, assicurati di aggiornare il piano di utilizzo per collegare la nuova fase API. 

1. Chiama l'API utilizzando la chiave API. Il seguente comando curl di esempio invoca il metodo `GET` sulla risorsa `getUsers` della fase `prod` di un'API utilizzando una chiave API.

   ```
   curl -H "X-API-Key: abcd1234" 'https://b123abcde4.execute-api.us-west-2.amazonaws.com/prod/getUsers' 
   ```

Il client può ora chiamare i metodi API fornendo l'intestazione `x-api-key` con la chiave API scelta come valore di intestazione. Di seguito è riportato un esempio di chiamata:

**Per utilizzare chiavi API con origine autorizzazione:**

1.  Crea un'API con i metodi API desiderati e quindi implementa l'API in una fase.

1.  Crea un nuovo piano di utilizzo o scegline uno esistente. Aggiungi la fase API distribuita al piano di utilizzo. Collega una chiave API al piano di utilizzo o scegli una chiave API esistente nel piano. Prendi nota del valore della chiave API scelta.

1.  Crea una funzione di autorizzazione Lambda basata su token. Includi `usageIdentifierKey:{api-key}` come proprietà a livello di root della risposta di autorizzazione. Per istruzioni sulla creazione di un sistema di autorizzazione basato su token, consulta [Esempio di funzione del sistema di autorizzazione `TOKEN` Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create).

1.  Configura i metodi API in modo che richiedano una chiave API e abilita anche l'autorizzazione Lambda per i metodi. 

1.  Ridistribuisci l'API nella stessa fase. Se distribuisci l'API in una nuova fase, assicurati di aggiornare il piano di utilizzo per collegare la nuova fase API. 

Il client può ora chiamare i metodi che richiedono la chiave API senza fornire esplicitamente una chiave API. La chiave API restituita dall'autorizzazione viene utilizzata automaticamente.

# Documentazione per REST APIs in API Gateway
<a name="api-gateway-documenting-api"></a>

 Per aiutare i clienti a comprendere e utilizzare la tua API, è fondamentale documentarla. Per aiutarti a documentare l'API, API Gateway ti consente di aggiungere e aggiornare il contenuto della guida per le singole entità API come parte integrante del processo di sviluppo dell'API. API Gateway memorizza il contenuto di origine e ti consente di archiviare diverse versioni della documentazione. Puoi associare una versione della documentazione a una fase API, esportare uno snapshot di documentazione specifico della fase in un file OpenAPI esterno e distribuire il file come pubblicazione della documentazione. 

Per documentare la tua API, puoi chiamare l'[API REST di API Gateway](https://docs.aws.amazon.com/apigateway/latest/api/), utilizzare una delle [AWS SDKs](https://aws.amazon.com/developer/tools/), utilizzare [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/apigateway/)for API Gateway o utilizzare la console API Gateway. Inoltre, puoi importare o esportare le parti della documentazione definite in un file OpenAPI esterno.

Per condividere la documentazione API con gli sviluppatori, puoi utilizzare un portale per sviluppatori. Per un esempio, consulta [Integrazione ReadMe con API Gateway per mantenere aggiornato il tuo Developer Hub o [Come semplificare lo sviluppo di API su Amazon API Gateway Using SmartBear SwaggerHub](https://aws.amazon.com/blogs/apn/how-to-streamline-api-development-on-amazon-api-gateway-using-smartbear-swaggerhub/)](https://aws.amazon.com/blogs/apn/integrating-readme-with-amazon-api-gateway-to-keep-your-developer-hub-up-to-date/) sul blog AWS Partner Network (APN).

**Topics**
+ [Rappresentazione della documentazione dell'API in API Gateway](api-gateway-documenting-api-content-representation.md)
+ [Documentare un'API utilizzando la console API Gateway](api-gateway-documenting-api-quick-start-with-console.md)
+ [Pubblicare la documentazione dell'API utilizzando la console API Gateway](apigateway-documenting-api-with-console.md)
+ [Documentare un'API utilizzando l'API REST di API Gateway](api-gateway-documenting-api-quick-start-with-restapi.md)
+ [Pubblicare la documentazione dell'API utilizzando l'API REST di API Gateway](api-gateway-documenting-api-quick-start-publishing.md)
+ [Importare la documentazione dell'API](api-gateway-documenting-api-quick-start-import-export.md)
+ [Controllo dell'accesso alla documentazione dell'API in Gateway API](api-gateway-documenting-api-content-provision-and-consumption.md)

# Rappresentazione della documentazione dell'API in API Gateway
<a name="api-gateway-documenting-api-content-representation"></a>

La documentazione dell'API in API Gateway è costituita da singole parti associate a specifiche entità API che includono API, risorsa, metodo, richiesta, risposta parametri del messaggio (ad esempio, percorso, query, intestazione), nonché autorizzazioni e modelli. 

In API Gateway, una parte della documentazione è rappresentata da una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa. L'intera documentazione dell'API è rappresentata dalla [DocumentationParts](https://docs.aws.amazon.com/apigateway/latest/api/API_GetDocumentationParts.html)raccolta. 

La documentazione di un'API implica la creazione di istanze di `DocumentationPart`, aggiungendole alla raccolta `DocumentationParts` e mantenendo le versioni delle parti della documentazione man mano che l'API evolve.

**Topics**
+ [Parti della documentazione](#api-gateway-documenting-api-content-representation-documentation-parts)
+ [Versioni della documentazione](#api-gateway-documenting-api-content-representation-documentation-versions)

## Parti della documentazione
<a name="api-gateway-documenting-api-content-representation-documentation-parts"></a>

Una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa è un oggetto JSON che memorizza il contenuto della documentazione applicabile a una singola entità API. Sono inclusi contenuti UTF-8 e tutte le principali lingue di localizzazione per la documentazione. Il campo `properties` contiene il contenuto della documentazione sotto forma di mappa di coppie chiave-valore. La proprietà `location` identifica l'entità API associata. 

La forma della mappa di contenuti è determinata da te, lo sviluppatore dell'API. Il valore di una coppia chiave-valore può essere una stringa, un numero, un booleano, un oggetto o una matrice. La forma dell'oggetto `location` dipende dal tipo di entità di destinazione. 

La risorsa `DocumentationPart` supporta l'ereditarietà del contenuto: il contenuto della documentazione di un'entità API è applicabile agli elementi figlio dell'entità API. Per ulteriori informazioni sulla definizione di entità figlio ed ereditarietà del contenuto, consulta [Ereditare il contenuto da un'entità API di più specifiche generali](#api-gateway-documenting-api-content-inheritance). 

### Posizione di una parte della documentazione
<a name="api-gateway-documenting-api-content-representation-documentation-parts-target"></a>

La proprietà [location](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#location) di un'[DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)istanza identifica un'entità API a cui si applica il contenuto associato. L'entità API può essere una risorsa API REST di API Gateway, ad esempio [Resource [RestApi](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html)](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html), [Method [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html)](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html), [Authorizer](https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html) o [Model](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html). L'entità può anche essere un parametro di messaggio, ad esempio un parametro di percorso URL, un parametro di stringa di query, un parametro di intestazione di richiesta o risposta, un corpo di richiesta o risposta o un codice di stato di risposta. 

Per specificare un'entità API, impostare l'attributo [type](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#type) dell'oggetto `location` su uno dei seguenti valori `API`, `AUTHORIZER`, `MODEL`, `RESOURCE`, `METHOD`, `PATH_PARAMETER`, `QUERY_PARAMETER`, `REQUEST_HEADER`, `REQUEST_BODY`, `RESPONSE`, `RESPONSE_HEADER` o `RESPONSE_BODY`. 

A seconda dell'attributo `type` di un'entità API, è possibile specificare altri attributi `location`, tra cui [method](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#method), [name](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#name), [path](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#path) e [statusCode](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html#statusCode). Non tutti questi attributi sono validi per una determinata entità API. Ad esempio, `type`, `path`, `name` e `statusCode` sono attributi validi dell'entità `RESPONSE`, solo `type` e `path` sono attributi di posizione validi dell'entità `RESOURCE`. Non è corretto includere un campo non valido nell'attributo `location` di `DocumentationPart` per una determinata entità API.

Non tutti i campi `location` validi sono obbligatori. Ad esempio, `type` è il campo `location` valido e obbligatorio di tutte le entità API. Tuttavia, `method`, `path` e `statusCode` sono attributi validi ma non obbligatori per l'entità `RESPONSE`. Se non è specificato esplicitamente, un campo `location` valido assume il valore predefinito. Il valore predefinito di `path` è `/`, vale a dire la risorsa radice di un'API. Il valore predefinito di `method` o `statusCode` è `*`, ossia qualsiasi valore di metodo o codice di stato, rispettivamente.

### Contenuto di una parte della documentazione
<a name="api-gateway-documenting-api-content-representation-documentation-parts-content"></a>

Il valore di `properties` è codificato come stringa JSON. Il valore `properties` contiene tutte le informazioni che hai scelto per soddisfare i tuoi requisiti di documentazione. Ad esempio, la seguente è una mappa di contenuti valida: 

```
{
  "info": {
    "description": "My first API with Amazon API Gateway."
  },
  "x-custom-info" : "My custom info, recognized by OpenAPI.",
  "my-info" : "My custom info not recognized by OpenAPI."
}
```

Anche se API Gateway accetta qualsiasi stringa JSON valida come mappa di contenuti, gli attributi del contenuto sono trattati come due categorie: quelli che possono e quelli che non possono essere riconosciuti da OpenAPI. Nell'esempio precedente, `info`, `description` e `x-custom-info` sono riconosciuti da OpenAPI come oggetto, proprietà o estensione OpenAPI standard. Di contro, `my-info` non è conforme alle specifiche OpenAPI. API Gateway propaga gli attributi di contenuto conformi a OpenAPI nelle definizioni di entità API delle istanze di `DocumentationPart` associate. API Gateway non propaga gli attributi di contenuto non conformi nelle definizioni di entità API. 

Per un altro esempio, ecco un `DocumentationPart` mirato per un'entità `Resource`:

```
{
    "location" : {
        "type" : "RESOURCE",
        "path": "/pets"
    },
    "properties" : {
        "summary" : "The /pets resource represents a collection of pets in PetStore.",
        "description": "... a child resource under the root...",
    }
}
```

Qui, `type` e `path` sono entrambi campi validi per l'identificazione della destinazione del tipo `RESOURCE`. Per la risorsa radice (`/`), puoi omettere il campo `path`.

```
{
    "location" : {
        "type" : "RESOURCE"
    },
    "properties" : {
        "description" : "The root resource with the default path specification."
    }
}
```

È equivalente alla seguente istanza di `DocumentationPart`:

```
{
    "location" : {
        "type" : "RESOURCE",
        "path": "/"
    },
    "properties" : {
        "description" : "The root resource with an explicit path specification"
    }
}
```



### Ereditare il contenuto da un'entità API di specifiche più generali
<a name="api-gateway-documenting-api-content-inheritance"></a>

Il valore predefinito di un campo `location` facoltativo fornisce una descrizione di modello di un'entità API. Usando il valore predefinito dell'oggetto `location`, puoi aggiungere una descrizione generale nella mappa di `properties` a un'istanza di `DocumentationPart` con questo tipo di modello `location`. API Gateway estrae gli attributi della documentazione OpenAPI applicabili da `DocumentationPart` dell'entità API generica e li inserisce in un'entità API specifica con i campi `location` corrispondenti al modello `location` generale o corrispondenti al valore esatto, a meno che l'entità specifica non disponga già di un'istanza `DocumentationPart` associata. Questo comportamento è anche noto come ereditarietà del contenuto da un'entità API con specifiche più generali. 

L'ereditarietà del contenuto non si applica a determinati tipi di entità API. Per informazioni dettagliate, consulta la tabella seguente.

Quando un'entità API corrisponde a più di un modello di posizione di `DocumentationPart`, l'entità erediterà la parte della documentazione con i campi di posizione con la precedenza e le specificità più elevate. L'ordine di precedenza è `path` > `statusCode`. Per la corrispondenza con il campo `path`, API Gateway sceglie l'entità con il valore del percorso più specifico. La seguente tabella mostra questo comportamento con alcuni esempi.


| Caso | `path` | `statusCode` | `name` | Remarks | 
| --- | --- | --- | --- | --- | 
| 1 | /pets | \$1 | id |  La documentazione associata a questo modello di posizione verrà ereditata dalle entità che corrispondono al modello di posizione.  | 
| 2 | /pets | 200 | id |  La documentazione associata a questo modello di posizione verrà ereditata dalle entità che corrispondono al modello di posizione in caso di corrispondenza con il caso 1 e il caso 2, in quanto il caso 2 è più specifico del caso 1.   | 
| 3 | /pets/petId | \$1 | id |  La documentazione associata a questo modello di posizione verrà ereditata dalle entità che corrispondono al modello di posizione quando i casi 1, 2 e 3 sono corrispondenti, poiché il caso 3 ha una precedenza maggiore rispetto al caso 2 ed è più specifico del caso 1.  | 

Ecco un altro esempio per contrapporre un'istanza di `DocumentationPart` più generica con una più specifica. Il seguente messaggio di errore generale `"Invalid request error"` è inserito nelle definizioni di OpenAPI delle risposte dell'errore `400`, se non sostituite. 

```
{
    "location" : {
        "type" : "RESPONSE",
        "statusCode": "400"
    },
    "properties" : {
        "description" : "Invalid request error."
    }"
}
```

Con la seguente sostituzione, l'errore `400` che risponde ai metodi della risorsa `/pets` ha la descrizione `"Invalid petId specified"`. 

```
{
    "location" : {
        "type" : "RESPONSE",
        "path": "/pets",
        "statusCode": "400"
    },
    "properties" : "{
        "description" : "Invalid petId specified."
    }"
}
```

### Campi di posizione di valid `DocumentationPart`
<a name="api-gateway-documenting-api-content-representation-target-specification"></a>

La tabella seguente mostra i campi validi e obbligatori, nonché i valori predefiniti applicabili di una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa associata a un determinato tipo di entità API.


| Entità API | Campi di posizione validi | Campi di posizione obbligatori | Valori dei campi predefiniti | Contenuto ereditabile | 
| --- | --- | --- | --- | --- | 
| [API](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html) |  <pre>{<br />    "location": {<br />        "type": "API" <br />    }, <br />    ... <br />}</pre>  | type | N/A | No | 
| [Risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) |  <pre>{ <br />    "location": { <br />        "type": "RESOURCE", <br />        "path": "resource_path" <br />    }, <br />    ... <br />}</pre>  | type | Il valore predefinito di path è /.  | No | 
| [Metodo](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) |  <pre>{ <br />    "location": { <br />        "type": "METHOD", <br />        "path": "resource_path", <br />        "method": "http_verb" <br />    }, <br />    ... <br />}</pre>  | type | I valori predefiniti di path e method sono / e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method per qualsiasi valore.  | 
| Parametro di query |  <pre>{ <br />    "location": { <br />        "type": "QUERY_PARAMETER", <br />        "path": "resource_path", <br />        "method": "HTTP_verb",<br />        "name": "query_parameter_name" <br />    }, <br />    ... <br />}</pre>  | type | I valori predefiniti di path e method sono / e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method per i valori esatti. | 
| Corpo di richiesta |  <pre>{ <br />    "location": { <br />        "type": "REQUEST_BODY", <br />        "path": "resource_path", <br />        "method": "http_verb" <br />    }, <br />    ... <br />}</pre>  | type | I valori predefiniti di path e method sono / e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method per i valori esatti. | 
| Parametro di intestazione di richiesta |  <pre>{ <br />    "location": { <br />        "type": "REQUEST_HEADER", <br />        "path": "resource_path", <br />        "method": "HTTP_verb",<br />        "name": "header_name" <br />    }, <br />    ... <br />}</pre>  | type, name | I valori predefiniti di path e method sono / e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method per i valori esatti. | 
| Parametro di percorso richiesta |  <pre>{ <br />    "location": { <br />        "type": "PATH_PARAMETER", <br />        "path": "resource/{path_parameter_name}", <br />        "method": "HTTP_verb",<br />        "name": "path_parameter_name" <br />    }, <br />    ... <br />}</pre>  | type, name | I valori predefiniti di path e method sono / e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method per i valori esatti. | 
| Risposta |  <pre>{ <br />    "location": { <br />        "type": "RESPONSE", <br />        "path": "resource_path", <br />        "method": "http_verb", <br />        "statusCode": "status_code" <br />    }, <br />    ... <br />}</pre>  | type | I valori predefiniti di path, method e statusCode sono /, \$1 e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method e statusCode per i valori esatti. | 
| Intestazione della risposta |  <pre>{ <br />    "location": { <br />        "type": "RESPONSE_HEADER", <br />        "path": "resource_path", <br />        "method": "http_verb", <br />        "statusCode": "status_code", <br />        "name": "header_name" <br />    }, <br />    ... <br />}</pre>  | type, name | I valori predefiniti di path, method e statusCode sono /, \$1 e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method e statusCode per i valori esatti. | 
| Corpo di risposta |  <pre>{ <br />    "location": { <br />        "type": "RESPONSE_BODY", <br />        "path": "resource_path", <br />        "method": "http_verb", <br />        "statusCode": "status_code" <br />    }, <br />    ... <br />}</pre>  | type | I valori predefiniti di path, method e statusCode sono /, \$1 e \$1, rispettivamente.  | Sì, con corrispondenza di path per il prefisso e corrispondenza di method e statusCode per i valori esatti. | 
| [Authorizer](https://docs.aws.amazon.com/apigateway/latest/api/API_Authorizer.html) |  <pre>{ <br />    "location": { <br />        "type": "AUTHORIZER", <br />        "name": "authorizer_name" <br />    }, <br />    ... <br />}</pre>  | type | N/A | No | 
| [Modello](https://docs.aws.amazon.com/apigateway/latest/api/API_Model.html) |  <pre>{ <br />    "location": { <br />        "type": "MODEL", <br />        "name": "model_name" <br />    }, <br />    ... <br />}</pre>  | type | N/A | No | 

## Versioni della documentazione
<a name="api-gateway-documenting-api-content-representation-documentation-versions"></a>

Una versione della documentazione è un'istantanea della [DocumentationParts](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)raccolta di un'API ed è contrassegnata con un identificatore di versione. La pubblicazione della documentazione di un'API implica la creazione di una versione della documentazione, l'associazione con una fase API e l'esportazione della versione specifica della fase della documentazione dell'API in un file OpenAPI esterno. In API Gateway, un'istantanea della documentazione è rappresentata come una [DocumentationVersion](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html)risorsa. 

Quando aggiorni un'API, crei nuove versioni dell'API. In API Gateway, gestisci tutte le versioni della documentazione utilizzando la [DocumentationVersions](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html)raccolta.

# Documentare un'API utilizzando la console API Gateway
<a name="api-gateway-documenting-api-quick-start-with-console"></a>

In questa sezione, viene descritto come creare e gestire la parti della documentazione di un'API tramite la console API Gateway. 

Un prerequisito per la creazione e la modifica della documentazione di un'API è che l'API deve essere già stata creata. In questa sezione, utilizziamo l'[PetStore](http://petstore-demo-endpoint.execute-api.com/petstore/pets)API come esempio. Per creare un'API utilizzando la console API Gateway, seguire le istruzioni in [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md). 

**Topics**
+ [Documentare l'entità `API`](#api-gateway-document-api-add-document-part-for-api-entity-with-console)
+ [Documentare un'entità `RESOURCE`](#api-gateway-document-api-add-document-part-for-resource-entity-with-console)
+ [Documentare un'entità `METHOD`](#api-gateway-document-api-add-document-part-for-method-entity-with-console)
+ [Documentare un'entità `QUERY_PARAMETER`](#api-gateway-document-api-add-document-part-for-request-query-entity-with-console)
+ [Documentare un'entità `PATH_PARAMETER`](#api-gateway-document-api-add-document-part-for-path-parameter-entity-with-console)
+ [Documentare un'entità `REQUEST_HEADER`](#api-gateway-document-api-add-document-part-for-request-header-entity-with-console)
+ [Documentare un'entità `REQUEST_BODY`](#api-gateway-document-api-add-document-part-for-request-body-entity-with-console)
+ [Documentare un'entità `RESPONSE`](#api-gateway-document-api-add-document-part-for-response-with-console)
+ [Documentare un'entità `RESPONSE_HEADER`](#api-gateway-document-api-add-document-part-for-response-header-entity-with-console)
+ [Documentare un'entità `RESPONSE_BODY`](#api-gateway-document-api-add-document-part-for-response-body-entity-with-console)
+ [Documentare un'entità `MODEL`](#api-gateway-document-api-add-document-part-for-model-entity-with-console)
+ [Documentare un'entità `AUTHORIZER`](#api-gateway-document-api-add-document-part-for-authorizer-entity-with-console)

## Documentare l'entità `API`
<a name="api-gateway-document-api-add-document-part-for-api-entity-with-console"></a>

Per aggiungere una nuova parte della documentazione per l'entità `API`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **API**.

   Se una parte della documentazione non è stata creata per l'`API`, viene visualizzato l'editor della mappa di `properties` della parte della documentazione. Inserisci la seguente mappa di `properties` nell'editor di testo. 

   ```
   {
     "info": {
       "description": "Your first API Gateway API.",
       "contact": {
           "name": "John Doe",
           "email": "john.doe@api.com"
       }
     }
   }
   ```
**Nota**  
 Non è necessario codificare la mappa `properties` in una stringa JSON. La console API Gateway trasforma in stringa l'oggetto JSON per tuo conto. 

1. Scegli **Crea parte della documentazione**.

Per aggiungere una nuova parte della documentazione per l'entità `API` nel riquadro **Risorse**, procedi come segue:

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

1. Scegli il menu **Operazioni API**, quindi seleziona **Aggiorna documentazione dell'API**.

      
![\[Modificare la documentazione per l'entità API nella console API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/document-api-entity-using-new-console.png)

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. Seleziona il nome dell'API, quindi nella scheda dell'API scegli **Modifica**.

## Documentare un'entità `RESOURCE`
<a name="api-gateway-document-api-add-document-part-for-resource-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `RESOURCE`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Risorsa**.

1. Per **Percorso** inserisci un percorso.

1. Immetti una descrizione nell'editor di testo, ad esempio:

   ```
   {
       "description": "The PetStore's root resource."
   }
   ```

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per una risorsa non elencata.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per aggiungere una nuova parte della documentazione per un'entità `RESOURCE` nel riquadro **Risorse**, procedi come segue:

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

1. Scegli la risorsa, quindi seleziona **Aggiorna documentazione**.

      
![\[Modifica della documentazione per l'entità risorsa nella console Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/document-resource-entity-using-new-console.png)

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. Seleziona la risorsa contenente la parte della documentazione, quindi scegli **Modifica**.

## Documentare un'entità `METHOD`
<a name="api-gateway-document-api-add-document-part-for-method-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `METHOD`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Metodo**.

1. Per **Percorso** inserisci un percorso.

1. Per **Metodo** seleziona un verbo HTTP.

1. Immetti una descrizione nell'editor di testo, ad esempio:

   ```
   {
     "tags" : [ "pets" ],
     "summary" : "List all pets"
   }
   ```

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un metodo non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per aggiungere una nuova parte della documentazione per un'entità `METHOD` nel riquadro **Risorse**, procedi come segue:

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

1. Scegli il metodo, quindi seleziona **Aggiorna documentazione**.

      
![\[Modifica della documentazione per l'entità metodo nella console Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/document-method-entity-using-new-console.png)

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il metodo o la risorsa contenente il metodo, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1.  Scegli **Modifica**.

## Documentare un'entità `QUERY_PARAMETER`
<a name="api-gateway-document-api-add-document-part-for-request-query-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `QUERY_PARAMETER`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Parametro di query**.

1. Per **Percorso** inserisci un percorso.

1. Per **Metodo** seleziona un verbo HTTP.

1. In **Nome**, immetti un nome.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un parametro di query non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il parametro di query o la risorsa contenente il parametro di query, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `PATH_PARAMETER`
<a name="api-gateway-document-api-add-document-part-for-path-parameter-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `PATH_PARAMETER`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Parametro di percorso**.

1. Per **Percorso** inserisci un percorso.

1. Per **Metodo** seleziona un verbo HTTP.

1. In **Nome**, immetti un nome.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un parametro di percorso non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il parametro di percorso o la risorsa contenente il parametro di percorso, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `REQUEST_HEADER`
<a name="api-gateway-document-api-add-document-part-for-request-header-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `REQUEST_HEADER`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Intestazione della richiesta**.

1. Per **Percorso** inserisci il percorso dell'intestazione della richiesta.

1. Per **Metodo** seleziona un verbo HTTP.

1. In **Nome**, immetti un nome.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un'intestazione della richiesta non elencata.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare l'intestazione della richiesta o la risorsa contenente l'intestazione della richiesta, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `REQUEST_BODY`
<a name="api-gateway-document-api-add-document-part-for-request-body-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `REQUEST_BODY`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Corpo della richiesta**.

1. Per **Percorso** inserisci il percorso del corpo della richiesta.

1. Per **Metodo** seleziona un verbo HTTP.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un corpo della richiesta non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il corpo della richiesta o la risorsa contenente il corpo della richiesta, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `RESPONSE`
<a name="api-gateway-document-api-add-document-part-for-response-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `RESPONSE`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Risposta (codice di stato)**.

1. Per **Percorso** inserisci un percorso per la risposta.

1. Per **Metodo** seleziona un verbo HTTP.

1. Per **Codice di stato** inserisci un codice di stato HTTP.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un codice di stato della risposta non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il codice di stato della risposta o la risorsa contenente il codice di stato della risposta, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `RESPONSE_HEADER`
<a name="api-gateway-document-api-add-document-part-for-response-header-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `RESPONSE_HEADER`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Intestazione della risposta**.

1. Per **Percorso** inserisci un percorso per l'intestazione della risposta.

1. Per **Metodo** seleziona un verbo HTTP.

1. Per **Codice di stato** inserisci un codice di stato HTTP.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un'intestazione della risposta non elencata.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare l'intestazione della risposta o la risorsa contenente l'intestazione della risposta, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `RESPONSE_BODY`
<a name="api-gateway-document-api-add-document-part-for-response-body-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `RESPONSE_BODY`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Corpo della risposta**.

1. Per **Percorso** inserisci un percorso per il corpo della risposta.

1. Per **Metodo** seleziona un verbo HTTP.

1. Per **Codice di stato** inserisci un codice di stato HTTP.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per un corpo della risposta non elencato.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare un'altra parte della documentazione.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Risorse e metodi**.

1. È possibile selezionare il corpo della risposta o la risorsa contenente il corpo della risposta, quindi utilizzare la barra di ricerca per trovare e scegliere la parte della documentazione.

1. Scegli **Modifica**.

## Documentare un'entità `MODEL`
<a name="api-gateway-document-api-add-document-part-for-model-entity-with-console"></a>

La documentazione di un'entità `MODEL` comporta la creazione e la gestione delle istanze di `DocumentPart` per il modello e gli elementi `properties` del modello. Ad esempio, per il modello `Error` fornito con ogni API per impostazione predefinita ha la seguente definizione dello schema:

```
{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "Error Schema",
  "type" : "object",
  "properties" : {
    "message" : { "type" : "string" }
  }
}
```

 e richiede due istanze di `DocumentationPart`, una per `Model` e l'altra per la relativa proprietà `message`:

```
{
  "location": {
    "type": "MODEL",
    "name": "Error"
  },
  "properties": {
    "title": "Error Schema",
    "description": "A description of the Error model"
  }
}
```

e

```
{
  "location": {
    "type": "MODEL",
    "name": "Error.message"
  },
  "properties": {
    "description": "An error message."
  }
}
```

Quando l'API viene esportata, le proprietà di `DocumentationPart` sostituiscono i valori dello schema originale.

 Per aggiungere una nuova parte della documentazione per un'entità `MODEL`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Modello**.

1. Per **Nome** inserisci un nome per il processo.

1. Immetti una descrizione nell'editor di testo.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per modelli non elencati.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare una parte della documentazione per altri modelli.

Per aggiungere una nuova parte della documentazione per un'entità `MODEL` nel riquadro **Modelli**, procedi come segue:

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

1. Scegli il modello, quindi seleziona **Aggiorna documentazione**.

      
![\[Modifica della documentazione per l'entità modello nella console Gateway API\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/document-model-entity-using-new-console.png)

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Modelli**.

1. Utilizza la barra di ricerca o seleziona il modello, quindi scegli **Modifica**.

## Documentare un'entità `AUTHORIZER`
<a name="api-gateway-document-api-add-document-part-for-authorizer-entity-with-console"></a>

 Per aggiungere una nuova parte della documentazione per un'entità `AUTHORIZER`, procedi come segue:

1. Nel riquadro di navigazione principale scegli **Documentazione**, quindi seleziona **Crea parte della documentazione**.

1. Per **Tipo di documentazione** seleziona **Sistema di autorizzazione**.

1. Per **Nome** immetti il nome del sistema di autorizzazione.

1. Immetti una descrizione nell'editor di testo. Specifica un valore per il campo `location` valido per il sistema di autorizzazione.

1. Scegli **Crea parte della documentazione**. È possibile creare la documentazione per sistemi di autorizzazione non elencati.

1.  Se necessario, ripeti queste fasi per aggiungere o modificare una parte della documentazione per altre autorizzazioni.

Per modificare una parte della documentazione esistente, procedi come segue:

1. Nel riquadro **Documentazione** scegli la scheda **Sistemi di autorizzazione**.

1. Utilizza la barra di ricerca o seleziona il sistema di autorizzazione, quindi scegli **Modifica**.

# Pubblicare la documentazione dell'API utilizzando la console API Gateway
<a name="apigateway-documenting-api-with-console"></a>

La procedura seguente mostra come pubblicare una versione della documentazione.

**Per pubblicare una versione della documentazione utilizzando la console API Gateway**

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

1. Seleziona **Pubblica documentazione**.

1. Configura la pubblicazione:

   1. In **Fase**, seleziona una fase.

   1. Per **Versione** inserisci un identificatore di versione, ad esempio `1.0.0`.

   1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Publish** (Pubblica).

Ora puoi procedere con il download della documentazione pubblicata esportando la documentazione in un file OpenAPI esterno. Per ulteriori informazioni, consulta [Esportazione di un'API REST da API Gateway](api-gateway-export-api.md).

# Documentare un'API utilizzando l'API REST di API Gateway
<a name="api-gateway-documenting-api-quick-start-with-restapi"></a>

In questa sezione viene descritto come creare e gestire la parti della documentazione di un'API tramite l'API REST di API Gateway.

Un prerequisito per la creazione e la modifica della documentazione di un'API è aver già creato l'API. In questa sezione, utilizziamo l'[PetStore](http://petstore-demo-endpoint.execute-api.com/petstore/pets)API come esempio. Per creare un'API utilizzando la console API Gateway, seguire le istruzioni in [Tutorial: creazione di un'API REST mediante l'importazione di un esempio](api-gateway-create-api-from-example.md). 

**Topics**
+ [Documentare l'entità `API`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-api)
+ [Documentare un'entità `RESOURCE`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-resource)
+ [Documentare un'entità `METHOD`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-method)
+ [Documentare un'entità `QUERY_PARAMETER`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-query-parameter)
+ [Documentare un'entità `PATH_PARAMETER`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-path-parameter)
+ [Documentare un'entità `REQUEST_BODY`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-request-body)
+ [Documentare un'entità `REQUEST_HEADER`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-request-header)
+ [Documentare un'entità `RESPONSE`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-response)
+ [Documentare un'entità `RESPONSE_HEADER`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-response-header)
+ [Documentare un'entità `AUTHORIZER`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-authorizer)
+ [Documentare un'entità `MODEL`](#api-gateway-documenting-api-quick-start-with-restapi-add-content-to-model)
+ [Aggiornare le parti della documentazione](#api-gateway-documenting-api-quick-start-with-restapi-update-content)
+ [Elencare le parti della documentazione](#api-gateway-documenting-api-quick-start-with-restapi-list-parts)

## Documentare l'entità `API`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-api"></a>

Per aggiungere la documentazione per un'[API](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html), aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa per l'entità API:

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret   

{
    "location" : {
         "type" : "API"
    },
    "properties": "{\n\t\"info\": {\n\t\t\"description\" : \"Your first API with Amazon API Gateway.\"\n\t}\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  ...
  "id": "s2e5xf",
  "location": {
    "path": null,
    "method": null,
    "name": null,
    "statusCode": null,
    "type": "API"
  },
  "properties": "{\n\t\"info\": {\n\t\t\"description\" : \"Your first API with Amazon API Gateway.\"\n\t}\n}"
}
```

Se la documentazione è già stata aggiunta, viene restituita una risposta `409 Conflict` contenente il messaggio di errore `Documentation part already exists for the specified location: type 'API'."`. In questo caso è necessario eseguire l'operazione [documentationpart:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDocumentationPart.html).

```
PATCH /restapis/4wk1k4onj3/documentation/parts/part_id HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
  "patchOperations" : [ {
    "op" : "replace",
    "path" : "/properties",
    "value" : "{\n\t\"info\": {\n\t\t\"description\" : \"Your first API with Amazon API Gateway.\"\n\t}\n}"
  } ]
}
```

La risposta con esito positivo restituisce un codice di stato `200 OK` con un payload che include l'istanza `DocumentationPart` aggiornata nel payload.

## Documentare un'entità `RESOURCE`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-resource"></a>

Per aggiungere la documentazione per la risorsa principale di un'API, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata alla risorsa di [risorsa](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) corrispondente:

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret   

{
    "location" : {
       "type" : "RESOURCE",
    },
    "properties" : "{\n\t\"description\" : \"The PetStore root resource.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio: 

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/p76vqo"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/p76vqo"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/p76vqo"
    }
  },
  "id": "p76vqo",
  "location": {
    "path": "/",
    "method": null,
    "name": null,
    "statusCode": null,
    "type": "RESOURCE"
  },
  "properties": "{\n\t\"description\" : \"The PetStore root resource.\"\n}"
}
```

Quando il percorso della risorsa non è specificato, si presume che la risorsa sia la risorsa radice. Puoi aggiungere `"path": "/"` a `properties` per rendere esplicita la specifica.

Per creare la documentazione per una risorsa figlia di un'API, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata alla risorsa [Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html) corrispondente:

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "RESOURCE",
         "path" : "/pets"
    },
    "properties": "{\n\t\"description\" : \"A child resource under the root of PetStore.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/qcht86"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/qcht86"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/qcht86"
    }
  },
  "id": "qcht86",
  "location": {
    "path": "/pets",
    "method": null,
    "name": null,
    "statusCode": null,
    "type": "RESOURCE"
  },
  "properties": "{\n\t\"description\" : \"A child resource under the root of PetStore.\"\n}"
}
```

Per aggiungere la documentazione per una risorsa secondaria specificata da un parametro path, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata alla [risorsa Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html):

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "RESOURCE",
         "path" : "/pets/{petId}"
    },
    "properties": "{\n\t\"description\" : \"A child resource specified by the petId path parameter.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/k6fpwb"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/k6fpwb"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/k6fpwb"
    }
  },
  "id": "k6fpwb",
  "location": {
    "path": "/pets/{petId}",
    "method": null,
    "name": null,
    "statusCode": null,
    "type": "RESOURCE"
  },
  "properties": "{\n\t\"description\" : \"A child resource specified by the petId path parameter.\"\n}"
}
```

**Nota**  
L'[DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)istanza di un'`RESOURCE`entità non può essere ereditata da nessuna delle sue risorse secondarie.

## Documentare un'entità `METHOD`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-method"></a>

Per aggiungere la documentazione per un metodo di un'API, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata alla risorsa [Method](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html) corrispondente:

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "METHOD",
         "path" : "/pets",
         "method" : "GET"
    },
    "properties": "{\n\t\"summary\" : \"List all pets.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio: 

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    }
  },
  "id": "o64jbj",
  "location": {
    "path": "/pets",
    "method": "GET",
    "name": null,
    "statusCode": null,
    "type": "METHOD"
  },
  "properties": "{\n\t\"summary\" : \"List all pets.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    }
  },
  "id": "o64jbj",
  "location": {
    "path": "/pets",
    "method": "GET",
    "name": null,
    "statusCode": null,
    "type": "METHOD"
  },
  "properties": "{\n\t\"summary\" : \"List all pets.\"\n}"
}
```

Se il campo `location.method` non è specificato nella richiesta precedente, si presume che sia il metodo `ANY` rappresentato da un carattere jolly `*`.

Per aggiornare il contenuto della documentazione di un'entità `METHOD`, chiamare l'operazione [documentationpart:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateDocumentationPart.html), fornendo una nuova mappa di `properties`:

```
PATCH /restapis/4wk1k4onj3/documentation/parts/part_id HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
  "patchOperations" : [ {
    "op" : "replace",
    "path" : "/properties",
    "value" : "{\n\t\"tags\" : [ \"pets\" ], \n\t\"summary\" : \"List all pets.\"\n}"
  } ]
}
```

La risposta con esito positivo restituisce un codice di stato `200 OK` con un payload che include l'istanza `DocumentationPart` aggiornata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/o64jbj"
    }
  },
  "id": "o64jbj",
  "location": {
    "path": "/pets",
    "method": "GET",
    "name": null,
    "statusCode": null,
    "type": "METHOD"
  },
  "properties": "{\n\t\"tags\" : [ \"pets\" ], \n\t\"summary\" : \"List all pets.\"\n}"
}
```

## Documentare un'entità `QUERY_PARAMETER`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-query-parameter"></a>

Per aggiungere la documentazione per un parametro di query di richiesta, aggiungete una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa mirata al `QUERY_PARAMETER` tipo, con i campi validi di `path` and`name`.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "QUERY_PARAMETER",
         "path" : "/pets",
         "method" : "GET",
         "name" : "page"
    },
    "properties": "{\n\t\"description\" : \"Page number of results to return.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h9ht5w"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h9ht5w"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h9ht5w"
    }
  },
  "id": "h9ht5w",
  "location": {
    "path": "/pets",
    "method": "GET",
    "name": "page",
    "statusCode": null,
    "type": "QUERY_PARAMETER"
  },
  "properties": "{\n\t\"description\" : \"Page number of results to return.\"\n}"
}
```

La mappa di `properties` della parte della documentazione di un'entità `QUERY_PARAMETER` può essere ereditata da uno delle relative entità figlio `QUERY_PARAMETER`. Ad esempio se aggiungi una risorsa `treats` dopo `/pets/{petId}`, abiliti il metodo `GET` su `/pets/{petId}/treats` ed esponi il parametro di query `page`, questo parametro di query figlio eredita la mappa di `DocumentationPart` di `properties` dal parametro di query con nome simile del metodo `GET /pets`, a meno che non aggiungi esplicitamente una risorsa `DocumentationPart` al parametro di query `page` del metodo `GET /pets/{petId}/treats`.

## Documentare un'entità `PATH_PARAMETER`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-path-parameter"></a>

Per aggiungere la documentazione per un parametro di percorso, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa per l'`PATH_PARAMETER`entità.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "PATH_PARAMETER",
         "path" : "/pets/{petId}",
         "method" : "*",
         "name" : "petId"
    },
    "properties": "{\n\t\"description\" : \"The id of the pet to retrieve.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/ckpgog"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/ckpgog"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/ckpgog"
    }
  },
  "id": "ckpgog",
  "location": {
    "path": "/pets/{petId}",
    "method": "*",
    "name": "petId",
    "statusCode": null,
    "type": "PATH_PARAMETER"
  },
  "properties": "{\n  \"description\" : \"The id of the pet to retrieve\"\n}"
}
```

## Documentare un'entità `REQUEST_BODY`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-request-body"></a>

Per aggiungere documentazione per un corpo della richiesta, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa per il corpo della richiesta.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "REQUEST_BODY",
         "path" : "/pets",
         "method" : "POST"
    },
    "properties": "{\n\t\"description\" : \"A Pet object to be added to PetStore.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/kgmfr1"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/kgmfr1"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/kgmfr1"
    }
  },
  "id": "kgmfr1",
  "location": {
    "path": "/pets",
    "method": "POST",
    "name": null,
    "statusCode": null,
    "type": "REQUEST_BODY"
  },
  "properties": "{\n\t\"description\" : \"A Pet object to be added to PetStore.\"\n}"
}
```

## Documentare un'entità `REQUEST_HEADER`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-request-header"></a>

Per aggiungere documentazione per l'intestazione di una richiesta, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa per l'intestazione della richiesta.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "REQUEST_HEADER",
         "path" : "/pets",
         "method" : "GET",
         "name" : "x-my-token"
    },
    "properties": "{\n\t\"description\" : \"A custom token used to authorization the method invocation.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h0m3uf"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h0m3uf"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/h0m3uf"
    }
  },
  "id": "h0m3uf",
  "location": {
    "path": "/pets",
    "method": "GET",
    "name": "x-my-token",
    "statusCode": null,
    "type": "REQUEST_HEADER"
  },
  "properties": "{\n\t\"description\" : \"A custom token used to authorization the method invocation.\"\n}"
}
```

## Documentare un'entità `RESPONSE`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-response"></a>

Per aggiungere la documentazione per una risposta a un codice di stato, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata alla risorsa corrispondente [MethodResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_MethodResponse.html).

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location": {
      "path": "/",
      "method": "*",
      "name": null,
      "statusCode": "200",
      "type": "RESPONSE"
    },
    "properties": "{\n  \"description\" : \"Successful operation.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio:

```
{
    "_links": {
        "self": {
            "href": "/restapis/4wk1k4onj3/documentation/parts/lattew"
        },
        "documentationpart:delete": {
            "href": "/restapis/4wk1k4onj3/documentation/parts/lattew"
        },
        "documentationpart:update": {
            "href": "/restapis/4wk1k4onj3/documentation/parts/lattew"
        }
    },
    "id": "lattew",
    "location": {
        "path": "/",
        "method": "*",
        "name": null,
        "statusCode": "200",
        "type": "RESPONSE"
    },
    "properties": "{\n  \"description\" : \"Successful operation.\"\n}"
}
```

## Documentare un'entità `RESPONSE_HEADER`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-response-header"></a>

Per aggiungere la documentazione per un'intestazione di risposta, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa per l'intestazione della risposta.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

  "location": {
    "path": "/",
    "method": "GET",
    "name": "Content-Type",
    "statusCode": "200",
    "type": "RESPONSE_HEADER"
  },
  "properties": "{\n  \"description\" : \"Media type of request\"\n}"
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Ad esempio: 

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/fev7j7"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/fev7j7"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/fev7j7"
    }
  },
  "id": "fev7j7",
  "location": {
    "path": "/",
    "method": "GET",
    "name": "Content-Type",
    "statusCode": "200",
    "type": "RESPONSE_HEADER"
  },
  "properties": "{\n  \"description\" : \"Media type of request\"\n}"
}
```

La documentazione di questa intestazione di risposta `Content-Type` è la documentazione predefinita per le intestazioni `Content-Type` di qualsiasi risposta dell'API. 

## Documentare un'entità `AUTHORIZER`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-authorizer"></a>

Per aggiungere documentazione per un autorizzatore API, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata all'autorizzatore specificato.

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "AUTHORIZER",
         "name" : "myAuthorizer"
    },
    "properties": "{\n\t\"description\" : \"Authorizes invocations of configured methods.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Esempio: 

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/pw3qw3"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/pw3qw3"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/pw3qw3"
    }
  },
  "id": "pw3qw3",
  "location": {
    "path": null,
    "method": null,
    "name": "myAuthorizer",
    "statusCode": null,
    "type": "AUTHORIZER"
  },
  "properties": "{\n\t\"description\" : \"Authorizes invocations of configured methods.\"\n}"
}
```

**Nota**  
L'[DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)istanza di un'`AUTHORIZER`entità non può essere ereditata da nessuna delle sue risorse secondarie.

## Documentare un'entità `MODEL`
<a name="api-gateway-documenting-api-quick-start-with-restapi-add-content-to-model"></a>

 La documentazione di un'entità `MODEL` comporta la creazione e la gestione delle istanze di `DocumentPart` per il modello e gli elementi `properties` del modello. Ad esempio, per il modello `Error` fornito con ogni API per impostazione predefinita ha la seguente definizione dello schema: 

```
{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "Error Schema",
  "type" : "object",
  "properties" : {
    "message" : { "type" : "string" }
  }
}
```

 e richiede due istanze di `DocumentationPart`, una per `Model` e l'altra per la relativa proprietà `message`: 

```
{
  "location": {
    "type": "MODEL",
    "name": "Error"
  },
  "properties": {
    "title": "Error Schema",
    "description": "A description of the Error model"
  }
}
```

e

```
{
  "location": {
    "type": "MODEL",
    "name": "Error.message"
  },
  "properties": {
    "description": "An error message."
  }
}
```

Quando l'API viene esportata, le proprietà di `DocumentationPart` sostituiscono i valori dello schema originale. 

 Per aggiungere documentazione per un modello API, aggiungi una [DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)risorsa destinata al modello specificato. 

```
POST /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "location" : {
         "type" : "MODEL",
         "name" : "Pet"
    },
    "properties": "{\n\t\"description\" : \"Data structure of a Pet object.\"\n}"
}
```

Se con esito positivo, l'operazione restituisce una risposta `201 Created` contenente la nuova istanza `DocumentationPart` creata nel payload. Esempio: 

```
{
  "_links": {
    "curies": {
      "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-documentationpart-{rel}.html",
      "name": "documentationpart",
      "templated": true
    },
    "self": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/lkn4uq"
    },
    "documentationpart:delete": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/lkn4uq"
    },
    "documentationpart:update": {
      "href": "/restapis/4wk1k4onj3/documentation/parts/lkn4uq"
    }
  },
  "id": "lkn4uq",
  "location": {
    "path": null,
    "method": null,
    "name": "Pet",
    "statusCode": null,
    "type": "MODEL"
  },
  "properties": "{\n\t\"description\" : \"Data structure of a Pet object.\"\n}"
}
```

Ripetete lo stesso passaggio per creare un' DocumentationPart istanza per una qualsiasi delle proprietà del modello.

**Nota**  
L'[DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)istanza di un'`MODEL`entità non può essere ereditata da nessuna delle sue risorse secondarie.

## Aggiornare le parti della documentazione
<a name="api-gateway-documenting-api-quick-start-with-restapi-update-content"></a>

 Per aggiornare le parti della documentazione di qualsiasi tipo di entità API, invia una richiesta PATCH su un'[DocumentationPart](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)istanza di un identificatore di parte specificato per sostituire la `properties` mappa esistente con una nuova. 

```
PATCH /restapis/4wk1k4onj3/documentation/parts/part_id HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
                
{
  "patchOperations" : [ {
    "op" : "replace",
    "path" : "RESOURCE_PATH",
    "value" : "NEW_properties_VALUE_AS_JSON_STRING"
  } ]
}
```

La risposta con esito positivo restituisce un codice di stato `200 OK` con un payload che include l'istanza `DocumentationPart` aggiornata nel payload.

Puoi aggiornare più parti della documentazione in una singola richiesta `PATCH`.

## Elencare le parti della documentazione
<a name="api-gateway-documenting-api-quick-start-with-restapi-list-parts"></a>

 Per elencare le parti della documentazione di qualsiasi tipo di entità API, invia una richiesta GET su una [DocumentationParts](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html)raccolta. 

```
GET /restapis/restapi_id/documentation/parts HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
```

La risposta con esito positivo restituisce un codice di stato `200 OK` con un payload che include le istanze `DocumentationPart` disponibili nel payload.

# Pubblicare la documentazione dell'API utilizzando l'API REST di API Gateway
<a name="api-gateway-documenting-api-quick-start-publishing"></a>

Per pubblicare la documentazione per un'API, crea, aggiorna o ottieni uno snapshot della documentazione, quindi associa lo snapshot della documentazione a una fase dell'API. Quando crei uno snapshot della documentazione, puoi anche contemporaneamente associarlo a una fase dell'API.

**Topics**
+ [Creare uno snapshot della documentazione e associarlo a una fase dell'API](#api-gateway-documenting-api-publishing-create-documentation-version-with-stage)
+ [Creare uno snapshot della documentazione](#api-gateway-documenting-api-publishing-create-documentation-version)
+ [Aggiornare uno snapshot della documentazione](#api-gateway-documenting-api-publishing-update-documentation-version)
+ [Ottenere uno snapshot della documentazione](#api-gateway-documenting-api-publishing-get-documentation-version)
+ [Associare uno snapshot della documentazione a una fase dell'API](#api-gateway-documenting-api-publishing-stage-association)
+ [Scaricare uno snapshot della documentazione associato a una fase](#api-gateway-documenting-api-publishing-export-documentation-version)

## Creare uno snapshot della documentazione e associarlo a una fase dell'API
<a name="api-gateway-documenting-api-publishing-create-documentation-version-with-stage"></a>

Per creare uno snapshot delle parti della documentazione di un'API e associarlo contemporaneamente a una fase dell'API, invia la seguente richiesta `POST`:

```
POST /restapis/restapi_id/documentation/versions HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "documentationVersion" : "1.0.0",
    "stageName": "prod",
    "description" : "My API Documentation v1.0.0"
}
```

Se con esito positivo, l'operazione restituisce una risposta `200 OK` contenente la nuova istanza `DocumentationVersion` creata come payload.

In alternativa, è possibile creare uno snapshot della documentazione senza associarlo prima a una fase dell'API e quindi chiamare [restapi:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateRestApi.html) per associare lo snapshot a una fase dell'API specificata. Puoi inoltre aggiornare o interrogare uno snapshot della documentazione esistente e quindi aggiornare la relativa associazione della fase. Le fasi vengono illustrate nelle prossime quattro sezioni.

## Creare uno snapshot della documentazione
<a name="api-gateway-documenting-api-publishing-create-documentation-version"></a>

Per creare un'istantanea delle parti della documentazione di un'API, crea una nuova [DocumentationVersion](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html)risorsa e aggiungila alla [DocumentationVersions](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html)raccolta dell'API:

```
POST /restapis/restapi_id/documentation/versions HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "documentationVersion" : "1.0.0",
    "description" : "My API Documentation v1.0.0"
}
```

Se con esito positivo, l'operazione restituisce una risposta `200 OK` contenente la nuova istanza `DocumentationVersion` creata come payload.

## Aggiornare uno snapshot della documentazione
<a name="api-gateway-documenting-api-publishing-update-documentation-version"></a>

È possibile aggiornare un'istantanea della documentazione solo modificando la `description` proprietà della risorsa corrispondente. [DocumentationVersion](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html) L'esempio seguente mostra come aggiornare la descrizione dello snapshot della documentazione come identificata dal relativo identificatore di versione, `version`, ad esempio `1.0.0`.

```
PATCH /restapis/restapi_id/documentation/versions/version HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "patchOperations": [{
        "op": "replace",
        "path": "/description",
        "value": "My API for testing purposes."
    }]
}
```

Se con esito positivo, l'operazione restituisce una risposta `200 OK` contenente l'istanza `DocumentationVersion` aggiornata come payload. 

## Ottenere uno snapshot della documentazione
<a name="api-gateway-documenting-api-publishing-get-documentation-version"></a>

Per ottenere un'istantanea della documentazione, invia una `GET` richiesta relativa alla risorsa specificata. [DocumentationVersion](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationVersion.html) L'esempio seguente mostra come ottenere uno snapshot della documentazione di un dato identificatore di versione, 1.0.0.

```
GET /restapis/<restapi_id>/documentation/versions/1.0.0 HTTP/1.1
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
```

## Associare uno snapshot della documentazione a una fase dell'API
<a name="api-gateway-documenting-api-publishing-stage-association"></a>

Per pubblicare la documentazione dell'API, associa uno snapshot della documentazione a una fase dell'API. Devi aver già creato la fase dell'API prima di associare la versione della documentazione alla fase.

Per associare uno snapshot della documentazione a una fase dell'API utilizzando l'[API REST di API Gateway](https://docs.aws.amazon.com/apigateway/latest/api/), esegui l'operazione [stage:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) per impostare a versione della documentazione desiderata sulla proprietà `stage.documentationVersion`:

```
PATCH /restapis/RESTAPI_ID/stages/STAGE_NAME
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
    "patchOperations": [{
        "op": "replace",
        "path": "/documentationVersion",
        "value": "VERSION_IDENTIFIER"
    }]
}
```

## Scaricare uno snapshot della documentazione associato a una fase
<a name="api-gateway-documenting-api-publishing-export-documentation-version"></a>

Dopo aver associato una versione delle parti della documentazione a uno stage, è possibile esportare le parti della documentazione insieme alle definizioni delle entità API, in un file esterno, utilizzando la console API Gateway, l'API REST API Gateway, una delle sue SDKs, o il AWS CLI for API Gateway. Il processo è uguale a quello utilizzato per esportare l'API. Il formato del file esportato può essere JSON o YAML. 

Utilizzando l'API REST di API Gateway, puoi anche impostare esplicitamente il parametro di query `extension=documentation,integrations,authorizers` per includere le parti della documentazione dell'API, le integrazioni API e le autorizzazioni in un'esportazione API. Per impostazione predefinita, le parti della documentazione sono incluse, ma le integrazioni e le autorizzazioni sono escluse quando si esporta un'API. L'output predefinito di un'esportazione API è adatto per la distribuzione della documentazione.

Per esportare la documentazione dell'API in un file OpenAPI JSON esterno usando l'API REST di API Gateway, inviare la seguente richiesta `GET`:

```
GET /restapis/restapi_id/stages/stage_name/exports/swagger?extensions=documentation HTTP/1.1
Accept: application/json
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
```

Qui, l'oggetto `x-amazon-apigateway-documentation` contiene le parti della documentazione e la definizione dell'entità API contiene le proprietà della documentazione supportate da OpenAPI. L'output non include dettagli sull'integrazione o sulle autorizzazioni Lambda (note in precedenza come autorizzazioni ad hoc). Per includere entrambi i dettagli, imposta `extensions=integrations,authorizers,documentation`. Per includere i dettagli delle integrazioni ma non delle autorizzazioni, imposta `extensions=integrations,documentation`. 

Imposta l'intestazione `Accept:application/json` nella richiesta per inserire l'output del risultato in un file JSON. Per produrre l'output YAML, imposta l'intestazione della richiesta su `Accept:application/yaml`. 

Ad esempio, esamineremo un'API che espone un semplice metodo `GET` sulla risorsa radice (`/`). Questa API ha quattro entità API definite in un file di definizione OpenAPI, uno per ciascuno dei tipi `API`, `MODEL`, `METHOD` e `RESPONSE`. Una parte della documentazione è stata aggiunta a ciascuna delle entità `API`, `METHOD` e `RESPONSE`. Chiamando il precedente comando di esportazione della documentazione, otteniamo il seguente output, con le parti della documentazione elencate nell'oggetto `x-amazon-apigateway-documentation` come estensione di un file OpenAPI standard.

------
#### [ OpenAPI 3.0 ]

```
{
   "openapi": "3.0.0",
   "info": {
      "description": "API info description",
      "version": "2016-11-22T22:39:14Z",
      "title": "doc",
      "x-bar": "API info x-bar"
   },
   "paths": {
      "/": {
         "get": {
            "description": "Method description.",
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               }
            },
            "x-example": "x- Method example"
         },
         "x-bar": "resource x-bar"
      }
   },
   "x-amazon-apigateway-documentation": {
      "version": "1.0.0",
      "createdDate": "2016-11-22T22:41:40Z",
      "documentationParts": [
         {
            "location": {
               "type": "API"
            },
            "properties": {
               "description": "API description",
               "foo": "API foo",
               "x-bar": "API x-bar",
               "info": {
                  "description": "API info description",
                  "version": "API info version",
                  "foo": "API info foo",
                  "x-bar": "API info x-bar"
               }
            }
         },
         {
            "location": {
               "type": "METHOD",
               "method": "GET"
            },
            "properties": {
               "description": "Method description.",
               "x-example": "x- Method example",
               "foo": "Method foo",
               "info": {
                  "version": "method info version",
                  "description": "method info description",
                  "foo": "method info foo"
               }
            }
         },
         {
            "location": {
               "type": "RESOURCE"
            },
            "properties": {
               "description": "resource description",
               "foo": "resource foo",
               "x-bar": "resource x-bar",
               "info": {
                  "description": "resource info description",
                  "version": "resource info version",
                  "foo": "resource info foo",
                  "x-bar": "resource info x-bar"
               }
            }
         }
      ]
   },
   "x-bar": "API x-bar",
   "servers": [
      {
         "url": "https://rznaap68yi.execute-api.ap-southeast-1.amazonaws.com/{basePath}",
         "variables": {
            "basePath": {
              "default": "/test"
            }
         }
      }
   ],
   "components": {
      "schemas": {
         "Empty": {
            "type": "object",
            "title": "Empty Schema"
         }
      }
   }
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger" : "2.0",
  "info" : {
    "description" : "API info description",
    "version" : "2016-11-22T22:39:14Z",
    "title" : "doc",
    "x-bar" : "API info x-bar"
  },
  "host" : "rznaap68yi.execute-api.ap-southeast-1.amazonaws.com",
  "basePath" : "/test",
  "schemes" : [ "https" ],
  "paths" : {
    "/" : {
      "get" : {
        "description" : "Method description.",
        "produces" : [ "application/json" ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "schema" : {
              "$ref" : "#/definitions/Empty"
            }
          }
        },
        "x-example" : "x- Method example"
      },
      "x-bar" : "resource x-bar"
    }
  },
  "definitions" : {
    "Empty" : {
      "type" : "object",
      "title" : "Empty Schema"
    }
  },
  "x-amazon-apigateway-documentation" : {
    "version" : "1.0.0",
    "createdDate" : "2016-11-22T22:41:40Z",
    "documentationParts" : [ {
      "location" : {
        "type" : "API"
      },
      "properties" : {
        "description" : "API description",
        "foo" : "API foo",
        "x-bar" : "API x-bar",
        "info" : {
          "description" : "API info description",
          "version" : "API info version",
          "foo" : "API info foo",
          "x-bar" : "API info x-bar"
        }
      }
    }, {
      "location" : {
        "type" : "METHOD",
        "method" : "GET"
      },
      "properties" : {
        "description" : "Method description.",
        "x-example" : "x- Method example",
        "foo" : "Method foo",
        "info" : {
          "version" : "method info version",
          "description" : "method info description",
          "foo" : "method info foo"
        }
      }
    }, {
      "location" : {
        "type" : "RESOURCE"
      },
      "properties" : {
        "description" : "resource description",
        "foo" : "resource foo",
        "x-bar" : "resource x-bar",
        "info" : {
          "description" : "resource info description",
          "version" : "resource info version",
          "foo" : "resource info foo",
          "x-bar" : "resource info x-bar"
        }
      }
    } ]
  },
  "x-bar" : "API x-bar"
}
```

------

Per un attributo conforme a OpenAPI definito nella mappa di `properties` di una parte della documentazione, API Gateway inserisce l'attributo nella definizione dell'entità API associata. Un attributo di `x-something` è un'estensione OpenAPI standard. Questa estensione viene propagata nella definizione dell'entità API. Ad esempio, consulta l'attributo `x-example` per il metodo `GET`. Un attributo come `foo` non fa parte delle specifiche OpenAPI e non viene inserito nelle definizioni delle entità API associate. 

Se uno strumento di rendering della documentazione (ad esempio [OpenAPI UI](https://swagger.io/tools/swagger-ui/)) analizza le definizioni dell'entità API per estrarre gli attributi della documentazione, qualsiasi attributo `properties` non conforme a OpenAPI di un'istanza di `DocumentationPart` non è disponibile per lo strumento. Tuttavia, se uno strumento di rendering della documentazione analizza l'oggetto `x-amazon-apigateway-documentation` per ottenere i contenuti o se lo strumento chiama [restapi:documentation-parts](https://docs.aws.amazon.com/apigateway/latest/api/API_DocumentationPart.html) e [documenationpart:by-id](https://docs.aws.amazon.com/apigateway/latest/api/API_GetDocumentationPart.html) per recuperare le parti della documentazione da API Gateway, tutti gli attributi della documentazione sono disponibili per la visualizzazione con lo strumento.

Per esportare la documentazione con definizioni di entità API contenenti i dettagli delle integrazioni in un file OpenAPI JSON, inviare la seguente richiesta `GET`:

 

```
GET /restapis/restapi_id/stages/stage_name/exports/swagger?extensions=integrations,documentation HTTP/1.1
Accept: application/json
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
```

Per esportare la documentazione con definizioni di entità API contenenti dettagli delle integrazioni e delle autorizzazioni in un file OpenAPI YAML, inviare la seguente richiesta `GET`:

 

```
GET /restapis/restapi_id/stages/stage_name/exports/swagger?extensions=integrations,authorizers,documentation HTTP/1.1
Accept: application/yaml
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret
```

Per usare la console API Gateway per esportare e scaricare la documentazione pubblicata di un'API, segui le istruzioni in [Esportazione di un'API REST tramite la console API Gateway](api-gateway-export-api.md#api-gateway-export-api-from-console). 

# Importare la documentazione dell'API
<a name="api-gateway-documenting-api-quick-start-import-export"></a>

 Come con l'importazione delle definizioni di entità API, puoi importare le parti della documentazione da un file OpenAPI esterno in un'API di API Gateway. Specificate le parti della to-be-imported documentazione all'interno dell'[x-amazon-apigateway-documentation oggetto](api-gateway-swagger-extensions-documentation.md)estensione in un file di definizione OpenAPI valido. L'importazione della documentazione non modifica le definizioni delle entità API esistenti.

Esiste la possibilità di unire le parti della documentazione appena specificate in parti della documentazione esistenti in API Gateway o per sovrascrivere le parti della documentazione esistenti. Nella modalità `MERGE`, una nuova parte della documentazione definita nel file OpenAPI viene aggiunta alla raccolta `DocumentationParts` dell'API. Se un elemento `DocumentationPart` importato esiste già, un attributo importato sostituisce quello esistente se i due sono diversi. Altri attributi della documentazione esistenti rimangono inalterati. Nella modalità `OVERWRITE`, l'intera raccolta `DocumentationParts` viene sostituita in base al file di definizione OpenAPI importato.

## Importazione delle parti della documentazione tramite l'API REST di API Gateway
<a name="api-gateway-importing-api-with-swagger-file-using-rest-api"></a>

Per importare la documentazione dell'API usando l'API REST di API Gateway, esegui l'operazione [documentationpart:import](https://docs.aws.amazon.com/apigateway/latest/api/API_ImportDocumentationParts.html). L'esempio seguente mostra come sovrascrivere parti della documentazione esistenti di un'API con un singolo metodo `GET / `, restituendo una risposta `200 OK` per l'esito positivo.

------
#### [ OpenAPI 3.0 ]

```
PUT /restapis/<restapi_id>/documentation/parts&mode=overwrite&failonwarnings=true
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
   "openapi": "3.0.0",
   "info": {
      "description": "description",
      "version": "1",
      "title": "doc"
   },
   "paths": {
      "/": {
         "get": {
            "description": "Method description.",
            "responses": {
               "200": {
                  "description": "200 response",
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Empty"
                        }
                     }
                  }
               }
            }
         }
      }
   },
   "x-amazon-apigateway-documentation": {
      "version": "1.0.3",
      "documentationParts": [
         {
            "location": {
               "type": "API"
            },
            "properties": {
               "description": "API description",
               "info": {
                  "description": "API info description 4",
                  "version": "API info version 3"
               }
            }
         },
         {
            "location": {
               "type": "METHOD",
               "method": "GET"
            },
            "properties": {
               "description": "Method description."
            }
         },
         {
            "location": {
               "type": "MODEL",
               "name": "Empty"
            },
            "properties": {
               "title": "Empty Schema"
            }
         },
         {
            "location": {
               "type": "RESPONSE",
               "method": "GET",
               "statusCode": "200"
            },
            "properties": {
               "description": "200 response"
            }
         }
      ]
   },
   "servers": [
      {
         "url": "/"
      }
   ],
   "components": {
      "schemas": {
         "Empty": {
            "type": "object",
            "title": "Empty Schema"
         }
      }
   }
}
```

------
#### [ OpenAPI 2.0 ]

```
PUT /restapis/<restapi_id>/documentation/parts&mode=overwrite&failonwarnings=true
Host: apigateway.region.amazonaws.com
Content-Type: application/json
X-Amz-Date: YYYYMMDDTttttttZ
Authorization: AWS4-HMAC-SHA256 Credential=access_key_id/YYYYMMDD/region/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=sigv4_secret

{
  "swagger": "2.0",
  "info": {
    "description": "description",
    "version": "1",
    "title": "doc"
  },
  "host": "",
  "basePath": "/",
  "schemes": [
    "https"
  ],
  "paths": {
    "/": {
      "get": {
        "description": "Method description.",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "Empty": {
      "type": "object",
      "title": "Empty Schema"
    }
  },
  "x-amazon-apigateway-documentation": {
    "version": "1.0.3",
    "documentationParts": [
      {
        "location": {
          "type": "API"
        },
        "properties": {
          "description": "API description",
          "info": {
            "description": "API info description 4",
            "version": "API info version 3"
          }
        }
      },
      {
        "location": {
          "type": "METHOD",
          "method": "GET"
        },
        "properties": {
          "description": "Method description."
        }
      },
      {
        "location": {
          "type": "MODEL",
          "name": "Empty"
        },
        "properties": {
          "title": "Empty Schema"
        }
      },
      {
        "location": {
          "type": "RESPONSE",
          "method": "GET",
          "statusCode": "200"
        },
        "properties": {
          "description": "200 response"
        }
      }
    ]
  }
}
```

------

In caso di esito positivo, questa richiesta restituisce una risposta 200 OK contenente l'elemento `DocumentationPartId` importato nel payload.

```
{
  "ids": [
    "kg3mth",
    "796rtf",
    "zhek4p",
    "5ukm9s"
  ]
}
```

Inoltre, è possibile anche invocare [restapi:import](https://docs.aws.amazon.com/apigateway/latest/api/API_ImportRestApi.html) o [restapi:put](https://docs.aws.amazon.com/apigateway/latest/api/API_PutRestApi.html), fornendo le parti della documentazione nell'oggetto `x-amazon-apigateway-documentation` come parte del file OpenAPI di input della definizione dell'API. Per escludere le parti della documentazione dall'importazione dell'API, imposta `ignore=documentation` nei parametri di query della richiesta.

## Importazione di parti di documentazione tramite la console API Gateway
<a name="api-gateway-importing-api-with-swagger-file-using-console"></a>

Le seguenti istruzioni descrivono come importare le parti della documentazione.

**Per utilizzare la console per importare le parti della documentazione di un'API da un file esterno**

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

1. Scegli **Importa**.

1. Se è disponibile la documentazione esistente, seleziona **Sovrascrivi** o **Unisci** per la nuova documentazione.

1. Seleziona **Scegli il file** per caricare un file da un'unità oppure immettere il contenuto di un file nella vista del file. Per un esempio, consulta il payload della richiesta di esempio in [Importazione delle parti della documentazione tramite l'API REST di API Gateway](#api-gateway-importing-api-with-swagger-file-using-rest-api).

1. Scegli in che modo gestire gli avvisi durante l'importazione. Seleziona **Avvisi di errore** o **Ignora avvisi**. Per ulteriori informazioni, consulta [Errori e avvisi relativi all'importazione dell'API in Gateway API](api-gateway-import-api-errors-warnings.md). 

1. Scegli **Importa**.

# Controllo dell'accesso alla documentazione dell'API in Gateway API
<a name="api-gateway-documenting-api-content-provision-and-consumption"></a>

Se hai un team dedicato alla documentazione per scrivere e modificare la documentazione dell'API, puoi configurare autorizzazioni di accesso separate per i tuoi sviluppatori (per lo sviluppo dell'API) e per i tuoi scrittori o editori (per lo sviluppo del contenuto). Questo è particolarmente appropriato quando un fornitore di terze parti è coinvolto nella creazione della documentazione. 

 Per concedere al tuo team di documentazione l'accesso per creare, aggiornare e pubblicare la documentazione dell'API, puoi assegnare al team di documentazione un ruolo IAM con la seguente politica IAM, dove si *account\$1id* trova l'ID AWS account del tuo team di documentazione. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [

    {
      "Sid": "StmtDocPartsAddEditViewDelete",
      "Effect": "Allow",
      "Action": [
        "apigateway:GET",
        "apigateway:PUT",
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:DELETE"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1:111111111111:/restapis/*/documentation/*"
      ]
    }
  ]
}
```

------

 Per informazioni sull'impostazione delle autorizzazioni per accedere alle risorse di API Gateway, consultare [Come funziona Amazon API Gateway con IAM](security_iam_service-with-iam.md). 

# Genera SDKs per REST APIs in API Gateway
<a name="how-to-generate-sdk"></a>

Per chiamare la tua API REST in un modo specifico per la piattaforma o la lingua, devi generare l'SDK specifico della piattaforma o della lingua dell'API. Si genera l'SDK dopo aver creato, testato e implementato l'API in una fase. Attualmente, API Gateway supporta la generazione di un SDK per un'API in Java, Java per Android JavaScript, Objective-C o Swift per iOS e Ruby.

In questa sezione viene descritto come generare un SDK di un'API di API Gateway. Dimostra inoltre come utilizzare l'SDK generato in un'app Java, un'app Java per Android, Objective-C e Swift per app iOS e un'app. JavaScript 

Per facilitare la discussione, usiamo questa [API](simple-calc-lambda-api.md) di API Gateway, che espone questa funzione Lambda [calcolatore semplice](simple-calc-nodejs-lambda-function.md). 

Prima di procedere, crea o importa l'API e distribuiscila almeno una volta in API Gateway. Per istruzioni, consulta [Implementazione di REST API in Gateway API](how-to-deploy-api.md).

**Topics**
+ [Funzione Lambda del calcolatore semplice](simple-calc-nodejs-lambda-function.md)
+ [API calcolatore semplice in API Gateway](simple-calc-lambda-api.md)
+ [Definizione OpenAPI dell'API del calcolatore semplice](simple-calc-lambda-api-swagger-definition.md)
+ [Generazione dell'SDK Java di un'API in Gateway API](generate-java-sdk-of-an-api.md)
+ [Generazione dell'SDK Android di un'API in Gateway API](generate-android-sdk-of-an-api.md)
+ [Generazione dell'SDK iOS di un'API in Gateway API](generate-ios-sdk-of-an-api.md)
+ [Genera l' JavaScript SDK di un'API REST in API Gateway](generate-javascript-sdk-of-an-api.md)
+ [Generazione dell'SDK Ruby di un'API in Gateway API](generate-ruby-sdk-of-an-api.md)
+ [Generazione SDKs per un'API utilizzando AWS CLI i comandi in API Gateway](how-to-generate-sdk-cli.md)

# Funzione Lambda del calcolatore semplice
<a name="simple-calc-nodejs-lambda-function"></a>

A scopi illustrativi, verrà utilizzata una funzione Lambda in Node.js che esegue le operazioni binarie di addizione, sottrazione, moltiplicazione e divisione. 

**Topics**
+ [Formato di input della funzione Lambda del calcolatore semplice](#simple-calc-lambda-function-input-format)
+ [Formato di output della funzione Lambda del calcolatore semplice](#simple-calc-lambda-function-output-format)
+ [Implementazione della funzione Lambda del calcolatore semplice](#simple-calc-lambda-function-implementation)

## Formato di input della funzione Lambda del calcolatore semplice
<a name="simple-calc-lambda-function-input-format"></a>

Questa funzione riceve un input nel formato seguente:

```
{ "a": "Number", "b": "Number", "op": "string"}
```

dove `op` può essere un valore `(+, -, *, /, add, sub, mul, div)` qualsiasi.

## Formato di output della funzione Lambda del calcolatore semplice
<a name="simple-calc-lambda-function-output-format"></a>

Quando un'operazione ha esito positivo, restituisce il risultato nel formato seguente:

```
{ "a": "Number", "b": "Number", "op": "string", "c": "Number"}
```

dove `c` contiene il risultato del calcolo.

## Implementazione della funzione Lambda del calcolatore semplice
<a name="simple-calc-lambda-function-implementation"></a>

L'implementazione della funzione Lambda è la seguente:

```
export const handler = async function (event, context) {
  console.log("Received event:", JSON.stringify(event));

  if (
    event.a === undefined ||
    event.b === undefined ||
    event.op === undefined
  ) {
    return "400 Invalid Input";
  }

  const res = {};
  res.a = Number(event.a);
  res.b = Number(event.b);
  res.op = event.op;
  if (isNaN(event.a) || isNaN(event.b)) {
    return "400 Invalid Operand";
  }
  switch (event.op) {
    case "+":
    case "add":
      res.c = res.a + res.b;
      break;
    case "-":
    case "sub":
      res.c = res.a - res.b;
      break;
    case "*":
    case "mul":
      res.c = res.a * res.b;
      break;
    case "/":
    case "div":
      if (res.b == 0) {
        return "400 Divide by Zero";
      } else {
        res.c = res.a / res.b;
      }
      break;
    default:
      return "400 Invalid Operator";
  }

  return res;
};
```

# API calcolatore semplice in API Gateway
<a name="simple-calc-lambda-api"></a>

L'API calcolatore semplice espone tre metodi (GET, POST, GET) per richiamare la [Funzione Lambda del calcolatore semplice](simple-calc-nodejs-lambda-function.md). Di seguito è illustrata una rappresentazione grafica di quest'API:

![\[API calcolatore semplice per l'SDK generato\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/simple-calc-api-console-hierarchy-new-console.png)


Questi tre metodi mostrano modi diversi per fornire l'input per la funzione Lambda di back-end per eseguire la stessa operazione: 
+ Il metodo `GET /?a=...&b=...&op=...` usa i parametri di query per specificare l'input.
+ Il metodo `POST /` usa un payload JSON `{"a":"Number", "b":"Number", "op":"string"}` per specificare l'input.
+ Il metodo `GET /{a}/{b}/{op}` usa i parametri di percorso per specificare l'input.

Se non è definito, API Gateway genera il nome del metodo SDK corrispondente combinando le parti relative al metodo HTTP e al percorso. La parte del percorso root (`/`) è detta `Api Root`. Ad esempio, il nome del metodo SDK Java predefinito per il metodo API `GET /?a=...&b=...&op=...` è `getABOp`, il nome del metodo SDK predefinito per `POST /` è `postApiRoot` e il nome del metodo SDK predefinito per `GET /{a}/{b}/{op}` è `getABOp`. L'individuo SDKs può personalizzare la convenzione. Consulta la documentazione dell'origine dell'SDK generato per informazioni sui nomi di metodi SDK specifici. 

È possibile e consigliabile sostituire i nomi dei metodi SDK predefiniti specificando la proprietà [operationName](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#operationName) in ogni metodo API. Questa operazione viene eseguita durante la [creazione del metodo API](https://docs.aws.amazon.com/apigateway/latest/api/API_PutMethod.html) o l'[aggiornamento del metodo API](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateMethod.html) con l'API REST di API Gateway. Nella definizione Swagger dell'API è possibile impostare `operationId` per ottenere lo stesso risultato.

Prima di illustrare come invocare questi metodi usando un SDK generato da API Gateway per questa API, esaminiamo brevemente come eseguire la configurazione. Per istruzioni dettagliate, consulta [Sviluppa REST APIs in API Gateway](rest-api-develop.md). Se non hai mai usato API Gateway, consulta prima [Scegli un tutorial di integrazione AWS Lambda](getting-started-with-lambda-integration.md).

## Creazione di modelli per l'input e l'output
<a name="simple-calc-lambda-api-create-models-for-input-and-output"></a>

Per specificare un input fortemente tipizzato nell'SDK, creiamo un modello `Input` per l'API. Per descrivere il tipo di dati del corpo della risposta, creiamo un modello `Output` e un modello `Result`.

**Per creare i modelli per l'input, l'output e il risultato**

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

1. Scegli **Crea modello**.

1. In **Nome**, inserisci **input**.

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

   Se non viene trovato alcun tipo di contenuto corrispondente, la convalida della richiesta non viene eseguita. Per utilizzare lo stesso modello indipendentemente dal tipo di contenuti, inserisci **\$1default**.

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

   ```
   {
       "$schema" : "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "a":{"type":"number"},
           "b":{"type":"number"},
           "op":{"type":"string"}
       },
       "title":"Input"
   }
   ```

1. Scegli **Crea modello**.

1. Ripeti le seguenti fasi per creare un modello `Output` e un modello `Result`.

   Per il modello `Output` immetti in **Schema modello** quanto segue:

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type": "object",
       "properties": {
           "c": {"type":"number"}
       },
       "title": "Output"
   }
   ```

   Per il modello `Result` immetti in **Schema modello** quanto segue. Sostituisci l'ID API `abc123` con il tuo ID API.

   ```
   {
       "$schema": "http://json-schema.org/draft-04/schema#",
       "type":"object",
       "properties":{
           "input":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Input"
           },
           "output":{
               "$ref":"https://apigateway.amazonaws.com/restapis/abc123/models/Output"
           }
       },
       "title":"Result"
   }
   ```

## Configurazione dei parametri di query del metodo GET /
<a name="simple-calc-lambda-api-set-up-get-method-query-parameters"></a>

Per il metodo `GET /?a=..&b=..&op=..`, i parametri di query sono dichiarati in **Method Request (Richiesta metodo)**:

**Per configurare i parametri della stringa di query GET/URL**

1. Nella sezione **Richiesta metodo** scegli **Modifica** per il metodo `GET` sulla risorsa root (`/`).

1. Scegli **Parametri della stringa di query URL** ed effettua le seguenti operazioni:

   1. Scegliere **Add query string (Aggiungi stringa di query)**.

   1. In **Nome**, inserisci **a**.

   1. Mantieni **Obbligatorio** e **Caching** disattivati. 

   1. Mantieni disattivata l'opzione **Caching**.

   Ripeti le stesse fasi e crea una stringa di query denominata **b** e una stringa di query denominata **op**.

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

## Configurazione del modello di dati per il payload come input nel back-end
<a name="simple-calc-lambda-api-set-up-post-method-body-data-type"></a>

Per il metodo `POST /`, creiamo il modello `Input` e lo aggiungiamo alla richiesta del metodo per definire la forma dei dati di input. 

**Per configurare il modello di dati per il payload come input nel back-end**

1. Nella sezione **Richiesta metodo** scegli **Modifica** per il metodo `POST` sulla risorsa root (`/`).

1. Scegli **Corpo della richiesta**.

1. Scegliere **Add model (Aggiungi modello)**.

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

1. Per **Modello** seleziona **Input**.

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

Con questo modello, i clienti dell'API possono chiamare l'SDK per specificare l'input creando un'istanza di un oggetto `Input`. Senza questo modello, i clienti dovrebbero creare un oggetto dizionario per rappresentare l'input JSON per la funzione Lambda. 

## Configurazione del modello di dati per l'output del risultato dal back-end
<a name="simple-calc-lambda-api-set-up-all-methods-result-data-type"></a>

Per tutti e tre i metodi, creiamo il modello `Result` e lo aggiungiamo in `Method Response` per il metodo per definire la forma dell'output restituito dalla funzione Lambda.

**Per configurare il modello di dati per l'output del risultato dal back-end**

1. Seleziona la risorsa **/\$1a\$1/\$1b\$1/\$1op\$1**, quindi scegli il metodo **GET**.

1. Nella scheda **Risposta metodo** scegli **Modifica** in **Risposta 200**.

1. In **Corpo della risposta** scegli **Aggiungi modello**.

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

1. Per **Modello** seleziona **Risultato**.

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

Con questo modello, i clienti dell'API possono analizzare un output con esito positivo leggendo le proprietà di un oggetto `Result`. Senza questo modello, i clienti dovrebbero creare un oggetto dizionario per rappresentare l'output JSON. 

# Definizione OpenAPI dell'API del calcolatore semplice
<a name="simple-calc-lambda-api-swagger-definition"></a>

Di seguito è riportata una definizione OpenAPI dell'API del calcolatore semplice. Puoi importarla nel tuo account. Tuttavia, dopo l'importazione, dovrai reimpostare le autorizzazioni basate su risorse per la [funzione Lambda](simple-calc-nodejs-lambda-function.md). A questo scopo, riseleziona la funzione Lambda creata nel tuo account da **Integration Request (Richiesta di integrazione)** nella console API Gateway. La console API Gateway reimposterà le autorizzazioni richieste. In alternativa, puoi utilizzare AWS Command Line Interface per il comando Lambda [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html).

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger": "2.0",
  "info": {
    "version": "2016-09-29T20:27:30Z",
    "title": "SimpleCalc"
  },
  "host": "t6dve4zn25.execute-api.us-west-2.amazonaws.com",
  "basePath": "/demo",
  "schemes": [
    "https"
  ],
  "paths": {
    "/": {
      "get": {
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "op",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "a",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "b",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Result"
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "requestTemplates": {
            "application/json": "#set($inputRoot = $input.path('$'))\n{\n  \"a\" : $input.params('a'),\n  \"b\" : $input.params('b'),\n  \"op\" : \"$input.params('op')\"\n}"
          },
          "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
          "passthroughBehavior": "when_no_templates",
          "httpMethod": "POST",
          "responses": {
            "default": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "type": "aws"
        }
      },
      "post": {
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "Input",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Input"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Result"
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
          "passthroughBehavior": "when_no_match",
          "httpMethod": "POST",
          "responses": {
            "default": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "type": "aws"
        }
      }
    },
    "/{a}": {
      "x-amazon-apigateway-any-method": {
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "a",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "404 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "requestTemplates": {
            "application/json": "{\"statusCode\": 200}"
          },
          "passthroughBehavior": "when_no_match",
          "responses": {
            "default": {
              "statusCode": "404",
              "responseTemplates": {
                "application/json": "{ \"Message\" : \"Can't $context.httpMethod $context.resourcePath\" }"
              }
            }
          },
          "type": "mock"
        }
      }
    },
    "/{a}/{b}": {
      "x-amazon-apigateway-any-method": {
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "a",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "b",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "404 response"
          }
        },
        "x-amazon-apigateway-integration": {
          "requestTemplates": {
            "application/json": "{\"statusCode\": 200}"
          },
          "passthroughBehavior": "when_no_match",
          "responses": {
            "default": {
              "statusCode": "404",
              "responseTemplates": {
                "application/json": "{ \"Message\" : \"Can't $context.httpMethod $context.resourcePath\" }"
              }
            }
          },
          "type": "mock"
        }
      }
    },
    "/{a}/{b}/{op}": {
      "get": {
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "a",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "b",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "op",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Result"
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "requestTemplates": {
            "application/json": "#set($inputRoot = $input.path('$'))\n{\n  \"a\" : $input.params('a'),\n  \"b\" : $input.params('b'),\n  \"op\" : \"$input.params('op')\"\n}"
          },
          "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:Calc/invocations",
          "passthroughBehavior": "when_no_templates",
          "httpMethod": "POST",
          "responses": {
            "default": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "type": "aws"
        }
      }
    }
  },
  "definitions": {
    "Input": {
      "type": "object",
      "properties": {
        "a": {
          "type": "number"
        },
        "b": {
          "type": "number"
        },
        "op": {
          "type": "string"
        }
      },
      "title": "Input"
    },
    "Output": {
      "type": "object",
      "properties": {
        "c": {
          "type": "number"
        }
      },
      "title": "Output"
    },
    "Result": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Input"
        },
        "output": {
          "$ref": "#/definitions/Output"
        }
      },
      "title": "Result"
    }
  }
}
```

------
#### [ OpenAPI 3.0 ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "SimpleCalc",
    "version" : "2016-09-29T20:27:30Z"
  },
  "servers" : [ {
    "url" : "https://t6dve4zn25.execute-api.us-west-2.amazonaws.com/{basePath}",
    "variables" : {
      "basePath" : {
        "default" : "demo"
      }
    }
  } ],
  "paths" : {
    "/{a}/{b}" : {
      "x-amazon-apigateway-any-method" : {
        "parameters" : [ {
          "name" : "a",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "b",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "404 response",
            "content" : { }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "mock",
          "responses" : {
            "default" : {
              "statusCode" : "404",
              "responseTemplates" : {
                "application/json" : "{ \"Message\" : \"Can't $context.httpMethod $context.resourcePath\" }"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_match"
        }
      }
    },
    "/{a}/{b}/{op}" : {
      "get" : {
        "parameters" : [ {
          "name" : "a",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "b",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "op",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Result"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "aws",
          "httpMethod" : "POST",
          "uri" : "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:111122223333:function:Calc/invocations",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseTemplates" : {
                "application/json" : "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "#set($inputRoot = $input.path('$'))\n{\n  \"a\" : $input.params('a'),\n  \"b\" : $input.params('b'),\n  \"op\" : \"$input.params('op')\"\n}"
          },
          "passthroughBehavior" : "when_no_templates"
        }
      }
    },
    "/" : {
      "get" : {
        "parameters" : [ {
          "name" : "op",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "a",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "b",
          "in" : "query",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Result"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "aws",
          "httpMethod" : "POST",
          "uri" : "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:111122223333:function:Calc/invocations",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseTemplates" : {
                "application/json" : "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "#set($inputRoot = $input.path('$'))\n{\n  \"a\" : $input.params('a'),\n  \"b\" : $input.params('b'),\n  \"op\" : \"$input.params('op')\"\n}"
          },
          "passthroughBehavior" : "when_no_templates"
        }
      },
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Input"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "200 response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Result"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "aws",
          "httpMethod" : "POST",
          "uri" : "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:111122223333:function:Calc/invocations",
          "responses" : {
            "default" : {
              "statusCode" : "200",
              "responseTemplates" : {
                "application/json" : "#set($inputRoot = $input.path('$'))\n{\n  \"input\" : {\n    \"a\" : $inputRoot.a,\n    \"b\" : $inputRoot.b,\n    \"op\" : \"$inputRoot.op\"\n  },\n  \"output\" : {\n    \"c\" : $inputRoot.c\n  }\n}"
              }
            }
          },
          "passthroughBehavior" : "when_no_match"
        }
      }
    },
    "/{a}" : {
      "x-amazon-apigateway-any-method" : {
        "parameters" : [ {
          "name" : "a",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "404 response",
            "content" : { }
          }
        },
        "x-amazon-apigateway-integration" : {
          "type" : "mock",
          "responses" : {
            "default" : {
              "statusCode" : "404",
              "responseTemplates" : {
                "application/json" : "{ \"Message\" : \"Can't $context.httpMethod $context.resourcePath\" }"
              }
            }
          },
          "requestTemplates" : {
            "application/json" : "{\"statusCode\": 200}"
          },
          "passthroughBehavior" : "when_no_match"
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "Input" : {
        "title" : "Input",
        "type" : "object",
        "properties" : {
          "a" : {
            "type" : "number"
          },
          "b" : {
            "type" : "number"
          },
          "op" : {
            "type" : "string"
          }
        }
      },
      "Output" : {
        "title" : "Output",
        "type" : "object",
        "properties" : {
          "c" : {
            "type" : "number"
          }
        }
      },
      "Result" : {
        "title" : "Result",
        "type" : "object",
        "properties" : {
          "input" : {
            "$ref" : "#/components/schemas/Input"
          },
          "output" : {
            "$ref" : "#/components/schemas/Output"
          }
        }
      }
    }
  }
}
```

------

# Generazione dell'SDK Java di un'API in Gateway API
<a name="generate-java-sdk-of-an-api"></a>

La procedura seguente mostra come generare l'SDK Java di un'API in Gateway API.

**Per generare l'SDK Java di un'API di API Gateway**

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

1. Scegliere un'API REST.

1. Scegliere **Stages (Fasi)**. 

1. Nel riquadro **Fasi**, seleziona il nome della fase.

1. Apri il menu **Azioni fase**, quindi scegli **Genera SDK**.

1. In **Piattaforma**, scegli la piattaforma **Java** ed effettua le seguenti operazioni:

   1.  In **Service Name (Nome servizio)** specificare il nome dell'SDK. Ad esempio, **SimpleCalcSdk**. Questo diventa il nome della classe del client SDK. Il nome corrisponde al tag `<name>` in `<project>` nel file pom.xml presente nella cartella di progetto dell'SDK. Non includere i trattini.

   1.  In **Java Package Name (Nome pacchetto Java)** specificare il nome di un pacchetto per l'SDK. Ad esempio, **examples.aws.apig.simpleCalc.sdk**. Questo nome di pacchetto viene utilizzato come namespace della libreria dell'SDK. Non includere i trattini.

   1.  In **Java Build System (Sistema di compilazione Java)** immettere **maven** o **gradle** per specificare il sistema di compilazione.

   1.  In **Java Group Id (ID gruppo Java)**, immettere l'identificatore di un gruppo per il progetto SDK. Ad esempio, immetti **my-apig-api-examples**. L'identificatore corrisponde al tag `<groupId>` di `<project>` nel file `pom.xml` presente nella cartella di progetto dell'SDK.

   1.  In **Java Artifact Id (ID artefatto Java)**, immettere l'identificatore di un artefatto per il progetto SDK. Ad esempio, immetti **simple-calc-sdk**. L'identificatore corrisponde al tag `<artifactId>` di `<project>` nel file `pom.xml` presente nella cartella di progetto dell'SDK.

   1.  In **Java Artifact Version (Versione artefatto Java)**, immettere la stringa identificatore della versione. Ad esempio, **1.0.0**. L'identificatore della versione corrisponde al tag `<version>` di `<project>` nel file `pom.xml` presente nella cartella di progetto dell'SDK.

   1. In **Source Code License Text (Testo della licenza del codice sorgente)**, immettere il testo della licenza del codice sorgente, se disponibile.

1. Seleziona **Generate SDK (Genera SDK)** e segui le istruzioni sullo schermo per scaricare l'SDK generato da API Gateway.

Segui le istruzioni nell'articolo [Utilizzo di un SDK Java generato da API Gateway per un'API REST](how-to-call-apigateway-generated-java-sdk.md) per usare l'SDK generato.

 Ogni volta che aggiorni un'API, devi ridistribuire l'API e rigenerare l'SDK per includere gli aggiornamenti. 

# Generazione dell'SDK Android di un'API in Gateway API
<a name="generate-android-sdk-of-an-api"></a>

La procedura seguente mostra come generare l'SDK Android di un'API in Gateway API.

**Per generare l'SDK Android di un'API in API Gateway**

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

1. Scegliere un'API REST.

1. Scegliere **Stages (Fasi)**. 

1. Nel riquadro **Fasi**, seleziona il nome della fase.

1. Apri il menu **Azioni fase**, quindi scegli **Genera SDK**.

1. In **Piattaforma**, scegli la piattaforma Android ed effettua le seguenti operazioni: 

   1.  In **Group ID (ID gruppo)**, immettere l'identificatore univoco per il progetto corrispondente che viene usato nel file `pom.xml`, ad esempio **com.mycompany**.

   1.  In **Invoker package (Pacchetto di invoker)**, immettere lo spazio dei nomi per le classi client generate, ad esempio **com.mycompany.clientsdk**.

   1.  In **Artifact ID (ID artefatto)**, immettere il nome del file .jar compilato senza la versione che viene usato nel file `pom.xml`, ad esempio **aws-apigateway-api-sdk**.

   1. In **Artifact version (Versione artefatto)**, immettere il numero di versione dell'artefatto per il cliente generato che Viene utilizzato nel `pom.xml` file e dovrebbe seguire un. *major* *minor*. *patch*modello (ad esempio,**1.0.0**).

1. Seleziona **Generate SDK (Genera SDK)** e segui le istruzioni sullo schermo per scaricare l'SDK generato da API Gateway.

Segui le istruzioni nell'articolo [Utilizzo di un SDK Android generato da API Gateway per un'API REST](how-to-generate-sdk-android.md) per usare l'SDK generato. 

 Ogni volta che aggiorni un'API, devi ridistribuire l'API e rigenerare l'SDK per includere gli aggiornamenti. 

# Generazione dell'SDK iOS di un'API in Gateway API
<a name="generate-ios-sdk-of-an-api"></a>

La procedura seguente mostra come generare l'SDK iOS di un'API in Gateway API.

**Per generare l'SDK iOS di un'API in API Gateway**

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

1. Scegliere un'API REST.

1. Scegliere **Stages (Fasi)**. 

1. Nel riquadro **Fasi**, seleziona il nome della fase.

1. Apri il menu **Azioni fase**, quindi scegli **Genera SDK**.

1. In **Piattaforma**, scegli la piattaforma **iOS (Objective-C) o iOS (Swift)** ed effettua le seguenti operazioni: 

   1. Digitare un prefisso univoco nella casella **Prefix (Prefisso)**.

     L'effetto del prefisso è il seguente: se si assegna, ad esempio, **SIMPLE\$1CALC** come prefisso per l'SDK all'[SimpleCalc](simple-calc-lambda-api.md)API con, e `result` modelli`input`, `output` l'SDK generato conterrà la `SIMPLE_CALCSimpleCalcClient` classe che incapsula l'API, incluso il metodo richieste/risposte. Inoltre, l'SDK generato conterrà le classi `SIMPLE_CALCinput`, `SIMPLE_CALCoutput` e `SIMPLE_CALCresult` per rappresentare l'input, l'output e i risultati, rispettivamente, per l'input di richiesta e l'output di risposta. Per ulteriori informazioni, consulta [Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift](how-to-generate-sdk-ios.md). 

1. Seleziona **Generate SDK (Genera SDK)** e segui le istruzioni sullo schermo per scaricare l'SDK generato da API Gateway.

Segui le istruzioni nell'articolo [Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift](how-to-generate-sdk-ios.md) per usare l'SDK generato.

 Ogni volta che aggiorni un'API, devi ridistribuire l'API e rigenerare l'SDK per includere gli aggiornamenti. 

# Genera l' JavaScript SDK di un'API REST in API Gateway
<a name="generate-javascript-sdk-of-an-api"></a>

La procedura seguente mostra come generare l' JaveScript SDK di un'API in API Gateway.

**Per generare l' JavaScript SDK di un'API in API Gateway**

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

1. Scegliere un'API REST.

1. Scegliere **Stages (Fasi)**. 

1. Nel riquadro **Fasi**, seleziona il nome della fase.

1. Apri il menu **Azioni fase**, quindi scegli **Genera SDK**.

1. Per **Piattaforma, scegli la piattaforma**. **JavaScript** 

1. Seleziona **Generate SDK (Genera SDK)** e segui le istruzioni sullo schermo per scaricare l'SDK generato da API Gateway.

Segui le istruzioni nell'articolo [Usa un JavaScript SDK generato da API Gateway per un'API REST](how-to-generate-sdk-javascript.md) per usare l'SDK generato.

 Ogni volta che aggiorni un'API, devi ridistribuire l'API e rigenerare l'SDK per includere gli aggiornamenti. 

# Generazione dell'SDK Ruby di un'API in Gateway API
<a name="generate-ruby-sdk-of-an-api"></a>

La procedura seguente mostra come generare l'SDK Ruby di un'API in Gateway API.

**Per generare l'SDK Ruby di un'API in API Gateway**

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

1. Scegliere un'API REST.

1. Scegliere **Stages (Fasi)**. 

1. Nel riquadro **Fasi**, seleziona il nome della fase.

1. Apri il menu **Azioni fase**, quindi scegli **Genera SDK**.

1. In **Piattaforma**, scegli la piattaforma **Ruby** ed effettua le seguenti operazioni: 

   1.  In **Service Name (Nome servizio)** specificare il nome dell'SDK. Ad esempio, **SimpleCalc**. Questo nome viene utilizzato come namespace Ruby Gem dell'API. Deve essere composto solo da lettere, (`a-zA-Z`), senza caratteri speciali o numeri.

   1.  In **Ruby Gem Name (Nome Ruby Gem)** specificare il nome Ruby Gem per contenere il codice sorgente dell'SDK generato per l'API. Per impostazione predefinita, è il nome del servizio in minuscolo più il suffisso `-sdk`, ad esempio **simplecalc-sdk**.

   1.  In **Ruby Gem Version (Versione Ruby Gem)** specificare il numero di versione del Ruby Gem generato. Per impostazione predefinita, è impostato su `1.0.0`.

1. Seleziona **Generate SDK (Genera SDK)** e segui le istruzioni sullo schermo per scaricare l'SDK generato da API Gateway.

Segui le istruzioni nell'articolo [Utilizzo di un SDK Ruby generato da API Gateway per un'API REST](how-to-call-sdk-ruby.md) per usare l'SDK generato.

 Ogni volta che aggiorni un'API, devi ridistribuire l'API e rigenerare l'SDK per includere gli aggiornamenti. 

# Generazione SDKs per un'API utilizzando AWS CLI i comandi in API Gateway
<a name="how-to-generate-sdk-cli"></a>

Puoi usarlo AWS CLI per generare e scaricare un SDK di un'API per una piattaforma supportata chiamando il comando [get-sdk](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-sdk.html). Di seguito è riportata la dimostrazione per alcune delle piattaforme supportate.

**Topics**
+ [Genera e scarica l'SDK Java per Android utilizzando il AWS CLI](#how-to-generate-sdk-cli-android)
+ [Genera e scarica l' JavaScript SDK utilizzando il AWS CLI](#how-to-generate-sdk-cli-js)
+ [Genera e scarica l'SDK di Ruby usando AWS CLI](#how-to-generate-sdk-cli-ruby)

## Genera e scarica l'SDK Java per Android utilizzando il AWS CLI
<a name="how-to-generate-sdk-cli-android"></a>

Per generare e scaricare un SDK Java per Android generato da API Gateway di un'API (`udpuvvzbkc`) in una specifica fase (`test`), invoca il comando seguente:

```
aws apigateway get-sdk \
            --rest-api-id udpuvvzbkc \
            --stage-name test \
            --sdk-type android \
            --parameters groupId='com.mycompany',\
                invokerPackage='com.mycompany.myApiSdk',\ 
                artifactId='myApiSdk',\
                artifactVersion='0.0.1' \
            ~/apps/myApi/myApi-android-sdk.zip
```

L'ultimo input di `~/apps/myApi/myApi-android-sdk.zip` è il percorso del file SDK scaricato denominato `myApi-android-sdk.zip`.

## Genera e scarica l' JavaScript SDK utilizzando il AWS CLI
<a name="how-to-generate-sdk-cli-js"></a>

Per generare e scaricare un JavaScript SDK generato da API Gateway di un'API (`udpuvvzbkc`) in una determinata fase (`test`), chiamate il comando come segue:

```
aws apigateway get-sdk \
            --rest-api-id udpuvvzbkc \
            --stage-name test \
            --sdk-type javascript \
            ~/apps/myApi/myApi-js-sdk.zip
```

L'ultimo input di `~/apps/myApi/myApi-js-sdk.zip` è il percorso del file SDK scaricato denominato `myApi-js-sdk.zip`.

## Genera e scarica l'SDK di Ruby usando AWS CLI
<a name="how-to-generate-sdk-cli-ruby"></a>

Per generare e scaricare un SDK Ruby di un'API (`udpuvvzbkc`) in una specifica fase (`test`), chiama il comando come segue:

```
aws apigateway get-sdk \
            --rest-api-id udpuvvzbkc \
            --stage-name test  \
            --sdk-type ruby \
            --parameters service.name=myApiRubySdk,ruby.gem-name=myApi,ruby.gem-version=0.01 \
            ~/apps/myApi/myApi-ruby-sdk.zip
```

L'ultimo input di `~/apps/myApi/myApi-ruby-sdk.zip` è il percorso del file SDK scaricato denominato `myApi-ruby-sdk.zip`.

 Successivamente, mostreremo come utilizzare l'SDK generato per chiamare l'API sottostante. Per ulteriori informazioni, consulta [Invocazione di REST API in Gateway API](how-to-call-api.md). 

# Vendi il tuo API Gateway APIs tramite Marketplace AWS
<a name="sell-api-as-saas-on-aws-marketplace"></a>

Dopo aver creato, testato e distribuito il tuo APIs, puoi inserirlo in un [piano di utilizzo](api-gateway-api-usage-plans.md) API Gateway e venderlo come prodotto Software as a Service (SaaS). Marketplace AWS Gli acquirenti di API che si abbonano alla tua offerta di prodotti vengono fatturati Marketplace AWS in base al numero di richieste effettuate al piano di utilizzo.

Per vendere APIs il tuo prodotto Marketplace AWS, devi configurare il canale di vendita per l'integrazione Marketplace AWS con API Gateway. In generale, ciò comporta l'offerta del prodotto Marketplace AWS, l'impostazione di un ruolo IAM con politiche appropriate per consentire ad API Gateway di inviare metriche di utilizzo a Marketplace AWS, l'associazione di un Marketplace AWS prodotto a un piano di utilizzo API Gateway e l'associazione di un Marketplace AWS acquirente a una chiave API Gateway. I dettagli vengono approfonditi nelle sezioni seguenti.

Per ulteriori informazioni sulla vendita della tua API come prodotto SaaS Marketplace AWS, consulta la Guida per l'[Marketplace AWS utente](https://docs.aws.amazon.com/marketplace/latest/userguide/).

**Topics**
+ [Inizializza l' Marketplace AWS integrazione con API Gateway](#sell-api-as-saas-on-aws-marketplace-initial-setup)
+ [Gestione della sottoscrizione del cliente ai piani di utilizzo](#sell-api-as-saas-on-aws-marketplace-subscription-unsubscription)

## Inizializza l' Marketplace AWS integrazione con API Gateway
<a name="sell-api-as-saas-on-aws-marketplace-initial-setup"></a>

Le seguenti attività riguardano l'inizializzazione unica dell' Marketplace AWS integrazione con API Gateway, che consente di vendere il prodotto APIs come SaaS.

### Pubblica un prodotto su Marketplace AWS
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-list-product"></a>

Per inserire il tuo piano di utilizzo come prodotto SaaS, invia un modulo di caricamento prodotto tramite [Marketplace AWS](https://aws.amazon.com/marketplace/partners/management-tour). Il prodotto deve contenere una dimensione denominata `apigateway` del tipo `requests`. Questa dimensione definisce price-per-request e viene utilizzata da API Gateway per misurare le richieste al tuo APIs.

### Creazione del ruolo di misurazione
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role"></a>

Crea un ruolo IAM denominato `ApiGatewayMarketplaceMeteringRole` con le seguenti policy di esecuzione e policy di attendibilità. Questo ruolo consente ad API Gateway di inviare metriche di utilizzo Marketplace AWS a tuo nome.

#### Policy di esecuzione del ruolo di misurazione
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-execution-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "aws-marketplace:BatchMeterUsage",
        "aws-marketplace:ResolveCustomer"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

------

#### Policy di relazione di fiducia del ruolo di misurazione
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-trusted-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

### Associa il piano di utilizzo al prodotto Marketplace AWS
<a name="sell-api-as-saas-on-aws-marketplace-associate-usage-plan-with-saas-product"></a>

Quando offri un prodotto su Marketplace AWS, ricevi un codice Marketplace AWS prodotto. Per integrare API Gateway con Marketplace AWS, associa il tuo piano di utilizzo al codice Marketplace AWS del prodotto. Puoi abilitare l'associazione impostando il [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#productCode](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#productCode)campo `UsagePlan` dell'API Gateway sul codice del Marketplace AWS prodotto, utilizzando la console API Gateway, l'API REST API Gateway, l'API AWS CLI for API Gateway o l' AWS SDK per API Gateway. Nell'esempio di codice seguente viene utilizzata l'API REST dell'API Gateway:

```
PATCH /usageplans/USAGE_PLAN_ID
Host: apigateway.region.amazonaws.com
Authorization: ...

{
    "patchOperations" : [{
        "path" : "/productCode",
        "value" : "MARKETPLACE_PRODUCT_CODE",
        "op" : "replace"
    }]
}
```

## Gestione della sottoscrizione del cliente ai piani di utilizzo
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription"></a>

Le seguenti attività sono gestite dall'applicazione del portale sviluppatore.

Quando un cliente si abbona al tuo prodotto tramite Marketplace AWS, Marketplace AWS inoltra una `POST` richiesta all'URL degli abbonamenti SaaS che hai registrato al momento dell'offerta del prodotto. Marketplace AWS La richiesta `POST` presenta un parametro `x-amzn-marketplace-token` contenente le informazioni sull'acquirente. Segui le istruzioni riportate in [Onboarding dei clienti SaaS](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application) per gestire questo reindirizzamento nell'applicazione del portale per gli sviluppatori.

In risposta alla richiesta di iscrizione di un cliente, Marketplace AWS invia una `subscribe-success` notifica a un argomento di Amazon SNS a cui puoi abbonarti. (Consulta [Onboarding dei clienti SaaS](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application)). Per accettare la richiesta di abbonamento del cliente, gestisci la `subscribe-success` notifica creando o recuperando una chiave API Gateway per il cliente, associando la chiave API Marketplace AWS-provisioned `customerId` del cliente alle chiavi API e quindi aggiungendo la chiave API al tuo piano di utilizzo.

Una volta completata la richiesta di abbonamento del cliente, l'applicazione del portale per sviluppatori deve presentare al cliente la chiave API associata e informare il cliente che la chiave API deve essere inclusa nell'intestazione delle richieste inviate a. `x-api-key` APIs

Quando un cliente annulla un abbonamento a un piano di utilizzo, Marketplace AWS invia una `unsubscribe-success` notifica all'argomento SNS. Per portare a termine il processo di cancellazione di un cliente, devi gestire la notifica `unsubscribe-success` eliminando le chiavi API del cliente dal piano di utilizzo.

### Per autorizzare un cliente ad accedere a un piano di utilizzo
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-authorize-access-to-usage-plan"></a>

Per autorizzare un cliente ad accedere al tuo piano di utilizzo, usa l'API di API Gateway per recuperare o creare una chiave API per il cliente e aggiungerla al piano di utilizzo. 

L'esempio seguente mostra come chiamare l'API REST di API Gateway per creare una nuova chiave API con un Marketplace AWS `customerId` valore specifico (*MARKETPLACE\$1CUSTOMER\$1ID*).

```
POST apikeys HTTP/1.1
Host: apigateway.region.amazonaws.com
Authorization: ...

{
  "name" : "my_api_key",
  "description" : "My API key",
  "enabled" : "false",
  "stageKeys" : [ {
    "restApiId" : "uycll6xg9a",
    "stageName" : "prod"
  } ],
  "customerId" : "MARKETPLACE_CUSTOMER_ID"
}
```

L'esempio seguente mostra come ottenere una chiave API con un Marketplace AWS `customerId` valore specifico (*MARKETPLACE\$1CUSTOMER\$1ID*).

```
GET apikeys?customerId=MARKETPLACE_CUSTOMER_ID HTTP/1.1
Host: apigateway.region.amazonaws.com
Authorization: ...
```

Per aggiungere una chiave API a un piano di utilizzo, crea un [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html) con la chiave API per il relativo piano di utilizzo. Il seguente esempio mostra come ottenere tale risultato utilizzando l'API REST di API Gateway, dove `n371pt` è l'ID del piano di utilizzo e `q5ugs7qjjh` è un esempio di `keyId` API restituito dagli esempi precedenti.

```
POST /usageplans/n371pt/keys HTTP/1.1
Host: apigateway.region.amazonaws.com
Authorization: ...

{
    "keyId": "q5ugs7qjjh",
    "keyType": "API_KEY"
}
```

### Per associare un cliente a una chiave API
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-associate-marketplace"></a>

È necessario aggiornare il `customerId` campo [https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html)'s con l'ID Marketplace AWS cliente del cliente. In questo modo, la chiave API viene associata al cliente Marketplace AWS , attivando così misurazione e fatturazione per l'acquirente. Il seguente esempio di codice invoca l'API REST API Gateway per ottenere tale risultato.

```
PATCH /apikeys/q5ugs7qjjh
Host: apigateway.region.amazonaws.com
Authorization: ...
        
{
    "patchOperations" : [{
        "path" : "/customerId",
        "value" : "MARKETPLACE_CUSTOMER_ID",
        "op" : "replace"
    }]
}
```

# Proteggi il tuo REST APIs in API Gateway
<a name="rest-api-protect"></a>

API Gateway fornisce diversi modi per proteggere l'API da determinate minacce, ad esempio utenti malintenzionati o picchi di traffico. Puoi proteggere l'API utilizzando strategie come la generazione di certificati SSL, la configurazione di un firewall per applicazioni Web, l'impostazione di destinazioni di limitazione e l'accesso all'API solo da un cloud privato virtuale (VPC, Virtual Private Cloud). In questa sezione viene descritto come abilitare queste funzionalità utilizzando API Gateway.

**Topics**
+ [Come attivare l'autenticazione TLS reciproca per il tuo REST APIs in API Gateway](rest-api-mutual-tls.md)
+ [Generazione e configurazione di un certificato SSL per l'autenticazione backend in Gateway API](getting-started-client-side-ssl-authentication.md)
+ [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md)
+ [Limita le richieste al tuo REST APIs per una migliore velocità di trasmissione in API Gateway](api-gateway-request-throttling.md)
+ [REST privato APIs in API Gateway](apigateway-private-apis.md)

# Come attivare l'autenticazione TLS reciproca per il tuo REST APIs in API Gateway
<a name="rest-api-mutual-tls"></a>

L'autenticazione TLS reciproca richiede l'autenticazione bidirezionale tra il client e il server. Con l'autenticazione TLS reciproca, i client devono presentare certificati X.509 per verificare la propria identità per accedere all'API. Il TLS reciproco è un requisito comune per l'Internet of Things (IoT) e business-to-business le applicazioni. 

È possibile utilizzare l'autenticazione TLS reciproca insieme ad altre [operazioni di autorizzazione e autenticazione](apigateway-control-access-to-api.md) supportate da API Gateway. API Gateway inoltra i certificati forniti dai client alle autorizzazioni Lambda e alle integrazioni di back-end.

**Importante**  
Per impostazione predefinita, i client possono richiamare l'API utilizzando l'endpoint `execute-api` generato da API Gateway per l'API. Per garantire che i client possano accedere all'API solo utilizzando un nome di dominio personalizzato con l'autenticazione TLS reciproca, disattivare l'endpoint `execute-api` predefinito. Per ulteriori informazioni, consulta [Disabilita l'endpoint predefinito per REST APIs](rest-api-disable-default-endpoint.md). 

**Topics**
+ [Prerequisiti per l'autenticazione TLS reciproca](#rest-api-mutual-tls-prerequisites)
+ [Configurazione dell'autenticazione TLS reciproca per un nome di dominio personalizzato](#rest-api-mutual-tls-configure)
+ [Richiamo di un'API utilizzando un nome di dominio personalizzato che richiede l'autenticazione TLS reciproca.](#rest-api-mutual-tls-invoke)
+ [Aggiornamento del truststore](#rest-api-mutual-tls-update-truststore)
+ [Disabilitazione dell'autenticazione TLS reciproca](#rest-api-mutual-tls-disable)
+ [Risoluzione dei problemi relativi all'autenticazione TLS reciproca per la REST API](#rest-api-mutual-tls-troubleshooting)

## Prerequisiti per l'autenticazione TLS reciproca
<a name="rest-api-mutual-tls-prerequisites"></a>

Per configurare l'autenticazione TLS reciproca hai bisogno di:
+ Un nome di dominio personalizzato regionale
+ Almeno un certificato configurato AWS Certificate Manager per il nome di dominio personalizzato
+ Un truststore configurato e caricato in Amazon S3

### Nomi di dominio personalizzati
<a name="rest-api-mutual-tls-custom-domain-name"></a>

 Per abilitare l'autenticazione TLS reciproca per un'API REST, è necessario configurare un nome di dominio personalizzato per l'API. È possibile abilitare l'autenticazione TLS reciproca per un nome di dominio personalizzato e quindi fornire il nome di dominio personalizzato ai client. Per accedere a un'API utilizzando un nome di dominio personalizzato con l'autenticazione TLS reciproca attivata, i client devono presentare certificati attendibili nelle richieste API. Puoi trovare ulteriori informazioni all'indirizzo [Nome di dominio personalizzato per REST pubblico APIs in API Gateway](how-to-custom-domains.md).

### Utilizzo di certificati AWS Certificate Manager emessi
<a name="rest-api-mutual-tls-using-acm-issued-certs"></a>

Puoi richiedere un certificato pubblicamente attendibile direttamente da ACM o importare certificati pubblici o autofirmati. Per configurare un certificato in ACM, accedi ad [ACM](https://console.aws.amazon.com/acm/). Se desideri importare un certificato, continua a leggere la sezione seguente.

### Utilizzo di un AWS Autorità di certificazione privata certificato o importato
<a name="rest-api-mutual-tls-non-acm-certs"></a>

Per utilizzare un certificato importato in ACM o un certificato AWS Autorità di certificazione privata con TLS reciproco, API Gateway necessita di un certificato `ownershipVerificationCertificate` rilasciato da ACM. Questo certificato di proprietà viene utilizzato solo per verificare che disponi delle autorizzazioni per l'utilizzo del nome di dominio. Non viene utilizzato per l'handshake TLS. Se non ne hai già uno`ownershipVerificationCertificate`, vai a [https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/)configurarne uno.

Dovrai mantenere la validità di questo certificato per tutta la durata del nome di dominio. Se un certificato scade e il rinnovo automatico non riesce, tutti gli aggiornamenti al nome di dominio verranno bloccati. Dovrai aggiornare il `ownershipVerificationCertificateArn` con un `ownershipVerificationCertificate` valido prima di poter apportare altre modifiche. Il `ownershipVerificationCertificate` non può essere utilizzato come certificato del server per un altro dominio TLS reciproco in API Gateway. Se un certificato viene reimportato direttamente in ACM, l'emittente deve rimanere invariato.

### Configurazione del truststore
<a name="rest-api-mutual-tls-create-trust-store"></a>

I truststore sono file di testo con un'estensione `.pem`. Sono elenchi attendibili di certificati provenienti da autorità di certificazione. Per utilizzare l'autenticazione TLS reciproca, crea un truststore di certificati X.509 attendibili per accedere all'API.

Devi includere nel truststore l'intera catena di attendibilità, a partire dal certificato della CA emittente, fino al certificato emesso da una CA radice. API Gateway accetta certificati del client emessi da qualsiasi CA presente nella catena di attendibilità. I certificati possono provenire da autorità di certificazione pubbliche o private. I certificati possono avere una lunghezza massima della catena di quattro. È inoltre possibile fornire certificati autofirmati. Nel truststore sono supportati i seguenti algoritmi:
+ SHA-256 o superiore
+ RSA-2048 o superiore
+ ECDSA-256 o ECDSA-384

API Gateway convalida un certo numero di proprietà del certificato. È possibile utilizzare le autorizzazioni Lambda per eseguire ulteriori controlli quando un client richiama un'API, incluso il controllo della revoca di un certificato. API Gateway convalida le seguenti proprietà:


| Validation | Descrizione | 
| --- | --- | 
|  Sintassi X.509  |  Il certificato deve soddisfare i requisiti di sintassi X.509.  | 
|  Integrità  |  Il contenuto del certificato non deve essere stato modificato rispetto a quello firmato dall'autorità di certificazione del truststore.  | 
|  Validity  |  Il periodo di validità del certificato deve essere attuale.  | 
|  Concatenamento di nomi/concatenamento di chiavi  |  I nomi e gli oggetti dei certificati devono formare una catena ininterrotta. I certificati possono avere una lunghezza massima della catena di quattro.  | 

### Caricare il truststore in un bucket Amazon S3 in un singolo file
<a name="w2aac15c20b7c11c13"></a>

Di seguito è riportato un esempio di come potrebbe presentarsi un file .pem.

**Example certificates.pem**  

```
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Certificate contents>
-----END CERTIFICATE-----
...
```

Il seguente AWS CLI comando [cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) viene caricato nel tuo `certificates.pem` bucket Amazon S3:

```
aws s3 cp certificates.pem s3://bucket-name
```

## Configurazione dell'autenticazione TLS reciproca per un nome di dominio personalizzato
<a name="rest-api-mutual-tls-configure"></a>

Per configurare l'autenticazione TLS reciproca per una REST API, è necessario utilizzare un nome di dominio personalizzato regionale per l'API con una policy di sicurezza `TLS_1_2`. Per ulteriori informazioni sulla scelta di una policy di sicurezza, consulta [Scegli una politica di sicurezza per il tuo dominio personalizzato in API Gateway](apigateway-custom-domain-tls-version.md).

**Nota**  
Il TLS reciproco non è supportato per uso privato. APIs

Dopo aver caricato il truststore su Amazon S3, puoi configurare il tuo nome di dominio personalizzato per utilizzare l'autenticazione TLS reciproca. Quanto segue [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-domain-name.html)crea un nome di dominio personalizzato con TLS reciproco:

```
aws apigateway create-domain-name --region us-east-2 \
    --domain-name api.example.com \
    --regional-certificate-arn arn:aws:acm:us-east-2:123456789012:certificate/123456789012-1234-1234-1234-12345678 \
    --endpoint-configuration types=REGIONAL \
    --security-policy TLS_1_2 \
    --mutual-tls-authentication truststoreUri=s3://bucket-name/key-name
```

Dopo aver creato il nome di dominio, devi configurare i record DNS e le mappature del percorso di base per le operazioni API. Per ulteriori informazioni, consulta [Configurazione di un nome di dominio personalizzato regionale in Gateway API](apigateway-regional-api-custom-domain-create.md).

## Richiamo di un'API utilizzando un nome di dominio personalizzato che richiede l'autenticazione TLS reciproca.
<a name="rest-api-mutual-tls-invoke"></a>

Per richiamare un'API con l'autenticazione TLS reciproca abilitata, i client devono presentare un certificato attendibile nella richiesta API. Quando un client tenta di richiamare la tua API, API Gateway cerca l'emittente del certificato del client nel tuo truststore. Per permettere ad API Gateway di procedere con la richiesta, l'emittente del certificato e l'intera catena di attendibilità fino al certificato emesso da una CA root devono trovarsi nel truststore.

Il seguente comando `curl` di esempio seguente invia una richiesta `api.example.com,` che include `my-cert.pem` nella richiesta. `my-key.key` è la chiave privata del certificato.

```
curl -v --key ./my-key.key --cert ./my-cert.pem api.example.com
```

L'API viene richiamata solo se il truststore considera attendibile il certificato. Le seguenti condizioni impediranno ad API Gateway di eseguire l'handshake TLS e lo porteranno a negare la richiesta con il codice di stato `403`. Se il tuo certificato:
+ non è attendibile
+ è scaduto
+ non utilizza un algoritmo supportato

**Nota**  
API Gateway non verifica se un certificato è stato revocato.

## Aggiornamento del truststore
<a name="rest-api-mutual-tls-update-truststore"></a>

Per aggiornare i certificati nel truststore, carica un nuovo bundle di certificati in Amazon S3. Potrai quindi aggiornare il nome di dominio personalizzato per utilizzare il certificato aggiornato.

Usa il [Controllo delle versioni di Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) per mantenere più versioni del truststore. Quando si aggiorna il nome di dominio personalizzato per utilizzare una nuova versione del truststore, API Gateway restituisce avvisi se i certificati non sono validi.

API Gateway produce avvisi di certificati solo quando si aggiorna il nome di dominio. API Gateway non invia notifiche se un certificato caricato in precedenza scade.

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente aggiorna un nome di dominio personalizzato per utilizzare una nuova versione di truststore:

```
aws apigateway update-domain-name \
    --domain-name api.example.com \
    --patch-operations op='replace',path='/mutualTlsAuthentication/truststoreVersion',value='abcdef123'
```

## Disabilitazione dell'autenticazione TLS reciproca
<a name="rest-api-mutual-tls-disable"></a>

Quanto segue [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)disabilita il TLS reciproco:

```
aws apigateway update-domain-name \
    --domain-name api.example.com \
    --patch-operations op='replace',path='/mutualTlsAuthentication/truststoreUri',value=''
```

## Risoluzione dei problemi relativi all'autenticazione TLS reciproca per la REST API
<a name="rest-api-mutual-tls-troubleshooting"></a>

Di seguito vengono forniti i consigli per la risoluzione dei problemi e la correzione degli errori che possono verificarsi durante l'attivazione dell'autenticazione TLS reciproca.

### Risoluzione dei problemi relativi agli avvisi dei certificati
<a name="rest-api-mutual-tls-troubleshooting-certificate"></a>

 Quando crei un nome di dominio personalizzato con l'autenticazione TLS reciproca, API Gateway genera avvisi se i certificati nel truststore non sono validi. Questo può verificarsi anche quando aggiorni un nome di dominio personalizzato all'utilizzo di un nuovo truststore. Gli avvisi indicano il problema con il certificato e l'oggetto del certificato che ha generato l'avviso. L'autenticazione TLS reciproca è ancora abilitata per l'API, ma alcuni client potrebbero non essere in grado di accedere all'API.

Per identificare il certificato che ha generato l'avviso, devi decodificare i certificati nel truststore. Puoi utilizzare strumenti come `openssl` per decodificare i certificati e identificarne gli oggetti.

Il comando seguente visualizza il contenuto di un certificato, incluso l'oggetto:

```
openssl x509 -in certificate.crt -text -noout
```

Aggiorna o rimuovi i certificati che hanno prodotto gli avvisi, quindi carica un nuovo truststore su Amazon S3. Dopo aver caricato il nuovo truststore, aggiorna il nome di dominio personalizzato per utilizzarlo.

### Risoluzione dei problemi relativi ai conflitti dei nomi di dominio
<a name="w2aac15c20b7c21b7"></a>

L'errore `"The certificate subject <certSubject> conflicts with an existing certificate from a different issuer."` indica che più autorità di certificazione hanno emesso un certificato per questo dominio. Per ogni oggetto del certificato, può esistere un solo emittente in API Gateway per domini TLS reciproci. Dovrai ottenere tutti i certificati per tale oggetto tramite un unico emittente. Se il problema riguarda un certificato di cui non hai il controllo ma puoi provare la proprietà del nome di dominio, [contatta Supporto](https://console.aws.amazon.com/support/cases#/create) per aprire un ticket.

### Risoluzione dei problemi relativi ai messaggi di stato dei nomi di dominio
<a name="w2aac15c20b7c21b9"></a>

`PENDING_CERTIFICATE_REIMPORT`: Ciò significa che hai reimportato un certificato in ACM e la convalida non è riuscita perché il nuovo certificato ha un SAN (nome alternativo del soggetto) che non è coperto da `ownershipVerificationCertificate` o l'oggetto o SANs nel certificato non copre il nome di dominio. Potrebbe esserci una configurazione errata o è stato importato un certificato non valido. Devi reimportare un certificato valido in ACM. Per ulteriori informazioni sulla convalida, consulta [Convalida della proprietà del dominio](https://docs.aws.amazon.com/acm/latest/userguide/domain-ownership-validation.html).

`PENDING_OWNERSHIP_VERIFICATION`: significa che il certificato verificato in precedenza è scaduto e che ACM non è stato in grado di rinnovarlo in automatico. Dovrai rinnovare il certificato o richiederne uno nuovo. Ulteriori informazioni sul rinnovo del certificato si trovano nella guida alla [Risoluzione dei problemi relativi al rinnovo dei certificati gestiti di ACM](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-renewal.html).

### Risoluzione dei problemi relativi alla restituzione di un certificato errato
<a name="w2aac15c20b7c21c11"></a>

Durante la migrazione di un certificato dedicato da un nome di dominio completo (FQDN) a un nome di dominio con caratteri jolly del cliente, Gateway API potrebbe restituire il certificato per il nome FQDN anziché per il nome di dominio con caratteri jolly.

Il comando seguente mostra quale certificato viene restituito da Gateway API:

```
openssl s_client -connect hostname:port
```

Se il certificato risultante è per il nome FQDN, [contatta Supporto](https://console.aws.amazon.com/support/cases#/create) per aprire un ticket.

# Generazione e configurazione di un certificato SSL per l'autenticazione backend in Gateway API
<a name="getting-started-client-side-ssl-authentication"></a>

 Puoi usare API Gateway per generare un certificato SSL e quindi usare la relativa chiave pubblica nel back-end per verificare che le richieste HTTP al sistema back-end provengano da API Gateway. Ciò consente al back-end HTTP di controllare e accettare solo le richieste che provengono da Amazon API Gateway, anche se il back-end è accessibile pubblicamente. 

**Nota**  
 Alcuni server back-end potrebbero non supportare l'autenticazione client SSL come fa API Gateway e potrebbero restituire un errore di certificato SSL. Per un elenco di server back-end non compatibili, consulta [Note importanti Amazon API Gateway](api-gateway-known-issues.md). 

 I certificati SSL generati da API Gateway sono autofirmati e solo la chiave pubblica di un certificato è visibile nella console API Gateway o tramite. APIs 

**Topics**
+ [Generazione di un certificato client tramite la console API Gateway](#generate-client-certificate)
+ [Configurazione di un'API per usare i certificati SSL](#configure-api)
+ [Test della chiamata per verificare la configurazione del certificato del client](#test-invoke)
+ [Configurazione di un server di back-end HTTPS per verificare il certificato del client](#certificate-validation)
+ [Rotazione di un certificato client in scadenza](#certificate-rotation)
+ [Autorità di certificazione supportate da Gateway API per le integrazioni HTTP e proxy HTTP in Gateway API](api-gateway-supported-certificate-authorities-for-http-endpoints.md)

## Generazione di un certificato client tramite la console API Gateway
<a name="generate-client-certificate"></a>

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

1. Scegli un REST o WebSocket un'API.

1. Nel riquadro di navigazione principale scegli **Certificati client**.

1. Nel riquadro **Certificati client** scegli **Genera certificato client**.

1.  (Facoltativo) In **Descrizione**, immetti una descrizione. 

1. Scegli **Genera certificato** per generare il certificato. API Gateway genera un nuovo certificato e restituisce il GUID del nuovo certificato con la chiave pubblica con codifica PEM. 

A questo punto, puoi configurare un'API per usare il certificato.

## Configurazione di un'API per usare i certificati SSL
<a name="configure-api"></a>

Queste istruzioni presuppongono che la procedura in sia già stata completat [Generazione di un certificato client tramite la console API Gateway](#generate-client-certificate).

1.  Nella console API Gateway, crea o apri un WebSocket REST o un'API per cui desideri utilizzare il certificato client. Assicurati che l'API sia stata distribuita in una fase. 

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

1. Nella sezione **Dettagli fase** scegli **Modifica**.

1. Per **Certificato client** seleziona un certificato.

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

Dopo aver selezionato un certificato per l'API e avere eseguito il salvataggio, API Gateway usa il certificato per tutte le chiamate alle integrazioni HTTP nell'API. 

## Test della chiamata per verificare la configurazione del certificato del client
<a name="test-invoke"></a>

1. Scegli un metodo REST API. Seleziona la scheda **Test**. Potrebbe essere necessario scegliere il pulsante freccia destra per visualizzare la scheda **Test**.

1. Per **Certificato client** seleziona un certificato. 

1. Scegli **Test (Esegui test)**. 

 API Gateway presenta il certificato SSL scelto per il back-end HTTP per l'autenticazione dell'API. 

## Configurazione di un server di back-end HTTPS per verificare il certificato del client
<a name="certificate-validation"></a>

Queste istruzioni presuppongono che [Generazione di un certificato client tramite la console API Gateway](#generate-client-certificate) sia già stata completata e che sia stata scaricata una copia del certificato client. Per scaricare un certificato client, chiama [https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html](https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html) dell'API REST di API Gateway o [https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html) della AWS CLI. 

 Prima di configurare un server di back-end HTTPS per verificare il certificato client SSL di API Gateway devi aver ottenuto la chiave privata con codifica PEM e un certificato lato server che viene fornito da un'autorità di certificazione attendibile. 

Se il nome di dominio del server è `myserver.mydomain.com`, il valore CNAME del certificato del server deve essere `myserver.mydomain.com` o `*.mydomain.com`. 

Tra le autorità di certificazione supportate figurano [Let's Encrypt](https://letsencrypt.org/) o una delle [Autorità di certificazione supportate da Gateway API per le integrazioni HTTP e proxy HTTP in Gateway API](api-gateway-supported-certificate-authorities-for-http-endpoints.md). 

Ad esempio, supponiamo che il file del certificato client sia `apig-cert.pem` e che la chiave privata del server e i file di certificato siano, rispettivamente, `server-key.pem` e `server-cert.pem`. Per un server Node.js nel back-end, è possibile configurare il server in modo simile al seguente:

```
var fs = require('fs'); 
var https = require('https');
var options = { 
    key: fs.readFileSync('server-key.pem'), 
    cert: fs.readFileSync('server-cert.pem'), 
    ca: fs.readFileSync('apig-cert.pem'), 
    requestCert: true, 
    rejectUnauthorized: true
};
https.createServer(options, function (req, res) { 
    res.writeHead(200); 
    res.end("hello world\n"); 
}).listen(443);
```



Per un'app [node-express](http://expressjs.com/), puoi utilizzare i [client-certificate-auth](https://www.npmjs.com/package/client-certificate-auth)moduli per autenticare le richieste dei client con certificati con codifica PEM. 

Per gli altri server HTTPS, consulta la documentazione per il server.

## Rotazione di un certificato client in scadenza
<a name="certificate-rotation"></a>

Il certificato client generato da API Gateway è valido per 365 giorni. È necessario ruotare il certificato prima che un certificato client in una fase API scada per evitare tempi di inattività per l'API.

### Ruota un certificato client in scadenza utilizzando il Console di gestione AWS
<a name="certification-rotation-console"></a>

La seguente procedura mostra come ruotare un certificato client nella console per un’API implementata in precedenza.

1. Nel riquadro di navigazione principale scegli **Certificati client**.

1. Nel riquadro **Certificati client** scegli **Genera certificato**.

1.  Aprire l'API per cui si desidera usare il certificato client. 

1. Scegliere **Stages (Fasi)** per l'API selezionata e quindi scegliere una fase.

1. Nella sezione **Dettagli fase** scegli **Modifica**.

1. Per **Certificato client** seleziona il nuovo certificato.

1. Per salvare le impostazioni, scegli **Salva modifiche**.

### Ruota un certificato client in scadenza utilizzando il AWS CLI
<a name="certificate-rotation-cli"></a>

 [Puoi controllare la data di scadenza del certificato chiamando [ClientCertificate:by-ID dell'API REST di API Gateway o il](https://docs.aws.amazon.com/apigateway/latest/api/API_GetClientCertificate.html)AWS CLI comando e [get-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/get-client-certificate.html)controllando la proprietà ExpirationDate restituita.](https://docs.aws.amazon.com/apigateway/latest/api/API_ClientCertificate.html#expirationDate)

Per ruotare un certificato client, procedere come indicato di seguito:

1. Genera un nuovo certificato client chiamando [clientcertificate:generate](https://docs.aws.amazon.com/apigateway/latest/api/API_GenerateClientCertificate.html) dell'API Gateway REST API o il comando di. AWS CLI [generate-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/generate-client-certificate.html) In questo tutorial si presuppone che l'ID del nuovo certificato client sia `ndiqef`.

1.  Aggiorna il server di back-end per includere il nuovo certificato client. Non rimuovere il certificato client esistente.

   Alcuni server potrebbero richiedere un riavvio per completare l'aggiornamento. Per ulteriori informazioni, consulta la documentazione del server per vedere se è necessario riavviare il server durante l'aggiornamento.

1.  Aggiornare la fase API per utilizzare il nuovo certificato client chiamando [stage:update](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateStage.html) dell'API REST di API Gateway, con il nuovo ID del certificato client (`ndiqef`):

   ```
   PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1
   Content-Type: application/json
   Host: apigateway.us-east-1.amazonaws.com
   X-Amz-Date: 20170603T200400Z
   Authorization: AWS4-HMAC-SHA256 Credential=...
   
   {
     "patchOperations" : [
       {
           "op" : "replace",
           "path" : "/clientCertificateId",
           "value" : "ndiqef"
       }
     ]
   }
   ```

   È anche possibile utilizzare il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html).

   [Se utilizzi un' WebSocket API, usa il comando update-stage. `apigatewayv2`](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-stage.html)

1.  Aggiorna il server di back-end per eliminare il vecchio certificato.

1.  Elimina il vecchio certificato da API Gateway chiamando il [clientcertificate:delete](https://docs.aws.amazon.com/apigateway/latest/api/API_DeleteClientCertificate.html) dell'API REST di API Gateway, specificando il clientCertificateId (`a1b2c3`) del vecchio certificato:

   ```
   DELETE /clientcertificates/a1b2c3 
   ```

   Puoi anche chiamare il comando: [delete-client-certificate](https://docs.aws.amazon.com/cli/latest/reference/apigateway/delete-client-certificate.html)

   ```
   aws apigateway delete-client-certificate --client-certificate-id a1b2c3
   ```

# Autorità di certificazione supportate da Gateway API per le integrazioni HTTP e proxy HTTP in Gateway API
<a name="api-gateway-supported-certificate-authorities-for-http-endpoints"></a>

 Nell'elenco riportato di seguito sono indicate le autorità di certificazione supportate da API Gateway per le integrazioni HTTP, proxy HTTP e private. 

```
Alias name: accvraiz1
	 SHA1: 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17
	 SHA256: 9A:6E:C0:12:E1:A7:DA:9D:BE:34:19:4D:47:8A:D7:C0:DB:18:22:FB:07:1D:F1:29:81:49:6E:D1:04:38:41:13
Alias name: acraizfnmtrcm
	 SHA1: EC:50:35:07:B2:15:C4:95:62:19:E2:A8:9A:5B:42:99:2C:4C:2C:20
	 SHA256: EB:C5:57:0C:29:01:8C:4D:67:B1:AA:12:7B:AF:12:F7:03:B4:61:1E:BC:17:B7:DA:B5:57:38:94:17:9B:93:FA
Alias name: actalis
	 SHA1: F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC
	 SHA256: 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66
Alias name: actalisauthenticationrootca
	 SHA1: F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC
	 SHA256: 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66
Alias name: addtrustclass1ca
	 SHA1: CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
	 SHA256: 8C:72:09:27:9A:C0:4E:27:5E:16:D0:7F:D3:B7:75:E8:01:54:B5:96:80:46:E3:1F:52:DD:25:76:63:24:E9:A7
Alias name: addtrustexternalca
	 SHA1: 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68
	 SHA256: 68:7F:A4:51:38:22:78:FF:F0:C8:B1:1F:8D:43:D5:76:67:1C:6E:B2:BC:EA:B4:13:FB:83:D9:65:D0:6D:2F:F2
Alias name: addtrustqualifiedca
	 SHA1: 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF
	 SHA256: 80:95:21:08:05:DB:4B:BC:35:5E:44:28:D8:FD:6E:C2:CD:E3:AB:5F:B9:7A:99:42:98:8E:B8:F4:DC:D0:60:16
Alias name: affirmtrustcommercial
	 SHA1: F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7
	 SHA256: 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7
Alias name: affirmtrustcommercialca
	 SHA1: F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7
	 SHA256: 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7
Alias name: affirmtrustnetworking
	 SHA1: 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F
	 SHA256: 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0:B4:1B
Alias name: affirmtrustnetworkingca
	 SHA1: 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F
	 SHA256: 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0:B4:1B
Alias name: affirmtrustpremium
	 SHA1: D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27
	 SHA256: 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A
Alias name: affirmtrustpremiumca
	 SHA1: D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27
	 SHA256: 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A
Alias name: affirmtrustpremiumecc
	 SHA1: B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB
	 SHA256: BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
Alias name: affirmtrustpremiumeccca
	 SHA1: B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB
	 SHA256: BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
Alias name: amazon-ca-g4-acm1
	 SHA1: F2:0D:28:B6:29:C2:2C:5E:84:05:E6:02:4D:97:FE:8F:A0:84:93:A0
	 SHA256: B0:11:A4:F7:29:6C:74:D8:2B:F5:62:DF:87:D7:28:C7:1F:B5:8C:F4:E6:73:F2:78:FC:DA:F3:FF:83:A6:8C:87
Alias name: amazon-ca-g4-acm2
	 SHA1: A7:E6:45:32:1F:7A:B7:AD:C0:70:EA:73:5F:AB:ED:C3:DA:B4:D0:C8
	 SHA256: D7:A8:7C:69:95:D0:E2:04:2A:32:70:A7:E2:87:FE:A7:E8:F4:C1:70:62:F7:90:C3:EB:BB:53:F2:AC:39:26:BE
Alias name: amazon-ca-g4-acm3
	 SHA1: 7A:DB:56:57:5F:D6:EE:67:85:0A:64:BB:1C:E9:E4:B0:9A:DB:9D:07
	 SHA256: 6B:EB:9D:20:2E:C2:00:70:BD:D2:5E:D3:C0:C8:33:2C:B4:78:07:C5:82:94:4E:7E:23:28:22:71:A4:8E:0E:C2
Alias name: amazon-ca-g4-legacy
	 SHA1: EA:E7:DE:F9:0A:BE:9F:0B:68:CE:B7:24:0D:80:74:03:BF:6E:B1:6E
	 SHA256: CD:72:C4:7F:B4:AD:28:A4:67:2B:E1:86:47:D4:40:E9:3B:16:2D:95:DB:3C:2F:94:BB:81:D9:09:F7:91:24:5E
Alias name: amazon-root-ca-ecc-384-1
	 SHA1: F9:5E:4A:AB:9C:2D:57:61:63:3D:B2:57:B4:0F:24:9E:7B:E2:23:7D
	 SHA256: C6:BD:E5:66:C2:72:2A:0E:96:E9:C1:2C:BF:38:92:D9:55:4D:29:03:57:30:72:40:7F:4E:70:17:3B:3C:9B:63
Alias name: amazon-root-ca-rsa-2k-1
	 SHA1: 8A:9A:AC:27:FC:86:D4:50:23:AD:D5:63:F9:1E:AE:2C:AF:63:08:6C
	 SHA256: 0F:8F:33:83:FB:70:02:89:49:24:E1:AA:B0:D7:FB:5A:BF:98:DF:75:8E:0F:FE:61:86:92:BC:F0:75:35:CC:80
Alias name: amazon-root-ca-rsa-4k-1
	 SHA1: EC:BD:09:61:F5:7A:B6:A8:76:BB:20:8F:14:05:ED:7E:70:ED:39:45
	 SHA256: 36:AE:AD:C2:6A:60:07:90:6B:83:A3:73:2D:D1:2B:D4:00:5E:C7:F2:76:11:99:A9:D4:DA:63:2F:59:B2:8B:CF
Alias name: amazon1
	 SHA1: 8D:A7:F9:65:EC:5E:FC:37:91:0F:1C:6E:59:FD:C1:CC:6A:6E:DE:16
	 SHA256: 8E:CD:E6:88:4F:3D:87:B1:12:5B:A3:1A:C3:FC:B1:3D:70:16:DE:7F:57:CC:90:4F:E1:CB:97:C6:AE:98:19:6E
Alias name: amazon2
	 SHA1: 5A:8C:EF:45:D7:A6:98:59:76:7A:8C:8B:44:96:B5:78:CF:47:4B:1A
	 SHA256: 1B:A5:B2:AA:8C:65:40:1A:82:96:01:18:F8:0B:EC:4F:62:30:4D:83:CE:C4:71:3A:19:C3:9C:01:1E:A4:6D:B4
Alias name: amazon3
	 SHA1: 0D:44:DD:8C:3C:8C:1A:1A:58:75:64:81:E9:0F:2E:2A:FF:B3:D2:6E
	 SHA256: 18:CE:6C:FE:7B:F1:4E:60:B2:E3:47:B8:DF:E8:68:CB:31:D0:2E:BB:3A:DA:27:15:69:F5:03:43:B4:6D:B3:A4
Alias name: amazon4
	 SHA1: F6:10:84:07:D6:F8:BB:67:98:0C:C2:E2:44:C2:EB:AE:1C:EF:63:BE
	 SHA256: E3:5D:28:41:9E:D0:20:25:CF:A6:90:38:CD:62:39:62:45:8D:A5:C6:95:FB:DE:A3:C2:2B:0B:FB:25:89:70:92
Alias name: amazonrootca1
	 SHA1: 8D:A7:F9:65:EC:5E:FC:37:91:0F:1C:6E:59:FD:C1:CC:6A:6E:DE:16
	 SHA256: 8E:CD:E6:88:4F:3D:87:B1:12:5B:A3:1A:C3:FC:B1:3D:70:16:DE:7F:57:CC:90:4F:E1:CB:97:C6:AE:98:19:6E
Alias name: amazonrootca2
	 SHA1: 5A:8C:EF:45:D7:A6:98:59:76:7A:8C:8B:44:96:B5:78:CF:47:4B:1A
	 SHA256: 1B:A5:B2:AA:8C:65:40:1A:82:96:01:18:F8:0B:EC:4F:62:30:4D:83:CE:C4:71:3A:19:C3:9C:01:1E:A4:6D:B4
Alias name: amazonrootca3
	 SHA1: 0D:44:DD:8C:3C:8C:1A:1A:58:75:64:81:E9:0F:2E:2A:FF:B3:D2:6E
	 SHA256: 18:CE:6C:FE:7B:F1:4E:60:B2:E3:47:B8:DF:E8:68:CB:31:D0:2E:BB:3A:DA:27:15:69:F5:03:43:B4:6D:B3:A4
Alias name: amazonrootca4
	 SHA1: F6:10:84:07:D6:F8:BB:67:98:0C:C2:E2:44:C2:EB:AE:1C:EF:63:BE
	 SHA256: E3:5D:28:41:9E:D0:20:25:CF:A6:90:38:CD:62:39:62:45:8D:A5:C6:95:FB:DE:A3:C2:2B:0B:FB:25:89:70:92
Alias name: amzninternalinfoseccag3
	 SHA1: B9:B1:CA:38:F7:BF:9C:D2:D4:95:E7:B6:5E:75:32:9B:A8:78:2E:F6
	 SHA256: 81:03:0B:C7:E2:54:DA:7B:F8:B7:45:DB:DD:41:15:89:B5:A3:81:86:FB:4B:29:77:1F:84:0A:18:D9:67:6D:68
Alias name: amzninternalrootca
	 SHA1: A7:B7:F6:15:8A:FF:1E:C8:85:13:38:BC:93:EB:A2:AB:A4:09:EF:06
	 SHA256: 0E:DE:63:C1:DC:7A:8E:11:F1:AB:BC:05:4F:59:EE:49:9D:62:9A:2F:DE:9C:A7:16:32:A2:64:29:3E:8B:66:AA
Alias name: aolrootca1
	 SHA1: 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A
	 SHA256: 77:40:73:12:C6:3A:15:3D:5B:C0:0B:4E:51:75:9C:DF:DA:C2:37:DC:2A:33:B6:79:46:E9:8E:9B:FA:68:0A:E3
Alias name: aolrootca2
	 SHA1: 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84
	 SHA256: 7D:3B:46:5A:60:14:E5:26:C0:AF:FC:EE:21:27:D2:31:17:27:AD:81:1C:26:84:2D:00:6A:F3:73:06:CC:80:BD
Alias name: atostrustedroot2011
	 SHA1: 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21
	 SHA256: F3:56:BE:A2:44:B7:A9:1E:B3:5D:53:CA:9A:D7:86:4A:CE:01:8E:2D:35:D5:F8:F9:6D:DF:68:A6:F4:1A:A4:74
Alias name: autoridaddecertificacionfirmaprofesionalcifa62634068
	 SHA1: AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA
	 SHA256: 04:04:80:28:BF:1F:28:64:D4:8F:9A:D4:D8:32:94:36:6A:82:88:56:55:3F:3B:14:30:3F:90:14:7F:5D:40:EF
Alias name: baltimorecodesigningca
	 SHA1: 30:46:D8:C8:88:FF:69:30:C3:4A:FC:CD:49:27:08:7C:60:56:7B:0D
	 SHA256: A9:15:45:DB:D2:E1:9C:4C:CD:F9:09:AA:71:90:0D:18:C7:35:1C:89:B3:15:F0:F1:3D:05:C1:3A:8F:FB:46:87
Alias name: baltimorecybertrustca
	 SHA1: D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74
	 SHA256: 16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB
Alias name: baltimorecybertrustroot
	 SHA1: D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74
	 SHA256: 16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB
Alias name: buypassclass2ca
	 SHA1: 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99
	 SHA256: 9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48
Alias name: buypassclass2rootca
	 SHA1: 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99
	 SHA256: 9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48
Alias name: buypassclass3ca
	 SHA1: DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57
	 SHA256: ED:F7:EB:BC:A2:7A:2A:38:4D:38:7B:7D:40:10:C6:66:E2:ED:B4:84:3E:4C:29:B4:AE:1D:5B:93:32:E6:B2:4D
Alias name: buypassclass3rootca
	 SHA1: DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57
	 SHA256: ED:F7:EB:BC:A2:7A:2A:38:4D:38:7B:7D:40:10:C6:66:E2:ED:B4:84:3E:4C:29:B4:AE:1D:5B:93:32:E6:B2:4D
Alias name: cadisigrootr2
	 SHA1: B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71
	 SHA256: E2:3D:4A:03:6D:7B:70:E9:F5:95:B1:42:20:79:D2:B9:1E:DF:BB:1F:B6:51:A0:63:3E:AA:8A:9D:C5:F8:07:03
Alias name: camerfirmachambersca
	 SHA1: 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C
	 SHA256: 06:3E:4A:FA:C4:91:DF:D3:32:F3:08:9B:85:42:E9:46:17:D8:93:D7:FE:94:4E:10:A7:93:7E:E2:9D:96:93:C0
Alias name: camerfirmachamberscommerceca
	 SHA1: 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1
	 SHA256: 0C:25:8A:12:A5:67:4A:EF:25:F2:8B:A7:DC:FA:EC:EE:A3:48:E5:41:E6:F5:CC:4E:E6:3B:71:B3:61:60:6A:C3
Alias name: camerfirmachambersignca
	 SHA1: 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C
	 SHA256: 13:63:35:43:93:34:A7:69:80:16:A0:D3:24:DE:72:28:4E:07:9D:7B:52:20:BB:8F:BD:74:78:16:EE:BE:BA:CA
Alias name: certigna
	 SHA1: B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97
	 SHA256: E3:B6:A2:DB:2E:D7:CE:48:84:2F:7A:C5:32:41:C7:B7:1D:54:14:4B:FB:40:C1:1F:3F:1D:0B:42:F5:EE:A1:2D
Alias name: certignarootca
	 SHA1: 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43
	 SHA256: D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68
Alias name: certplusclass2primaryca
	 SHA1: 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB
	 SHA256: 0F:99:3C:8A:EF:97:BA:AF:56:87:14:0E:D5:9A:D1:82:1B:B4:AF:AC:F0:AA:9A:58:B5:D5:7A:33:8A:3A:FB:CB
Alias name: certplusclass3pprimaryca
	 SHA1: 21:6B:2A:29:E6:2A:00:CE:82:01:46:D8:24:41:41:B9:25:11:B2:79
	 SHA256: CC:C8:94:89:37:1B:AD:11:1C:90:61:9B:EA:24:0A:2E:6D:AD:D9:9F:9F:6E:1D:4D:41:E5:8E:D6:DE:3D:02:85
Alias name: certsignrootca
	 SHA1: FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B
	 SHA256: EA:A9:62:C4:FA:4A:6B:AF:EB:E4:15:19:6D:35:1C:CD:88:8D:4F:53:F3:FA:8A:E6:D7:C4:66:A9:4E:60:42:BB
Alias name: certsignrootcag2
	 SHA1: 26:F9:93:B4:ED:3D:28:27:B0:B9:4B:A7:E9:15:1D:A3:8D:92:E5:32
	 SHA256: 65:7C:FE:2F:A7:3F:AA:38:46:25:71:F3:32:A2:36:3A:46:FC:E7:02:09:51:71:07:02:CD:FB:B6:EE:DA:33:05
Alias name: certum2
	 SHA1: D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92
	 SHA256: B6:76:F2:ED:DA:E8:77:5C:D3:6C:B0:F6:3C:D1:D4:60:39:61:F4:9E:62:65:BA:01:3A:2F:03:07:B6:D0:B8:04
Alias name: certumca
	 SHA1: 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18
	 SHA256: D8:E0:FE:BC:1D:B2:E3:8D:00:94:0F:37:D2:7D:41:34:4D:99:3E:73:4B:99:D5:65:6D:97:78:D4:D8:14:36:24
Alias name: certumtrustednetworkca
	 SHA1: 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
	 SHA256: 5C:58:46:8D:55:F5:8E:49:7E:74:39:82:D2:B5:00:10:B6:D1:65:37:4A:CF:83:A7:D4:A3:2D:B7:68:C4:40:8E
Alias name: certumtrustednetworkca2
	 SHA1: D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92
	 SHA256: B6:76:F2:ED:DA:E8:77:5C:D3:6C:B0:F6:3C:D1:D4:60:39:61:F4:9E:62:65:BA:01:3A:2F:03:07:B6:D0:B8:04
Alias name: cfcaevroot
	 SHA1: E2:B8:29:4B:55:84:AB:6B:58:C2:90:46:6C:AC:3F:B8:39:8F:84:83
	 SHA256: 5C:C3:D7:8E:4E:1D:5E:45:54:7A:04:E6:87:3E:64:F9:0C:F9:53:6D:1C:CC:2E:F8:00:F3:55:C4:C5:FD:70:FD
Alias name: chambersofcommerceroot2008
	 SHA1: 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C
	 SHA256: 06:3E:4A:FA:C4:91:DF:D3:32:F3:08:9B:85:42:E9:46:17:D8:93:D7:FE:94:4E:10:A7:93:7E:E2:9D:96:93:C0
Alias name: chunghwaepkirootca
	 SHA1: 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0
	 SHA256: C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5
Alias name: cia-crt-g3-01-ca
	 SHA1: 2B:EE:2C:BA:A3:1D:B5:FE:60:40:41:95:08:ED:46:82:39:4D:ED:E2
	 SHA256: 20:48:AD:4C:EC:90:7F:FA:4A:15:D4:CE:45:E3:C8:E4:2C:EA:78:33:DC:C7:D3:40:48:FC:60:47:27:42:99:EC
Alias name: cia-crt-g3-02-ca
	 SHA1: 96:4A:BB:A7:BD:DA:FC:97:34:C0:0A:2D:F0:05:98:F7:E6:C6:6F:09
	 SHA256: 93:F1:72:FB:BA:43:31:5C:06:EE:0F:9F:04:89:B8:F6:88:BC:75:15:3C:BE:B4:80:AC:A7:14:3A:F6:FC:4A:C1
Alias name: comodo-ca
	 SHA1: AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4
	 SHA256: 52:F0:E1:C4:E5:8E:C6:29:29:1B:60:31:7F:07:46:71:B8:5D:7E:A8:0D:5B:07:27:34:63:53:4B:32:B4:02:34
Alias name: comodoaaaca
	 SHA1: D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49
	 SHA256: D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4
Alias name: comodoaaaservicesroot
	 SHA1: D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49
	 SHA256: D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4
Alias name: comodocertificationauthority
	 SHA1: 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B
	 SHA256: 0C:2C:D6:3D:F7:80:6F:A3:99:ED:E8:09:11:6B:57:5B:F8:79:89:F0:65:18:F9:80:8C:86:05:03:17:8B:AF:66
Alias name: comodoecccertificationauthority
	 SHA1: 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11
	 SHA256: 17:93:92:7A:06:14:54:97:89:AD:CE:2F:8F:34:F7:F0:B6:6D:0F:3A:E3:A3:B8:4D:21:EC:15:DB:BA:4F:AD:C7
Alias name: comodorsacertificationauthority
	 SHA1: AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4
	 SHA256: 52:F0:E1:C4:E5:8E:C6:29:29:1B:60:31:7F:07:46:71:B8:5D:7E:A8:0D:5B:07:27:34:63:53:4B:32:B4:02:34
Alias name: cybertrustglobalroot
	 SHA1: 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6
	 SHA256: 96:0A:DF:00:63:E9:63:56:75:0C:29:65:DD:0A:08:67:DA:0B:9C:BD:6E:77:71:4A:EA:FB:23:49:AB:39:3D:A3
Alias name: deprecateditsecca
	 SHA1: 12:12:0B:03:0E:15:14:54:F4:DD:B3:F5:DE:13:6E:83:5A:29:72:9D
	 SHA256: 9A:59:DA:86:24:1A:FD:BA:A3:39:FA:9C:FD:21:6A:0B:06:69:4D:E3:7E:37:52:6B:BE:63:C8:BC:83:74:2E:CB
Alias name: deutschetelekomrootca2
	 SHA1: 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF
	 SHA256: B6:19:1A:50:D0:C3:97:7F:7D:A9:9B:CD:AA:C8:6A:22:7D:AE:B9:67:9E:C7:0B:A3:B0:C9:D9:22:71:C1:70:D3
Alias name: digicertassuredidrootca
	 SHA1: 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
	 SHA256: 3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C
Alias name: digicertassuredidrootg2
	 SHA1: A1:4B:48:D9:43:EE:0A:0E:40:90:4F:3C:E0:A4:C0:91:93:51:5D:3F
	 SHA256: 7D:05:EB:B6:82:33:9F:8C:94:51:EE:09:4E:EB:FE:FA:79:53:A1:14:ED:B2:F4:49:49:45:2F:AB:7D:2F:C1:85
Alias name: digicertassuredidrootg3
	 SHA1: F5:17:A2:4F:9A:48:C6:C9:F8:A2:00:26:9F:DC:0F:48:2C:AB:30:89
	 SHA256: 7E:37:CB:8B:4C:47:09:0C:AB:36:55:1B:A6:F4:5D:B8:40:68:0F:BA:16:6A:95:2D:B1:00:71:7F:43:05:3F:C2
Alias name: digicertglobalrootca
	 SHA1: A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36
	 SHA256: 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61
Alias name: digicertglobalrootg2
	 SHA1: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4
	 SHA256: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F
Alias name: digicertglobalrootg3
	 SHA1: 7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E
	 SHA256: 31:AD:66:48:F8:10:41:38:C7:38:F3:9E:A4:32:01:33:39:3E:3A:18:CC:02:29:6E:F9:7C:2A:C9:EF:67:31:D0
Alias name: digicerthighassuranceevrootca
	 SHA1: 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25
	 SHA256: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF
Alias name: digicerttrustedrootg4
	 SHA1: DD:FB:16:CD:49:31:C9:73:A2:03:7D:3F:C8:3A:4D:7D:77:5D:05:E4
	 SHA256: 55:2F:7B:DC:F1:A7:AF:9E:6C:E6:72:01:7F:4F:12:AB:F7:72:40:C7:8E:76:1A:C2:03:D1:D9:D2:0A:C8:99:88
Alias name: dstrootcax3
	 SHA1: DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13
	 SHA256: 06:87:26:03:31:A7:24:03:D9:09:F1:05:E6:9B:CF:0D:32:E1:BD:24:93:FF:C6:D9:20:6D:11:BC:D6:77:07:39
Alias name: dtrustrootclass3ca22009
	 SHA1: 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0
	 SHA256: 49:E7:A4:42:AC:F0:EA:62:87:05:00:54:B5:25:64:B6:50:E4:F4:9E:42:E3:48:D6:AA:38:E0:39:E9:57:B1:C1
Alias name: dtrustrootclass3ca2ev2009
	 SHA1: 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83
	 SHA256: EE:C5:49:6B:98:8C:E9:86:25:B9:34:09:2E:EC:29:08:BE:D0:B0:F3:16:C2:D4:73:0C:84:EA:F1:F3:D3:48:81
Alias name: ecacc
	 SHA1: 28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8
	 SHA256: 88:49:7F:01:60:2F:31:54:24:6A:E2:8C:4D:5A:EF:10:F1:D8:7E:BB:76:62:6F:4A:E0:B7:F9:5B:A7:96:87:99
Alias name: emsigneccrootcac3
	 SHA1: B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66
	 SHA256: BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3
Alias name: emsigneccrootcag3
	 SHA1: 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1
	 SHA256: 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B
Alias name: emsignrootcac1
	 SHA1: E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01
	 SHA256: 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F
Alias name: emsignrootcag1
	 SHA1: 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C
	 SHA256: 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67
Alias name: entrust2048ca
	 SHA1: 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31
	 SHA256: 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77
Alias name: entrustevca
	 SHA1: B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9
	 SHA256: 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C
Alias name: entrustnetpremium2048secureserverca
	 SHA1: 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31
	 SHA256: 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77
Alias name: entrustrootcag2
	 SHA1: 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4
	 SHA256: 43:DF:57:74:B0:3E:7F:EF:5F:E4:0D:93:1A:7B:ED:F1:BB:2E:6B:42:73:8C:4E:6D:38:41:10:3D:3A:A7:F3:39
Alias name: entrustrootcertificationauthority
	 SHA1: B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9
	 SHA256: 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C
Alias name: entrustrootcertificationauthorityec1
	 SHA1: 20:D8:06:40:DF:9B:25:F5:12:25:3A:11:EA:F7:59:8A:EB:14:B5:47
	 SHA256: 02:ED:0E:B2:8C:14:DA:45:16:5C:56:67:91:70:0D:64:51:D7:FB:56:F0:B2:AB:1D:3B:8E:B0:70:E5:6E:DF:F5
Alias name: entrustrootcertificationauthorityg2
	 SHA1: 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4
	 SHA256: 43:DF:57:74:B0:3E:7F:EF:5F:E4:0D:93:1A:7B:ED:F1:BB:2E:6B:42:73:8C:4E:6D:38:41:10:3D:3A:A7:F3:39
Alias name: entrustrootcertificationauthorityg4
	 SHA1: 14:88:4E:86:26:37:B0:26:AF:59:62:5C:40:77:EC:35:29:BA:96:01
	 SHA256: DB:35:17:D1:F6:73:2A:2D:5A:B9:7C:53:3E:C7:07:79:EE:32:70:A6:2F:B4:AC:42:38:37:24:60:E6:F0:1E:88
Alias name: epkirootcertificationauthority
	 SHA1: 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0
	 SHA256: C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5
Alias name: equifaxsecureebusinessca1
	 SHA1: AE:E6:3D:70:E3:76:FB:C7:3A:EB:B0:A1:C1:D4:C4:7A:A7:40:B3:F4
	 SHA256: 2E:3A:2B:B5:11:25:05:83:6C:A8:96:8B:E2:CB:37:27:CE:9B:56:84:5C:6E:E9:8E:91:85:10:4A:FB:9A:F5:96
Alias name: equifaxsecureglobalebusinessca1
	 SHA1: 3A:74:CB:7A:47:DB:70:DE:89:1F:24:35:98:64:B8:2D:82:BD:1A:36
	 SHA256: 86:AB:5A:65:71:D3:32:9A:BC:D2:E4:E6:37:66:8B:A8:9C:73:1E:C2:93:B6:CB:A6:0F:71:63:40:A0:91:CE:AE
Alias name: eszignorootca2017
	 SHA1: 89:D4:83:03:4F:9E:9A:48:80:5F:72:37:D4:A9:A6:EF:CB:7C:1F:D1
	 SHA256: BE:B0:0B:30:83:9B:9B:C3:2C:32:E4:44:79:05:95:06:41:F2:64:21:B1:5E:D0:89:19:8B:51:8A:E2:EA:1B:99
Alias name: etugracertificationauthority
	 SHA1: 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39
	 SHA256: B0:BF:D5:2B:B0:D7:D9:BD:92:BF:5D:4D:C1:3D:A2:55:C0:2C:54:2F:37:83:65:EA:89:39:11:F5:5E:55:F2:3C
Alias name: gd-class2-root.pem
	 SHA1: 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4
	 SHA256: C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4
Alias name: gd_bundle-g2.pem
	 SHA1: 27:AC:93:69:FA:F2:52:07:BB:26:27:CE:FA:CC:BE:4E:F9:C3:19:B8
	 SHA256: 97:3A:41:27:6F:FD:01:E0:27:A2:AA:D4:9E:34:C3:78:46:D3:E9:76:FF:6A:62:0B:67:12:E3:38:32:04:1A:A6
Alias name: gdcatrustauthr5root
	 SHA1: 0F:36:38:5B:81:1A:25:C3:9B:31:4E:83:CA:E9:34:66:70:CC:74:B4
	 SHA256: BF:FF:8F:D0:44:33:48:7D:6A:8A:A6:0C:1A:29:76:7A:9F:C2:BB:B0:5E:42:0F:71:3A:13:B9:92:89:1D:38:93
Alias name: gdroot-g2.pem
	 SHA1: 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B
	 SHA256: 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA
Alias name: geotrustglobalca
	 SHA1: DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12
	 SHA256: FF:85:6A:2D:25:1D:CD:88:D3:66:56:F4:50:12:67:98:CF:AB:AA:DE:40:79:9C:72:2D:E4:D2:B5:DB:36:A7:3A
Alias name: geotrustprimaryca
	 SHA1: 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96
	 SHA256: 37:D5:10:06:C5:12:EA:AB:62:64:21:F1:EC:8C:92:01:3F:C5:F8:2A:E9:8E:E5:33:EB:46:19:B8:DE:B4:D0:6C
Alias name: geotrustprimarycag2
	 SHA1: 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0
	 SHA256: 5E:DB:7A:C4:3B:82:A0:6A:87:61:E8:D7:BE:49:79:EB:F2:61:1F:7D:D7:9B:F9:1C:1C:6B:56:6A:21:9E:D7:66
Alias name: geotrustprimarycag3
	 SHA1: 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD
	 SHA256: B4:78:B8:12:25:0D:F8:78:63:5C:2A:A7:EC:7D:15:5E:AA:62:5E:E8:29:16:E2:CD:29:43:61:88:6C:D1:FB:D4
Alias name: geotrustprimarycertificationauthority
	 SHA1: 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96
	 SHA256: 37:D5:10:06:C5:12:EA:AB:62:64:21:F1:EC:8C:92:01:3F:C5:F8:2A:E9:8E:E5:33:EB:46:19:B8:DE:B4:D0:6C
Alias name: geotrustprimarycertificationauthorityg2
	 SHA1: 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0
	 SHA256: 5E:DB:7A:C4:3B:82:A0:6A:87:61:E8:D7:BE:49:79:EB:F2:61:1F:7D:D7:9B:F9:1C:1C:6B:56:6A:21:9E:D7:66
Alias name: geotrustprimarycertificationauthorityg3
	 SHA1: 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD
	 SHA256: B4:78:B8:12:25:0D:F8:78:63:5C:2A:A7:EC:7D:15:5E:AA:62:5E:E8:29:16:E2:CD:29:43:61:88:6C:D1:FB:D4
Alias name: geotrustuniversalca
	 SHA1: E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79
	 SHA256: A0:45:9B:9F:63:B2:25:59:F5:FA:5D:4C:6D:B3:F9:F7:2F:F1:93:42:03:35:78:F0:73:BF:1D:1B:46:CB:B9:12
Alias name: geotrustuniversalca2
	 SHA1: 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79
	 SHA256: A0:23:4F:3B:C8:52:7C:A5:62:8E:EC:81:AD:5D:69:89:5D:A5:68:0D:C9:1D:1C:B8:47:7F:33:F8:78:B9:5B:0B
Alias name: globalchambersignroot2008
	 SHA1: 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C
	 SHA256: 13:63:35:43:93:34:A7:69:80:16:A0:D3:24:DE:72:28:4E:07:9D:7B:52:20:BB:8F:BD:74:78:16:EE:BE:BA:CA
Alias name: globalsignca
	 SHA1: B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C
	 SHA256: EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99
Alias name: globalsigneccrootcar4
	 SHA1: 69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB
	 SHA256: BE:C9:49:11:C2:95:56:76:DB:6C:0A:55:09:86:D7:6E:3B:A0:05:66:7C:44:2C:97:62:B4:FB:B7:73:DE:22:8C
Alias name: globalsigneccrootcar5
	 SHA1: 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA
	 SHA256: 17:9F:BC:14:8A:3D:D0:0F:D2:4E:A1:34:58:CC:43:BF:A7:F5:9C:81:82:D7:83:A5:13:F6:EB:EC:10:0C:89:24
Alias name: globalsignr2ca
	 SHA1: 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
	 SHA256: CA:42:DD:41:74:5F:D0:B8:1E:B9:02:36:2C:F9:D8:BF:71:9D:A1:BD:1B:1E:FC:94:6F:5B:4C:99:F4:2C:1B:9E
Alias name: globalsignr3ca
	 SHA1: D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD
	 SHA256: CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B
Alias name: globalsignrootca
	 SHA1: B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C
	 SHA256: EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99
Alias name: globalsignrootcar2
	 SHA1: 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
	 SHA256: CA:42:DD:41:74:5F:D0:B8:1E:B9:02:36:2C:F9:D8:BF:71:9D:A1:BD:1B:1E:FC:94:6F:5B:4C:99:F4:2C:1B:9E
Alias name: globalsignrootcar3
	 SHA1: D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD
	 SHA256: CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B
Alias name: globalsignrootcar6
	 SHA1: 80:94:64:0E:B5:A7:A1:CA:11:9C:1F:DD:D5:9F:81:02:63:A7:FB:D1
	 SHA256: 2C:AB:EA:FE:37:D0:6C:A2:2A:BA:73:91:C0:03:3D:25:98:29:52:C4:53:64:73:49:76:3A:3A:B5:AD:6C:CF:69
Alias name: godaddyclass2ca
	 SHA1: 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4
	 SHA256: C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4
Alias name: godaddyrootcertificateauthorityg2
	 SHA1: 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B
	 SHA256: 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA
Alias name: godaddyrootg2ca
	 SHA1: 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B
	 SHA256: 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA
Alias name: gtsrootr1
	 SHA1: E1:C9:50:E6:EF:22:F8:4C:56:45:72:8B:92:20:60:D7:D5:A7:A3:E8
	 SHA256: 2A:57:54:71:E3:13:40:BC:21:58:1C:BD:2C:F1:3E:15:84:63:20:3E:CE:94:BC:F9:D3:CC:19:6B:F0:9A:54:72
Alias name: gtsrootr2
	 SHA1: D2:73:96:2A:2A:5E:39:9F:73:3F:E1:C7:1E:64:3F:03:38:34:FC:4D
	 SHA256: C4:5D:7B:B0:8E:6D:67:E6:2E:42:35:11:0B:56:4E:5F:78:FD:92:EF:05:8C:84:0A:EA:4E:64:55:D7:58:5C:60
Alias name: gtsrootr3
	 SHA1: 30:D4:24:6F:07:FF:DB:91:89:8A:0B:E9:49:66:11:EB:8C:5E:46:E5
	 SHA256: 15:D5:B8:77:46:19:EA:7D:54:CE:1C:A6:D0:B0:C4:03:E0:37:A9:17:F1:31:E8:A0:4E:1E:6B:7A:71:BA:BC:E5
Alias name: gtsrootr4
	 SHA1: 2A:1D:60:27:D9:4A:B1:0A:1C:4D:91:5C:CD:33:A0:CB:3E:2D:54:CB
	 SHA256: 71:CC:A5:39:1F:9E:79:4B:04:80:25:30:B3:63:E1:21:DA:8A:30:43:BB:26:66:2F:EA:4D:CA:7F:C9:51:A4:BD
Alias name: hellenicacademicandresearchinstitutionseccrootca2015
	 SHA1: 9F:F1:71:8D:92:D5:9A:F3:7D:74:97:B4:BC:6F:84:68:0B:BA:B6:66
	 SHA256: 44:B5:45:AA:8A:25:E6:5A:73:CA:15:DC:27:FC:36:D2:4C:1C:B9:95:3A:06:65:39:B1:15:82:DC:48:7B:48:33
Alias name: hellenicacademicandresearchinstitutionsrootca2011
	 SHA1: FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D
	 SHA256: BC:10:4F:15:A4:8B:E7:09:DC:A5:42:A7:E1:D4:B9:DF:6F:05:45:27:E8:02:EA:A9:2D:59:54:44:25:8A:FE:71
Alias name: hellenicacademicandresearchinstitutionsrootca2015
	 SHA1: 01:0C:06:95:A6:98:19:14:FF:BF:5F:C6:B0:B6:95:EA:29:E9:12:A6
	 SHA256: A0:40:92:9A:02:CE:53:B4:AC:F4:F2:FF:C6:98:1C:E4:49:6F:75:5E:6D:45:FE:0B:2A:69:2B:CD:52:52:3F:36
Alias name: hongkongpostrootca1
	 SHA1: D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58
	 SHA256: F9:E6:7D:33:6C:51:00:2A:C0:54:C6:32:02:2D:66:DD:A2:E7:E3:FF:F1:0A:D0:61:ED:31:D8:BB:B4:10:CF:B2
Alias name: hongkongpostrootca3
	 SHA1: 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02
	 SHA256: 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6
Alias name: identrustcommercialrootca1
	 SHA1: DF:71:7E:AA:4A:D9:4E:C9:55:84:99:60:2D:48:DE:5F:BC:F0:3A:25
	 SHA256: 5D:56:49:9B:E4:D2:E0:8B:CF:CA:D0:8A:3E:38:72:3D:50:50:3B:DE:70:69:48:E4:2F:55:60:30:19:E5:28:AE
Alias name: identrustpublicsectorrootca1
	 SHA1: BA:29:41:60:77:98:3F:F4:F3:EF:F2:31:05:3B:2E:EA:6D:4D:45:FD
	 SHA256: 30:D0:89:5A:9A:44:8A:26:20:91:63:55:22:D1:F5:20:10:B5:86:7A:CA:E1:2C:78:EF:95:8F:D4:F4:38:9F:2F
Alias name: isrgrootx1
	 SHA1: CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8
	 SHA256: 96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6
Alias name: izenpecom
	 SHA1: 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19
	 SHA256: 25:30:CC:8E:98:32:15:02:BA:D9:6F:9B:1F:BA:1B:09:9E:2D:29:9E:0F:45:48:BB:91:4F:36:3B:C0:D4:53:1F
Alias name: keynectisrootca
	 SHA1: 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97
	 SHA256: 42:10:F1:99:49:9A:9A:C3:3C:8D:E0:2B:A6:DB:AA:14:40:8B:DD:8A:6E:32:46:89:C1:92:2D:06:97:15:A3:32
Alias name: microseceszignorootca2009
	 SHA1: 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E
	 SHA256: 3C:5F:81:FE:A5:FA:B8:2C:64:BF:A2:EA:EC:AF:CD:E8:E0:77:FC:86:20:A7:CA:E5:37:16:3D:F3:6E:DB:F3:78
Alias name: mozillacert0.pem
	 SHA1: 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74
	 SHA256: A5:31:25:18:8D:21:10:AA:96:4B:02:C7:B7:C6:DA:32:03:17:08:94:E5:FB:71:FF:FB:66:67:D5:E6:81:0A:36
Alias name: mozillacert1.pem
	 SHA1: 23:E5:94:94:51:95:F2:41:48:03:B4:D5:64:D2:A3:A3:F5:D8:8B:8C
	 SHA256: B4:41:0B:73:E2:E6:EA:CA:47:FB:C4:2F:8F:A4:01:8A:F4:38:1D:C5:4C:FA:A8:44:50:46:1E:ED:09:45:4D:E9
Alias name: mozillacert10.pem
	 SHA1: 5F:3A:FC:0A:8B:64:F6:86:67:34:74:DF:7E:A9:A2:FE:F9:FA:7A:51
	 SHA256: 21:DB:20:12:36:60:BB:2E:D4:18:20:5D:A1:1E:E7:A8:5A:65:E2:BC:6E:55:B5:AF:7E:78:99:C8:A2:66:D9:2E
Alias name: mozillacert100.pem
	 SHA1: 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0
	 SHA256: 49:E7:A4:42:AC:F0:EA:62:87:05:00:54:B5:25:64:B6:50:E4:F4:9E:42:E3:48:D6:AA:38:E0:39:E9:57:B1:C1
Alias name: mozillacert101.pem
	 SHA1: 99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39
	 SHA256: 62:F2:40:27:8C:56:4C:4D:D8:BF:7D:9D:4F:6F:36:6E:A8:94:D2:2F:5F:34:D9:89:A9:83:AC:EC:2F:FF:ED:50
Alias name: mozillacert102.pem
	 SHA1: 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83
	 SHA256: EE:C5:49:6B:98:8C:E9:86:25:B9:34:09:2E:EC:29:08:BE:D0:B0:F3:16:C2:D4:73:0C:84:EA:F1:F3:D3:48:81
Alias name: mozillacert103.pem
	 SHA1: 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74
	 SHA256: 3C:FC:3C:14:D1:F6:84:FF:17:E3:8C:43:CA:44:0C:00:B9:67:EC:93:3E:8B:FE:06:4C:A1:D7:2C:90:F2:AD:B0
Alias name: mozillacert104.pem
	 SHA1: 4F:99:AA:93:FB:2B:D1:37:26:A1:99:4A:CE:7F:F0:05:F2:93:5D:1E
	 SHA256: 1C:01:C6:F4:DB:B2:FE:FC:22:55:8B:2B:CA:32:56:3F:49:84:4A:CF:C3:2B:7B:E4:B0:FF:59:9F:9E:8C:7A:F7
Alias name: mozillacert105.pem
	 SHA1: 77:47:4F:C6:30:E4:0F:4C:47:64:3F:84:BA:B8:C6:95:4A:8A:41:EC
	 SHA256: F0:9B:12:2C:71:14:F4:A0:9B:D4:EA:4F:4A:99:D5:58:B4:6E:4C:25:CD:81:14:0D:29:C0:56:13:91:4C:38:41
Alias name: mozillacert106.pem
	 SHA1: E7:A1:90:29:D3:D5:52:DC:0D:0F:C6:92:D3:EA:88:0D:15:2E:1A:6B
	 SHA256: D9:5F:EA:3C:A4:EE:DC:E7:4C:D7:6E:75:FC:6D:1F:F6:2C:44:1F:0F:A8:BC:77:F0:34:B1:9E:5D:B2:58:01:5D
Alias name: mozillacert107.pem
	 SHA1: 8E:1C:74:F8:A6:20:B9:E5:8A:F4:61:FA:EC:2B:47:56:51:1A:52:C6
	 SHA256: F9:6F:23:F4:C3:E7:9C:07:7A:46:98:8D:5A:F5:90:06:76:A0:F0:39:CB:64:5D:D1:75:49:B2:16:C8:24:40:CE
Alias name: mozillacert108.pem
	 SHA1: B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C
	 SHA256: EB:D4:10:40:E4:BB:3E:C7:42:C9:E3:81:D3:1E:F2:A4:1A:48:B6:68:5C:96:E7:CE:F3:C1:DF:6C:D4:33:1C:99
Alias name: mozillacert109.pem
	 SHA1: B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71
	 SHA256: E2:3D:4A:03:6D:7B:70:E9:F5:95:B1:42:20:79:D2:B9:1E:DF:BB:1F:B6:51:A0:63:3E:AA:8A:9D:C5:F8:07:03
Alias name: mozillacert11.pem
	 SHA1: 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
	 SHA256: 3E:90:99:B5:01:5E:8F:48:6C:00:BC:EA:9D:11:1E:E7:21:FA:BA:35:5A:89:BC:F1:DF:69:56:1E:3D:C6:32:5C
Alias name: mozillacert110.pem
	 SHA1: 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17
	 SHA256: 9A:6E:C0:12:E1:A7:DA:9D:BE:34:19:4D:47:8A:D7:C0:DB:18:22:FB:07:1D:F1:29:81:49:6E:D1:04:38:41:13
Alias name: mozillacert111.pem
	 SHA1: 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65
	 SHA256: 59:76:90:07:F7:68:5D:0F:CD:50:87:2F:9F:95:D5:75:5A:5B:2B:45:7D:81:F3:69:2B:61:0A:98:67:2F:0E:1B
Alias name: mozillacert112.pem
	 SHA1: 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37
	 SHA256: DD:69:36:FE:21:F8:F0:77:C1:23:A1:A5:21:C1:22:24:F7:22:55:B7:3E:03:A7:26:06:93:E8:A2:4B:0F:A3:89
Alias name: mozillacert113.pem
	 SHA1: 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31
	 SHA256: 6D:C4:71:72:E0:1C:BC:B0:BF:62:58:0D:89:5F:E2:B8:AC:9A:D4:F8:73:80:1E:0C:10:B9:C8:37:D2:1E:B1:77
Alias name: mozillacert114.pem
	 SHA1: 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39
	 SHA256: B0:BF:D5:2B:B0:D7:D9:BD:92:BF:5D:4D:C1:3D:A2:55:C0:2C:54:2F:37:83:65:EA:89:39:11:F5:5E:55:F2:3C
Alias name: mozillacert115.pem
	 SHA1: 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
	 SHA256: 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52
Alias name: mozillacert116.pem
	 SHA1: 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21
	 SHA256: F3:56:BE:A2:44:B7:A9:1E:B3:5D:53:CA:9A:D7:86:4A:CE:01:8E:2D:35:D5:F8:F9:6D:DF:68:A6:F4:1A:A4:74
Alias name: mozillacert117.pem
	 SHA1: D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74
	 SHA256: 16:AF:57:A9:F6:76:B0:AB:12:60:95:AA:5E:BA:DE:F2:2A:B3:11:19:D6:44:AC:95:CD:4B:93:DB:F3:F2:6A:EB
Alias name: mozillacert118.pem
	 SHA1: 7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45
	 SHA256: 5F:0B:62:EA:B5:E3:53:EA:65:21:65:16:58:FB:B6:53:59:F4:43:28:0A:4A:FB:D1:04:D7:7D:10:F9:F0:4C:07
Alias name: mozillacert119.pem
	 SHA1: 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
	 SHA256: CA:42:DD:41:74:5F:D0:B8:1E:B9:02:36:2C:F9:D8:BF:71:9D:A1:BD:1B:1E:FC:94:6F:5B:4C:99:F4:2C:1B:9E
Alias name: mozillacert12.pem
	 SHA1: A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36
	 SHA256: 43:48:A0:E9:44:4C:78:CB:26:5E:05:8D:5E:89:44:B4:D8:4F:96:62:BD:26:DB:25:7F:89:34:A4:43:C7:01:61
Alias name: mozillacert120.pem
	 SHA1: DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41
	 SHA256: CF:56:FF:46:A4:A1:86:10:9D:D9:65:84:B5:EE:B5:8A:51:0C:42:75:B0:E5:F9:4F:40:BB:AE:86:5E:19:F6:73
Alias name: mozillacert121.pem
	 SHA1: CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
	 SHA256: 8C:72:09:27:9A:C0:4E:27:5E:16:D0:7F:D3:B7:75:E8:01:54:B5:96:80:46:E3:1F:52:DD:25:76:63:24:E9:A7
Alias name: mozillacert122.pem
	 SHA1: 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68
	 SHA256: 68:7F:A4:51:38:22:78:FF:F0:C8:B1:1F:8D:43:D5:76:67:1C:6E:B2:BC:EA:B4:13:FB:83:D9:65:D0:6D:2F:F2
Alias name: mozillacert123.pem
	 SHA1: 2A:B6:28:48:5E:78:FB:F3:AD:9E:79:10:DD:6B:DF:99:72:2C:96:E5
	 SHA256: 07:91:CA:07:49:B2:07:82:AA:D3:C7:D7:BD:0C:DF:C9:48:58:35:84:3E:B2:D7:99:60:09:CE:43:AB:6C:69:27
Alias name: mozillacert124.pem
	 SHA1: 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF
	 SHA256: 80:95:21:08:05:DB:4B:BC:35:5E:44:28:D8:FD:6E:C2:CD:E3:AB:5F:B9:7A:99:42:98:8E:B8:F4:DC:D0:60:16
Alias name: mozillacert125.pem
	 SHA1: B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9
	 SHA256: 73:C1:76:43:4F:1B:C6:D5:AD:F4:5B:0E:76:E7:27:28:7C:8D:E5:76:16:C1:E6:E6:14:1A:2B:2C:BC:7D:8E:4C
Alias name: mozillacert126.pem
	 SHA1: 25:01:90:19:CF:FB:D9:99:1C:B7:68:25:74:8D:94:5F:30:93:95:42
	 SHA256: AF:8B:67:62:A1:E5:28:22:81:61:A9:5D:5C:55:9E:E2:66:27:8F:75:D7:9E:83:01:89:A5:03:50:6A:BD:6B:4C
Alias name: mozillacert127.pem
	 SHA1: DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12
	 SHA256: FF:85:6A:2D:25:1D:CD:88:D3:66:56:F4:50:12:67:98:CF:AB:AA:DE:40:79:9C:72:2D:E4:D2:B5:DB:36:A7:3A
Alias name: mozillacert128.pem
	 SHA1: A9:E9:78:08:14:37:58:88:F2:05:19:B0:6D:2B:0D:2B:60:16:90:7D
	 SHA256: CA:2D:82:A0:86:77:07:2F:8A:B6:76:4F:F0:35:67:6C:FE:3E:5E:32:5E:01:21:72:DF:3F:92:09:6D:B7:9B:85
Alias name: mozillacert129.pem
	 SHA1: E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79
	 SHA256: A0:45:9B:9F:63:B2:25:59:F5:FA:5D:4C:6D:B3:F9:F7:2F:F1:93:42:03:35:78:F0:73:BF:1D:1B:46:CB:B9:12
Alias name: mozillacert13.pem
	 SHA1: 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91
	 SHA256: 6C:61:DA:C3:A2:DE:F0:31:50:6B:E0:36:D2:A6:FE:40:19:94:FB:D1:3D:F9:C8:D4:66:59:92:74:C4:46:EC:98
Alias name: mozillacert130.pem
	 SHA1: E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E
	 SHA256: F4:C1:49:55:1A:30:13:A3:5B:C7:BF:FE:17:A7:F3:44:9B:C1:AB:5B:5A:0A:E7:4B:06:C2:3B:90:00:4C:01:04
Alias name: mozillacert131.pem
	 SHA1: 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79
	 SHA256: A0:23:4F:3B:C8:52:7C:A5:62:8E:EC:81:AD:5D:69:89:5D:A5:68:0D:C9:1D:1C:B8:47:7F:33:F8:78:B9:5B:0B
Alias name: mozillacert132.pem
	 SHA1: 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A
	 SHA256: 77:40:73:12:C6:3A:15:3D:5B:C0:0B:4E:51:75:9C:DF:DA:C2:37:DC:2A:33:B6:79:46:E9:8E:9B:FA:68:0A:E3
Alias name: mozillacert133.pem
	 SHA1: 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84
	 SHA256: 7D:3B:46:5A:60:14:E5:26:C0:AF:FC:EE:21:27:D2:31:17:27:AD:81:1C:26:84:2D:00:6A:F3:73:06:CC:80:BD
Alias name: mozillacert134.pem
	 SHA1: 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62
	 SHA256: 69:FA:C9:BD:55:FB:0A:C7:8D:53:BB:EE:5C:F1:D5:97:98:9F:D0:AA:AB:20:A2:51:51:BD:F1:73:3E:E7:D1:22
Alias name: mozillacert135.pem
	 SHA1: 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18
	 SHA256: D8:E0:FE:BC:1D:B2:E3:8D:00:94:0F:37:D2:7D:41:34:4D:99:3E:73:4B:99:D5:65:6D:97:78:D4:D8:14:36:24
Alias name: mozillacert136.pem
	 SHA1: D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49
	 SHA256: D7:A7:A0:FB:5D:7E:27:31:D7:71:E9:48:4E:BC:DE:F7:1D:5F:0C:3E:0A:29:48:78:2B:C8:3E:E0:EA:69:9E:F4
Alias name: mozillacert137.pem
	 SHA1: 4A:65:D5:F4:1D:EF:39:B8:B8:90:4A:4A:D3:64:81:33:CF:C7:A1:D1
	 SHA256: BD:81:CE:3B:4F:65:91:D1:1A:67:B5:FC:7A:47:FD:EF:25:52:1B:F9:AA:4E:18:B9:E3:DF:2E:34:A7:80:3B:E8
Alias name: mozillacert138.pem
	 SHA1: E1:9F:E3:0E:8B:84:60:9E:80:9B:17:0D:72:A8:C5:BA:6E:14:09:BD
	 SHA256: 3F:06:E5:56:81:D4:96:F5:BE:16:9E:B5:38:9F:9F:2B:8F:F6:1E:17:08:DF:68:81:72:48:49:CD:5D:27:CB:69
Alias name: mozillacert139.pem
	 SHA1: DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9
	 SHA256: A4:5E:DE:3B:BB:F0:9C:8A:E1:5C:72:EF:C0:72:68:D6:93:A2:1C:99:6F:D5:1E:67:CA:07:94:60:FD:6D:88:73
Alias name: mozillacert14.pem
	 SHA1: 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25
	 SHA256: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF
Alias name: mozillacert140.pem
	 SHA1: CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7
	 SHA256: 85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86
Alias name: mozillacert141.pem
	 SHA1: 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6
	 SHA256: 58:D0:17:27:9C:D4:DC:63:AB:DD:B1:96:A6:C9:90:6C:30:C4:E0:87:83:EA:E8:C1:60:99:54:D6:93:55:59:6B
Alias name: mozillacert142.pem
	 SHA1: 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85
	 SHA256: 18:F1:FC:7F:20:5D:F8:AD:DD:EB:7F:E0:07:DD:57:E3:AF:37:5A:9C:4D:8D:73:54:6B:F4:F1:FE:D1:E1:8D:35
Alias name: mozillacert143.pem
	 SHA1: 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7
	 SHA256: E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C
Alias name: mozillacert144.pem
	 SHA1: 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27
	 SHA256: 79:08:B4:03:14:C1:38:10:0B:51:8D:07:35:80:7F:FB:FC:F8:51:8A:00:95:33:71:05:BA:38:6B:15:3D:D9:27
Alias name: mozillacert145.pem
	 SHA1: 10:1D:FA:3F:D5:0B:CB:BB:9B:B5:60:0C:19:55:A4:1A:F4:73:3A:04
	 SHA256: D4:1D:82:9E:8C:16:59:82:2A:F9:3F:CE:62:BF:FC:DE:26:4F:C8:4E:8B:95:0C:5F:F2:75:D0:52:35:46:95:A3
Alias name: mozillacert146.pem
	 SHA1: 21:FC:BD:8E:7F:6C:AF:05:1B:D1:B3:43:EC:A8:E7:61:47:F2:0F:8A
	 SHA256: 48:98:C6:88:8C:0C:FF:B0:D3:E3:1A:CA:8A:37:D4:E3:51:5F:F7:46:D0:26:35:D8:66:46:CF:A0:A3:18:5A:E7
Alias name: mozillacert147.pem
	 SHA1: 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4
	 SHA256: 85:FB:2F:91:DD:12:27:5A:01:45:B6:36:53:4F:84:02:4A:D6:8B:69:B8:EE:88:68:4F:F7:11:37:58:05:B3:48
Alias name: mozillacert148.pem
	 SHA1: 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7
	 SHA256: 6E:A5:47:41:D0:04:66:7E:ED:1B:48:16:63:4A:A3:A7:9E:6E:4B:96:95:0F:82:79:DA:FC:8D:9B:D8:81:21:37
Alias name: mozillacert149.pem
	 SHA1: 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1
	 SHA256: 0C:25:8A:12:A5:67:4A:EF:25:F2:8B:A7:DC:FA:EC:EE:A3:48:E5:41:E6:F5:CC:4E:E6:3B:71:B3:61:60:6A:C3
Alias name: mozillacert15.pem
	 SHA1: 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB
	 SHA256: 0F:99:3C:8A:EF:97:BA:AF:56:87:14:0E:D5:9A:D1:82:1B:B4:AF:AC:F0:AA:9A:58:B5:D5:7A:33:8A:3A:FB:CB
Alias name: mozillacert150.pem
	 SHA1: 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9
	 SHA256: EF:3C:B4:17:FC:8E:BF:6F:97:87:6C:9E:4E:CE:39:DE:1E:A5:FE:64:91:41:D1:02:8B:7D:11:C0:B2:29:8C:ED
Alias name: mozillacert151.pem
	 SHA1: AC:ED:5F:65:53:FD:25:CE:01:5F:1F:7A:48:3B:6A:74:9F:61:78:C6
	 SHA256: 7F:12:CD:5F:7E:5E:29:0E:C7:D8:51:79:D5:B7:2C:20:A5:BE:75:08:FF:DB:5B:F8:1A:B9:68:4A:7F:C9:F6:67
Alias name: mozillacert16.pem
	 SHA1: DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13
	 SHA256: 06:87:26:03:31:A7:24:03:D9:09:F1:05:E6:9B:CF:0D:32:E1:BD:24:93:FF:C6:D9:20:6D:11:BC:D6:77:07:39
Alias name: mozillacert17.pem
	 SHA1: 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D
	 SHA256: 76:7C:95:5A:76:41:2C:89:AF:68:8E:90:A1:C7:0F:55:6C:FD:6B:60:25:DB:EA:10:41:6D:7E:B6:83:1F:8C:40
Alias name: mozillacert18.pem
	 SHA1: 79:98:A3:08:E1:4D:65:85:E6:C2:1E:15:3A:71:9F:BA:5A:D3:4A:D9
	 SHA256: 44:04:E3:3B:5E:14:0D:CF:99:80:51:FD:FC:80:28:C7:C8:16:15:C5:EE:73:7B:11:1B:58:82:33:A9:B5:35:A0
Alias name: mozillacert19.pem
	 SHA1: B4:35:D4:E1:11:9D:1C:66:90:A7:49:EB:B3:94:BD:63:7B:A7:82:B7
	 SHA256: C4:70:CF:54:7E:23:02:B9:77:FB:29:DD:71:A8:9A:7B:6C:1F:60:77:7B:03:29:F5:60:17:F3:28:BF:4F:6B:E6
Alias name: mozillacert2.pem
	 SHA1: 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A
	 SHA256: 69:DD:D7:EA:90:BB:57:C9:3E:13:5D:C8:5E:A6:FC:D5:48:0B:60:32:39:BD:C4:54:FC:75:8B:2A:26:CF:7F:79
Alias name: mozillacert20.pem
	 SHA1: D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61
	 SHA256: 62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95
Alias name: mozillacert21.pem
	 SHA1: 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB
	 SHA256: BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5
Alias name: mozillacert22.pem
	 SHA1: 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96
	 SHA256: 37:D5:10:06:C5:12:EA:AB:62:64:21:F1:EC:8C:92:01:3F:C5:F8:2A:E9:8E:E5:33:EB:46:19:B8:DE:B4:D0:6C
Alias name: mozillacert23.pem
	 SHA1: 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81
	 SHA256: 8D:72:2F:81:A9:C1:13:C0:79:1D:F1:36:A2:96:6D:B2:6C:95:0A:97:1D:B4:6B:41:99:F4:EA:54:B7:8B:FB:9F
Alias name: mozillacert24.pem
	 SHA1: 59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16
	 SHA256: 66:8C:83:94:7D:A6:3B:72:4B:EC:E1:74:3C:31:A0:E6:AE:D0:DB:8E:C5:B3:1B:E3:77:BB:78:4F:91:B6:71:6F
Alias name: mozillacert25.pem
	 SHA1: 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5
	 SHA256: 9A:CF:AB:7E:43:C8:D8:80:D0:6B:26:2A:94:DE:EE:E4:B4:65:99:89:C3:D0:CA:F1:9B:AF:64:05:E4:1A:B7:DF
Alias name: mozillacert26.pem
	 SHA1: 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11
	 SHA256: F1:C1:B5:0A:E5:A2:0D:D8:03:0E:C9:F6:BC:24:82:3D:D3:67:B5:25:57:59:B4:E7:1B:61:FC:E9:F7:37:5D:73
Alias name: mozillacert27.pem
	 SHA1: 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B
	 SHA256: 42:00:F5:04:3A:C8:59:0E:BB:52:7D:20:9E:D1:50:30:29:FB:CB:D4:1C:A1:B5:06:EC:27:F1:5A:DE:7D:AC:69
Alias name: mozillacert28.pem
	 SHA1: 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B
	 SHA256: 0C:2C:D6:3D:F7:80:6F:A3:99:ED:E8:09:11:6B:57:5B:F8:79:89:F0:65:18:F9:80:8C:86:05:03:17:8B:AF:66
Alias name: mozillacert29.pem
	 SHA1: 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE
	 SHA256: 15:F0:BA:00:A3:AC:7A:F3:AC:88:4C:07:2B:10:11:A0:77:BD:77:C0:97:F4:01:64:B2:F8:59:8A:BD:83:86:0C
Alias name: mozillacert3.pem
	 SHA1: 87:9F:4B:EE:05:DF:98:58:3B:E3:60:D6:33:E7:0D:3F:FE:98:71:AF
	 SHA256: 39:DF:7B:68:2B:7B:93:8F:84:71:54:81:CC:DE:8D:60:D8:F2:2E:C5:98:87:7D:0A:AA:C1:2B:59:18:2B:03:12
Alias name: mozillacert30.pem
	 SHA1: E7:B4:F6:9D:61:EC:90:69:DB:7E:90:A7:40:1A:3C:F4:7D:4F:E8:EE
	 SHA256: A7:12:72:AE:AA:A3:CF:E8:72:7F:7F:B3:9F:0F:B3:D1:E5:42:6E:90:60:B0:6E:E6:F1:3E:9A:3C:58:33:CD:43
Alias name: mozillacert31.pem
	 SHA1: 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11
	 SHA256: 17:93:92:7A:06:14:54:97:89:AD:CE:2F:8F:34:F7:F0:B6:6D:0F:3A:E3:A3:B8:4D:21:EC:15:DB:BA:4F:AD:C7
Alias name: mozillacert32.pem
	 SHA1: 60:D6:89:74:B5:C2:65:9E:8A:0F:C1:88:7C:88:D2:46:69:1B:18:2C
	 SHA256: B9:BE:A7:86:0A:96:2E:A3:61:1D:AB:97:AB:6D:A3:E2:1C:10:68:B9:7D:55:57:5E:D0:E1:12:79:C1:1C:89:32
Alias name: mozillacert33.pem
	 SHA1: FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D
	 SHA256: A2:2D:BA:68:1E:97:37:6E:2D:39:7D:72:8A:AE:3A:9B:62:96:B9:FD:BA:60:BC:2E:11:F6:47:F2:C6:75:FB:37
Alias name: mozillacert34.pem
	 SHA1: 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9
	 SHA256: 41:C9:23:86:6A:B4:CA:D6:B7:AD:57:80:81:58:2E:02:07:97:A6:CB:DF:4F:FF:78:CE:83:96:B3:89:37:D7:F5
Alias name: mozillacert35.pem
	 SHA1: 2A:C8:D5:8B:57:CE:BF:2F:49:AF:F2:FC:76:8F:51:14:62:90:7A:41
	 SHA256: 92:BF:51:19:AB:EC:CA:D0:B1:33:2D:C4:E1:D0:5F:BA:75:B5:67:90:44:EE:0C:A2:6E:93:1F:74:4F:2F:33:CF
Alias name: mozillacert36.pem
	 SHA1: 23:88:C9:D3:71:CC:9E:96:3D:FF:7D:3C:A7:CE:FC:D6:25:EC:19:0D
	 SHA256: 32:7A:3D:76:1A:BA:DE:A0:34:EB:99:84:06:27:5C:B1:A4:77:6E:FD:AE:2F:DF:6D:01:68:EA:1C:4F:55:67:D0
Alias name: mozillacert37.pem
	 SHA1: B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97
	 SHA256: E3:B6:A2:DB:2E:D7:CE:48:84:2F:7A:C5:32:41:C7:B7:1D:54:14:4B:FB:40:C1:1F:3F:1D:0B:42:F5:EE:A1:2D
Alias name: mozillacert38.pem
	 SHA1: CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36
	 SHA256: A6:C5:1E:0D:A5:CA:0A:93:09:D2:E4:C0:E4:0C:2A:F9:10:7A:AE:82:03:85:7F:E1:98:E3:E7:69:E3:43:08:5C
Alias name: mozillacert39.pem
	 SHA1: AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E
	 SHA256: E6:B8:F8:76:64:85:F8:07:AE:7F:8D:AC:16:70:46:1F:07:C0:A1:3E:EF:3A:1F:F7:17:53:8D:7A:BA:D3:91:B4
Alias name: mozillacert4.pem
	 SHA1: E3:92:51:2F:0A:CF:F5:05:DF:F6:DE:06:7F:75:37:E1:65:EA:57:4B
	 SHA256: 0B:5E:ED:4E:84:64:03:CF:55:E0:65:84:84:40:ED:2A:82:75:8B:F5:B9:AA:1F:25:3D:46:13:CF:A0:80:FF:3F
Alias name: mozillacert40.pem
	 SHA1: 80:25:EF:F4:6E:70:C8:D4:72:24:65:84:FE:40:3B:8A:8D:6A:DB:F5
	 SHA256: 8D:A0:84:FC:F9:9C:E0:77:22:F8:9B:32:05:93:98:06:FA:5C:B8:11:E1:C8:13:F6:A1:08:C7:D3:36:B3:40:8E
Alias name: mozillacert41.pem
	 SHA1: 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3
	 SHA256: EB:F3:C0:2A:87:89:B1:FB:7D:51:19:95:D6:63:B7:29:06:D9:13:CE:0D:5E:10:56:8A:8A:77:E2:58:61:67:E7
Alias name: mozillacert42.pem
	 SHA1: 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF
	 SHA256: B6:19:1A:50:D0:C3:97:7F:7D:A9:9B:CD:AA:C8:6A:22:7D:AE:B9:67:9E:C7:0B:A3:B0:C9:D9:22:71:C1:70:D3
Alias name: mozillacert43.pem
	 SHA1: F9:CD:0E:2C:DA:76:24:C1:8F:BD:F0:F0:AB:B6:45:B8:F7:FE:D5:7A
	 SHA256: 50:79:41:C7:44:60:A0:B4:70:86:22:0D:4E:99:32:57:2A:B5:D1:B5:BB:CB:89:80:AB:1C:B1:76:51:A8:44:D2
Alias name: mozillacert44.pem
	 SHA1: 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6
	 SHA256: 96:0A:DF:00:63:E9:63:56:75:0C:29:65:DD:0A:08:67:DA:0B:9C:BD:6E:77:71:4A:EA:FB:23:49:AB:39:3D:A3
Alias name: mozillacert45.pem
	 SHA1: 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0
	 SHA256: C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5
Alias name: mozillacert46.pem
	 SHA1: 40:9D:4B:D9:17:B5:5C:27:B6:9B:64:CB:98:22:44:0D:CD:09:B8:89
	 SHA256: EC:C3:E9:C3:40:75:03:BE:E0:91:AA:95:2F:41:34:8F:F8:8B:AA:86:3B:22:64:BE:FA:C8:07:90:15:74:E9:39
Alias name: mozillacert47.pem
	 SHA1: 1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96
	 SHA256: E4:C7:34:30:D7:A5:B5:09:25:DF:43:37:0A:0D:21:6E:9A:79:B9:D6:DB:83:73:A0:C6:9E:B1:CC:31:C7:C5:2A
Alias name: mozillacert48.pem
	 SHA1: A0:A1:AB:90:C9:FC:84:7B:3B:12:61:E8:97:7D:5F:D3:22:61:D3:CC
	 SHA256: 0F:4E:9C:DD:26:4B:02:55:50:D1:70:80:63:40:21:4F:E9:44:34:C9:B0:2F:69:7E:C7:10:FC:5F:EA:FB:5E:38
Alias name: mozillacert49.pem
	 SHA1: 61:57:3A:11:DF:0E:D8:7E:D5:92:65:22:EA:D0:56:D7:44:B3:23:71
	 SHA256: B7:B1:2B:17:1F:82:1D:AA:99:0C:D0:FE:50:87:B1:28:44:8B:A8:E5:18:4F:84:C5:1E:02:B5:C8:FB:96:2B:24
Alias name: mozillacert5.pem
	 SHA1: B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6
	 SHA256: CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2
Alias name: mozillacert50.pem
	 SHA1: 8C:96:BA:EB:DD:2B:07:07:48:EE:30:32:66:A0:F3:98:6E:7C:AE:58
	 SHA256: 35:AE:5B:DD:D8:F7:AE:63:5C:FF:BA:56:82:A8:F0:0B:95:F4:84:62:C7:10:8E:E9:A0:E5:29:2B:07:4A:AF:B2
Alias name: mozillacert51.pem
	 SHA1: FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B
	 SHA256: EA:A9:62:C4:FA:4A:6B:AF:EB:E4:15:19:6D:35:1C:CD:88:8D:4F:53:F3:FA:8A:E6:D7:C4:66:A9:4E:60:42:BB
Alias name: mozillacert52.pem
	 SHA1: 8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F
	 SHA256: E2:83:93:77:3D:A8:45:A6:79:F2:08:0C:C7:FB:44:A3:B7:A1:C3:79:2C:B7:EB:77:29:FD:CB:6A:8D:99:AE:A7
Alias name: mozillacert53.pem
	 SHA1: 7F:8A:B0:CF:D0:51:87:6A:66:F3:36:0F:47:C8:8D:8C:D3:35:FC:74
	 SHA256: 2D:47:43:7D:E1:79:51:21:5A:12:F3:C5:8E:51:C7:29:A5:80:26:EF:1F:CC:0A:5F:B3:D9:DC:01:2F:60:0D:19
Alias name: mozillacert54.pem
	 SHA1: 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD
	 SHA256: B4:78:B8:12:25:0D:F8:78:63:5C:2A:A7:EC:7D:15:5E:AA:62:5E:E8:29:16:E2:CD:29:43:61:88:6C:D1:FB:D4
Alias name: mozillacert55.pem
	 SHA1: AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12
	 SHA256: A4:31:0D:50:AF:18:A6:44:71:90:37:2A:86:AF:AF:8B:95:1F:FB:43:1D:83:7F:1E:56:88:B4:59:71:ED:15:57
Alias name: mozillacert56.pem
	 SHA1: F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2
	 SHA256: 4B:03:F4:58:07:AD:70:F2:1B:FC:2C:AE:71:C9:FD:E4:60:4C:06:4C:F5:FF:B6:86:BA:E5:DB:AA:D7:FD:D3:4C
Alias name: mozillacert57.pem
	 SHA1: D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58
	 SHA256: F9:E6:7D:33:6C:51:00:2A:C0:54:C6:32:02:2D:66:DD:A2:E7:E3:FF:F1:0A:D0:61:ED:31:D8:BB:B4:10:CF:B2
Alias name: mozillacert58.pem
	 SHA1: 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0
	 SHA256: 5E:DB:7A:C4:3B:82:A0:6A:87:61:E8:D7:BE:49:79:EB:F2:61:1F:7D:D7:9B:F9:1C:1C:6B:56:6A:21:9E:D7:66
Alias name: mozillacert59.pem
	 SHA1: 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54
	 SHA256: 23:99:56:11:27:A5:71:25:DE:8C:EF:EA:61:0D:DF:2F:A0:78:B5:C8:06:7F:4E:82:82:90:BF:B8:60:E8:4B:3C
Alias name: mozillacert6.pem
	 SHA1: 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4
	 SHA256: C3:84:6B:F2:4B:9E:93:CA:64:27:4C:0E:C6:7C:1E:CC:5E:02:4F:FC:AC:D2:D7:40:19:35:0E:81:FE:54:6A:E4
Alias name: mozillacert60.pem
	 SHA1: 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3
	 SHA256: BF:0F:EE:FB:9E:3A:58:1A:D5:F9:E9:DB:75:89:98:57:43:D2:61:08:5C:4D:31:4F:6F:5D:72:59:AA:42:16:12
Alias name: mozillacert61.pem
	 SHA1: E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84
	 SHA256: 03:95:0F:B4:9A:53:1F:3E:19:91:94:23:98:DF:A9:E0:EA:32:D7:BA:1C:DD:9B:C8:5D:B5:7E:D9:40:0B:43:4A
Alias name: mozillacert62.pem
	 SHA1: A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B
	 SHA256: A4:B6:B3:99:6F:C2:F3:06:B3:FD:86:81:BD:63:41:3D:8C:50:09:CC:4F:A3:29:C2:CC:F0:E2:FA:1B:14:03:05
Alias name: mozillacert63.pem
	 SHA1: 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E
	 SHA256: 3C:5F:81:FE:A5:FA:B8:2C:64:BF:A2:EA:EC:AF:CD:E8:E0:77:FC:86:20:A7:CA:E5:37:16:3D:F3:6E:DB:F3:78
Alias name: mozillacert64.pem
	 SHA1: 62:7F:8D:78:27:65:63:99:D2:7D:7F:90:44:C9:FE:B3:F3:3E:FA:9A
	 SHA256: AB:70:36:36:5C:71:54:AA:29:C2:C2:9F:5D:41:91:16:3B:16:2A:22:25:01:13:57:D5:6D:07:FF:A7:BC:1F:72
Alias name: mozillacert65.pem
	 SHA1: 69:BD:8C:F4:9C:D3:00:FB:59:2E:17:93:CA:55:6A:F3:EC:AA:35:FB
	 SHA256: BC:23:F9:8A:31:3C:B9:2D:E3:BB:FC:3A:5A:9F:44:61:AC:39:49:4C:4A:E1:5A:9E:9D:F1:31:E9:9B:73:01:9A
Alias name: mozillacert66.pem
	 SHA1: DD:E1:D2:A9:01:80:2E:1D:87:5E:84:B3:80:7E:4B:B1:FD:99:41:34
	 SHA256: E6:09:07:84:65:A4:19:78:0C:B6:AC:4C:1C:0B:FB:46:53:D9:D9:CC:6E:B3:94:6E:B7:F3:D6:99:97:BA:D5:98
Alias name: mozillacert67.pem
	 SHA1: D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD
	 SHA256: CB:B5:22:D7:B7:F1:27:AD:6A:01:13:86:5B:DF:1C:D4:10:2E:7D:07:59:AF:63:5A:7C:F4:72:0D:C9:63:C5:3B
Alias name: mozillacert68.pem
	 SHA1: AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA
	 SHA256: 04:04:80:28:BF:1F:28:64:D4:8F:9A:D4:D8:32:94:36:6A:82:88:56:55:3F:3B:14:30:3F:90:14:7F:5D:40:EF
Alias name: mozillacert69.pem
	 SHA1: 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19
	 SHA256: 25:30:CC:8E:98:32:15:02:BA:D9:6F:9B:1F:BA:1B:09:9E:2D:29:9E:0F:45:48:BB:91:4F:36:3B:C0:D4:53:1F
Alias name: mozillacert7.pem
	 SHA1: AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A
	 SHA256: 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58
Alias name: mozillacert70.pem
	 SHA1: 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C
	 SHA256: 06:3E:4A:FA:C4:91:DF:D3:32:F3:08:9B:85:42:E9:46:17:D8:93:D7:FE:94:4E:10:A7:93:7E:E2:9D:96:93:C0
Alias name: mozillacert71.pem
	 SHA1: 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C
	 SHA256: 13:63:35:43:93:34:A7:69:80:16:A0:D3:24:DE:72:28:4E:07:9D:7B:52:20:BB:8F:BD:74:78:16:EE:BE:BA:CA
Alias name: mozillacert72.pem
	 SHA1: 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B
	 SHA256: 45:14:0B:32:47:EB:9C:C8:C5:B4:F0:D7:B5:30:91:F7:32:92:08:9E:6E:5A:63:E2:74:9D:D3:AC:A9:19:8E:DA
Alias name: mozillacert73.pem
	 SHA1: B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E
	 SHA256: 2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5
Alias name: mozillacert74.pem
	 SHA1: 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F
	 SHA256: 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5
Alias name: mozillacert75.pem
	 SHA1: D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A
	 SHA256: 08:29:7A:40:47:DB:A2:36:80:C7:31:DB:6E:31:76:53:CA:78:48:E1:BE:BD:3A:0B:01:79:A7:07:F9:2C:F1:78
Alias name: mozillacert76.pem
	 SHA1: F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7
	 SHA256: 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7
Alias name: mozillacert77.pem
	 SHA1: 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
	 SHA256: EB:04:CF:5E:B1:F3:9A:FA:76:2F:2B:B1:20:F2:96:CB:A5:20:C1:B9:7D:B1:58:95:65:B8:1C:B9:A1:7B:72:44
Alias name: mozillacert78.pem
	 SHA1: 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F
	 SHA256: 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0:B4:1B
Alias name: mozillacert79.pem
	 SHA1: D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27
	 SHA256: 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A
Alias name: mozillacert8.pem
	 SHA1: 3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F
	 SHA256: C7:66:A9:BE:F2:D4:07:1C:86:3A:31:AA:49:20:E8:13:B2:D1:98:60:8C:B7:B7:CF:E2:11:43:B8:36:DF:09:EA
Alias name: mozillacert80.pem
	 SHA1: B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB
	 SHA256: BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
Alias name: mozillacert81.pem
	 SHA1: 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E
	 SHA256: 5C:58:46:8D:55:F5:8E:49:7E:74:39:82:D2:B5:00:10:B6:D1:65:37:4A:CF:83:A7:D4:A3:2D:B7:68:C4:40:8E
Alias name: mozillacert82.pem
	 SHA1: 2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3
	 SHA256: FC:BF:E2:88:62:06:F7:2B:27:59:3C:8B:07:02:97:E1:2D:76:9E:D1:0E:D7:93:07:05:A8:09:8E:FF:C1:4D:17
Alias name: mozillacert83.pem
	 SHA1: A0:73:E5:C5:BD:43:61:0D:86:4C:21:13:0A:85:58:57:CC:9C:EA:46
	 SHA256: 8C:4E:DF:D0:43:48:F3:22:96:9E:7E:29:A4:CD:4D:CA:00:46:55:06:1C:16:E1:B0:76:42:2E:F3:42:AD:63:0E
Alias name: mozillacert84.pem
	 SHA1: D3:C0:63:F2:19:ED:07:3E:34:AD:5D:75:0B:32:76:29:FF:D5:9A:F2
	 SHA256: 79:3C:BF:45:59:B9:FD:E3:8A:B2:2D:F1:68:69:F6:98:81:AE:14:C4:B0:13:9A:C7:88:A7:8A:1A:FC:CA:02:FB
Alias name: mozillacert85.pem
	 SHA1: CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48
	 SHA256: BF:D8:8F:E1:10:1C:41:AE:3E:80:1B:F8:BE:56:35:0E:E9:BA:D1:A6:B9:BD:51:5E:DC:5C:6D:5B:87:11:AC:44
Alias name: mozillacert86.pem
	 SHA1: 74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2
	 SHA256: E7:68:56:34:EF:AC:F6:9A:CE:93:9A:6B:25:5B:7B:4F:AB:EF:42:93:5B:50:A2:65:AC:B5:CB:60:27:E4:4E:70
Alias name: mozillacert87.pem
	 SHA1: 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74
	 SHA256: 51:3B:2C:EC:B8:10:D4:CD:E5:DD:85:39:1A:DF:C6:C2:DD:60:D8:7B:B7:36:D2:B5:21:48:4A:A4:7A:0E:BE:F6
Alias name: mozillacert88.pem
	 SHA1: FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D
	 SHA256: BC:10:4F:15:A4:8B:E7:09:DC:A5:42:A7:E1:D4:B9:DF:6F:05:45:27:E8:02:EA:A9:2D:59:54:44:25:8A:FE:71
Alias name: mozillacert89.pem
	 SHA1: C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D
	 SHA256: E3:89:36:0D:0F:DB:AE:B3:D2:50:58:4B:47:30:31:4E:22:2F:39:C1:56:A0:20:14:4E:8D:96:05:61:79:15:06
Alias name: mozillacert9.pem
	 SHA1: F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9
	 SHA256: 76:00:29:5E:EF:E8:5B:9E:1F:D6:24:DB:76:06:2A:AA:AE:59:81:8A:54:D2:77:4C:D4:C0:B2:C0:11:31:E1:B3
Alias name: mozillacert90.pem
	 SHA1: F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC
	 SHA256: 55:92:60:84:EC:96:3A:64:B9:6E:2A:BE:01:CE:0B:A8:6A:64:FB:FE:BC:C7:AA:B5:AF:C1:55:B3:7F:D7:60:66
Alias name: mozillacert91.pem
	 SHA1: 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04
	 SHA256: C1:B4:82:99:AB:A5:20:8F:E9:63:0A:CE:55:CA:68:A0:3E:DA:5A:51:9C:88:02:A0:D3:A6:73:BE:8F:8E:55:7D
Alias name: mozillacert92.pem
	 SHA1: A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0
	 SHA256: E1:78:90:EE:09:A3:FB:F4:F4:8B:9C:41:4A:17:D6:37:B7:A5:06:47:E9:BC:75:23:22:72:7F:CC:17:42:A9:11
Alias name: mozillacert93.pem
	 SHA1: 31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17
	 SHA256: C7:BA:65:67:DE:93:A7:98:AE:1F:AA:79:1E:71:2D:37:8F:AE:1F:93:C4:39:7F:EA:44:1B:B7:CB:E6:FD:59:95
Alias name: mozillacert94.pem
	 SHA1: 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99
	 SHA256: 9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48
Alias name: mozillacert95.pem
	 SHA1: DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57
	 SHA256: ED:F7:EB:BC:A2:7A:2A:38:4D:38:7B:7D:40:10:C6:66:E2:ED:B4:84:3E:4C:29:B4:AE:1D:5B:93:32:E6:B2:4D
Alias name: mozillacert96.pem
	 SHA1: 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1
	 SHA256: FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD
Alias name: mozillacert97.pem
	 SHA1: 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F
	 SHA256: 83:CE:3C:12:29:68:8A:59:3D:48:5F:81:97:3C:0F:91:95:43:1E:DA:37:CC:5E:36:43:0E:79:C7:A8:88:63:8B
Alias name: mozillacert98.pem
	 SHA1: C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7
	 SHA256: 3E:84:BA:43:42:90:85:16:E7:75:73:C0:99:2F:09:79:CA:08:4E:46:85:68:1F:F1:95:CC:BA:8A:22:9B:8A:76
Alias name: mozillacert99.pem
	 SHA1: F1:7F:6F:B6:31:DC:99:E3:A3:C8:7F:FE:1C:F1:81:10:88:D9:60:33
	 SHA256: 97:8C:D9:66:F2:FA:A0:7B:A7:AA:95:00:D9:C0:2E:9D:77:F2:CD:AD:A6:AD:6B:A7:4A:F4:B9:1C:66:59:3C:50
Alias name: netlockaranyclassgoldfotanusitvany
	 SHA1: 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91
	 SHA256: 6C:61:DA:C3:A2:DE:F0:31:50:6B:E0:36:D2:A6:FE:40:19:94:FB:D1:3D:F9:C8:D4:66:59:92:74:C4:46:EC:98
Alias name: networksolutionscertificateauthority
	 SHA1: 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE
	 SHA256: 15:F0:BA:00:A3:AC:7A:F3:AC:88:4C:07:2B:10:11:A0:77:BD:77:C0:97:F4:01:64:B2:F8:59:8A:BD:83:86:0C
Alias name: oistewisekeyglobalrootgaca
	 SHA1: 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9
	 SHA256: 41:C9:23:86:6A:B4:CA:D6:B7:AD:57:80:81:58:2E:02:07:97:A6:CB:DF:4F:FF:78:CE:83:96:B3:89:37:D7:F5
Alias name: oistewisekeyglobalrootgbca
	 SHA1: 0F:F9:40:76:18:D3:D7:6A:4B:98:F0:A8:35:9E:0C:FD:27:AC:CC:ED
	 SHA256: 6B:9C:08:E8:6E:B0:F7:67:CF:AD:65:CD:98:B6:21:49:E5:49:4A:67:F5:84:5E:7B:D1:ED:01:9F:27:B8:6B:D6
Alias name: oistewisekeyglobalrootgcca
	 SHA1: E0:11:84:5E:34:DE:BE:88:81:B9:9C:F6:16:26:D1:96:1F:C3:B9:31
	 SHA256: 85:60:F9:1C:36:24:DA:BA:95:70:B5:FE:A0:DB:E3:6F:F1:1A:83:23:BE:94:86:85:4F:B3:F3:4A:55:71:19:8D
Alias name: quovadisrootca
	 SHA1: DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9
	 SHA256: A4:5E:DE:3B:BB:F0:9C:8A:E1:5C:72:EF:C0:72:68:D6:93:A2:1C:99:6F:D5:1E:67:CA:07:94:60:FD:6D:88:73
Alias name: quovadisrootca1g3
	 SHA1: 1B:8E:EA:57:96:29:1A:C9:39:EA:B8:0A:81:1A:73:73:C0:93:79:67
	 SHA256: 8A:86:6F:D1:B2:76:B5:7E:57:8E:92:1C:65:82:8A:2B:ED:58:E9:F2:F2:88:05:41:34:B7:F1:F4:BF:C9:CC:74
Alias name: quovadisrootca2
	 SHA1: CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7
	 SHA256: 85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86
Alias name: quovadisrootca2g3
	 SHA1: 09:3C:61:F3:8B:8B:DC:7D:55:DF:75:38:02:05:00:E1:25:F5:C8:36
	 SHA256: 8F:E4:FB:0A:F9:3A:4D:0D:67:DB:0B:EB:B2:3E:37:C7:1B:F3:25:DC:BC:DD:24:0E:A0:4D:AF:58:B4:7E:18:40
Alias name: quovadisrootca3
	 SHA1: 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85
	 SHA256: 18:F1:FC:7F:20:5D:F8:AD:DD:EB:7F:E0:07:DD:57:E3:AF:37:5A:9C:4D:8D:73:54:6B:F4:F1:FE:D1:E1:8D:35
Alias name: quovadisrootca3g3
	 SHA1: 48:12:BD:92:3C:A8:C4:39:06:E7:30:6D:27:96:E6:A4:CF:22:2E:7D
	 SHA256: 88:EF:81:DE:20:2E:B0:18:45:2E:43:F8:64:72:5C:EA:5F:BD:1F:C2:D9:D2:05:73:07:09:C5:D8:B8:69:0F:46
Alias name: secomevrootca1
	 SHA1: FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D
	 SHA256: A2:2D:BA:68:1E:97:37:6E:2D:39:7D:72:8A:AE:3A:9B:62:96:B9:FD:BA:60:BC:2E:11:F6:47:F2:C6:75:FB:37
Alias name: secomscrootca1
	 SHA1: 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7
	 SHA256: E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C
Alias name: secomscrootca2
	 SHA1: 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74
	 SHA256: 51:3B:2C:EC:B8:10:D4:CD:E5:DD:85:39:1A:DF:C6:C2:DD:60:D8:7B:B7:36:D2:B5:21:48:4A:A4:7A:0E:BE:F6
Alias name: secomvalicertclass1ca
	 SHA1: E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E
	 SHA256: F4:C1:49:55:1A:30:13:A3:5B:C7:BF:FE:17:A7:F3:44:9B:C1:AB:5B:5A:0A:E7:4B:06:C2:3B:90:00:4C:01:04
Alias name: secureglobalca
	 SHA1: 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B
	 SHA256: 42:00:F5:04:3A:C8:59:0E:BB:52:7D:20:9E:D1:50:30:29:FB:CB:D4:1C:A1:B5:06:EC:27:F1:5A:DE:7D:AC:69
Alias name: securesignrootca11
	 SHA1: 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3
	 SHA256: BF:0F:EE:FB:9E:3A:58:1A:D5:F9:E9:DB:75:89:98:57:43:D2:61:08:5C:4D:31:4F:6F:5D:72:59:AA:42:16:12
Alias name: securetrustca
	 SHA1: 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11
	 SHA256: F1:C1:B5:0A:E5:A2:0D:D8:03:0E:C9:F6:BC:24:82:3D:D3:67:B5:25:57:59:B4:E7:1B:61:FC:E9:F7:37:5D:73
Alias name: securitycommunicationrootca
	 SHA1: 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7
	 SHA256: E7:5E:72:ED:9F:56:0E:EC:6E:B4:80:00:73:A4:3F:C3:AD:19:19:5A:39:22:82:01:78:95:97:4A:99:02:6B:6C
Alias name: securitycommunicationrootca2
	 SHA1: 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74
	 SHA256: 51:3B:2C:EC:B8:10:D4:CD:E5:DD:85:39:1A:DF:C6:C2:DD:60:D8:7B:B7:36:D2:B5:21:48:4A:A4:7A:0E:BE:F6
Alias name: soneraclass1ca
	 SHA1: 07:47:22:01:99:CE:74:B9:7C:B0:3D:79:B2:64:A2:C8:55:E9:33:FF
	 SHA256: CD:80:82:84:CF:74:6F:F2:FD:6E:B5:8A:A1:D5:9C:4A:D4:B3:CA:56:FD:C6:27:4A:89:26:A7:83:5F:32:31:3D
Alias name: soneraclass2ca
	 SHA1: 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27
	 SHA256: 79:08:B4:03:14:C1:38:10:0B:51:8D:07:35:80:7F:FB:FC:F8:51:8A:00:95:33:71:05:BA:38:6B:15:3D:D9:27
Alias name: soneraclass2rootca
	 SHA1: 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27
	 SHA256: 79:08:B4:03:14:C1:38:10:0B:51:8D:07:35:80:7F:FB:FC:F8:51:8A:00:95:33:71:05:BA:38:6B:15:3D:D9:27
Alias name: sslcomevrootcertificationauthorityecc
	 SHA1: 4C:DD:51:A3:D1:F5:20:32:14:B0:C6:C5:32:23:03:91:C7:46:42:6D
	 SHA256: 22:A2:C1:F7:BD:ED:70:4C:C1:E7:01:B5:F4:08:C3:10:88:0F:E9:56:B5:DE:2A:4A:44:F9:9C:87:3A:25:A7:C8
Alias name: sslcomevrootcertificationauthorityrsar2
	 SHA1: 74:3A:F0:52:9B:D0:32:A0:F4:4A:83:CD:D4:BA:A9:7B:7C:2E:C4:9A
	 SHA256: 2E:7B:F1:6C:C2:24:85:A7:BB:E2:AA:86:96:75:07:61:B0:AE:39:BE:3B:2F:E9:D0:CC:6D:4E:F7:34:91:42:5C
Alias name: sslcomrootcertificationauthorityecc
	 SHA1: C3:19:7C:39:24:E6:54:AF:1B:C4:AB:20:95:7A:E2:C3:0E:13:02:6A
	 SHA256: 34:17:BB:06:CC:60:07:DA:1B:96:1C:92:0B:8A:B4:CE:3F:AD:82:0E:4A:A3:0B:9A:CB:C4:A7:4E:BD:CE:BC:65
Alias name: sslcomrootcertificationauthorityrsa
	 SHA1: B7:AB:33:08:D1:EA:44:77:BA:14:80:12:5A:6F:BD:A9:36:49:0C:BB
	 SHA256: 85:66:6A:56:2E:E0:BE:5C:E9:25:C1:D8:89:0A:6F:76:A8:7E:C1:6D:4D:7D:5F:29:EA:74:19:CF:20:12:3B:69
Alias name: staatdernederlandenevrootca
	 SHA1: 76:E2:7E:C1:4F:DB:82:C1:C0:A6:75:B5:05:BE:3D:29:B4:ED:DB:BB
	 SHA256: 4D:24:91:41:4C:FE:95:67:46:EC:4C:EF:A6:CF:6F:72:E2:8A:13:29:43:2F:9D:8A:90:7A:C4:CB:5D:AD:C1:5A
Alias name: staatdernederlandenrootcag3
	 SHA1: D8:EB:6B:41:51:92:59:E0:F3:E7:85:00:C0:3D:B6:88:97:C9:EE:FC
	 SHA256: 3C:4F:B0:B9:5A:B8:B3:00:32:F4:32:B8:6F:53:5F:E1:72:C1:85:D0:FD:39:86:58:37:CF:36:18:7F:A6:F4:28
Alias name: starfieldclass2ca
	 SHA1: AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A
	 SHA256: 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58
Alias name: starfieldrootcertificateauthorityg2
	 SHA1: B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E
	 SHA256: 2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5
Alias name: starfieldrootg2ca
	 SHA1: B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E
	 SHA256: 2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5
Alias name: starfieldservicesrootcertificateauthorityg2
	 SHA1: 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F
	 SHA256: 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5
Alias name: starfieldservicesrootg2ca
	 SHA1: 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F
	 SHA256: 56:8D:69:05:A2:C8:87:08:A4:B3:02:51:90:ED:CF:ED:B1:97:4A:60:6A:13:C6:E5:29:0F:CB:2A:E6:3E:DA:B5
Alias name: swisssigngoldcag2
	 SHA1: D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61
	 SHA256: 62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95
Alias name: swisssigngoldg2ca
	 SHA1: D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61
	 SHA256: 62:DD:0B:E9:B9:F5:0A:16:3E:A0:F8:E7:5C:05:3B:1E:CA:57:EA:55:C8:68:8F:64:7C:68:81:F2:C8:35:7B:95
Alias name: swisssignplatinumg2ca
	 SHA1: 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66
	 SHA256: 3B:22:2E:56:67:11:E9:92:30:0D:C0:B1:5A:B9:47:3D:AF:DE:F8:C8:4D:0C:EF:7D:33:17:B4:C1:82:1D:14:36
Alias name: swisssignsilvercag2
	 SHA1: 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB
	 SHA256: BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5
Alias name: swisssignsilverg2ca
	 SHA1: 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB
	 SHA256: BE:6C:4D:A2:BB:B9:BA:59:B6:F3:93:97:68:37:42:46:C3:C0:05:99:3F:A9:8F:02:0D:1D:ED:BE:D4:8A:81:D5
Alias name: szafirrootca2
	 SHA1: E2:52:FA:95:3F:ED:DB:24:60:BD:6E:28:F3:9C:CC:CF:5E:B3:3F:DE
	 SHA256: A1:33:9D:33:28:1A:0B:56:E5:57:D3:D3:2B:1C:E7:F9:36:7E:B0:94:BD:5F:A7:2A:7E:50:04:C8:DE:D7:CA:FE
Alias name: teliasonerarootcav1
	 SHA1: 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37
	 SHA256: DD:69:36:FE:21:F8:F0:77:C1:23:A1:A5:21:C1:22:24:F7:22:55:B7:3E:03:A7:26:06:93:E8:A2:4B:0F:A3:89
Alias name: thawtepersonalfreemailca
	 SHA1: E6:18:83:AE:84:CA:C1:C1:CD:52:AD:E8:E9:25:2B:45:A6:4F:B7:E2
	 SHA256: 5B:38:BD:12:9E:83:D5:A0:CA:D2:39:21:08:94:90:D5:0D:4A:AE:37:04:28:F8:DD:FF:FF:FA:4C:15:64:E1:84
Alias name: thawtepremiumserverca
	 SHA1: E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66
	 SHA256: 3F:9F:27:D5:83:20:4B:9E:09:C8:A3:D2:06:6C:4B:57:D3:A2:47:9C:36:93:65:08:80:50:56:98:10:5D:BC:E9
Alias name: thawteprimaryrootca
	 SHA1: 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81
	 SHA256: 8D:72:2F:81:A9:C1:13:C0:79:1D:F1:36:A2:96:6D:B2:6C:95:0A:97:1D:B4:6B:41:99:F4:EA:54:B7:8B:FB:9F
Alias name: thawteprimaryrootcag2
	 SHA1: AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12
	 SHA256: A4:31:0D:50:AF:18:A6:44:71:90:37:2A:86:AF:AF:8B:95:1F:FB:43:1D:83:7F:1E:56:88:B4:59:71:ED:15:57
Alias name: thawteprimaryrootcag3
	 SHA1: F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2
	 SHA256: 4B:03:F4:58:07:AD:70:F2:1B:FC:2C:AE:71:C9:FD:E4:60:4C:06:4C:F5:FF:B6:86:BA:E5:DB:AA:D7:FD:D3:4C
Alias name: thawteserverca
	 SHA1: 9F:AD:91:A6:CE:6A:C6:C5:00:47:C4:4E:C9:D4:A5:0D:92:D8:49:79
	 SHA256: 87:C6:78:BF:B8:B2:5F:38:F7:E9:7B:33:69:56:BB:CF:14:4B:BA:CA:A5:36:47:E6:1A:23:25:BC:10:55:31:6B
Alias name: trustcenterclass2caii
	 SHA1: AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E
	 SHA256: E6:B8:F8:76:64:85:F8:07:AE:7F:8D:AC:16:70:46:1F:07:C0:A1:3E:EF:3A:1F:F7:17:53:8D:7A:BA:D3:91:B4
Alias name: trustcenterclass4caii
	 SHA1: A6:9A:91:FD:05:7F:13:6A:42:63:0B:B1:76:0D:2D:51:12:0C:16:50
	 SHA256: 32:66:96:7E:59:CD:68:00:8D:9D:D3:20:81:11:85:C7:04:20:5E:8D:95:FD:D8:4F:1C:7B:31:1E:67:04:FC:32
Alias name: trustcenteruniversalcai
	 SHA1: 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3
	 SHA256: EB:F3:C0:2A:87:89:B1:FB:7D:51:19:95:D6:63:B7:29:06:D9:13:CE:0D:5E:10:56:8A:8A:77:E2:58:61:67:E7
Alias name: trustcoreca1
	 SHA1: 58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD
	 SHA256: 5A:88:5D:B1:9C:01:D9:12:C5:75:93:88:93:8C:AF:BB:DF:03:1A:B2:D4:8E:91:EE:15:58:9B:42:97:1D:03:9C
Alias name: trustcorrootcertca1
	 SHA1: FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A
	 SHA256: D4:0E:9C:86:CD:8F:E4:68:C1:77:69:59:F4:9E:A7:74:FA:54:86:84:B6:C4:06:F3:90:92:61:F4:DC:E2:57:5C
Alias name: trustcorrootcertca2
	 SHA1: B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0
	 SHA256: 07:53:E9:40:37:8C:1B:D5:E3:83:6E:39:5D:AE:A5:CB:83:9E:50:46:F1:BD:0E:AE:19:51:CF:10:FE:C7:C9:65
Alias name: trustisfpsrootca
	 SHA1: 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04
	 SHA256: C1:B4:82:99:AB:A5:20:8F:E9:63:0A:CE:55:CA:68:A0:3E:DA:5A:51:9C:88:02:A0:D3:A6:73:BE:8F:8E:55:7D
Alias name: ttelesecglobalrootclass2
	 SHA1: 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
	 SHA256: 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52
Alias name: ttelesecglobalrootclass2ca
	 SHA1: 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9
	 SHA256: 91:E2:F5:78:8D:58:10:EB:A7:BA:58:73:7D:E1:54:8A:8E:CA:CD:01:45:98:BC:0B:14:3E:04:1B:17:05:25:52
Alias name: ttelesecglobalrootclass3
	 SHA1: 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1
	 SHA256: FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD
Alias name: ttelesecglobalrootclass3ca
	 SHA1: 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1
	 SHA256: FD:73:DA:D3:1C:64:4F:F1:B4:3B:EF:0C:CD:DA:96:71:0B:9C:D9:87:5E:CA:7E:31:70:7A:F3:E9:6D:52:2B:BD
Alias name: tubitakkamusmsslkoksertifikasisurum1
	 SHA1: 31:43:64:9B:EC:CE:27:EC:ED:3A:3F:0B:8F:0D:E4:E8:91:DD:EE:CA
	 SHA256: 46:ED:C3:68:90:46:D5:3A:45:3F:B3:10:4A:B8:0D:CA:EC:65:8B:26:60:EA:16:29:DD:7E:86:79:90:64:87:16
Alias name: twcaglobalrootca
	 SHA1: 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65
	 SHA256: 59:76:90:07:F7:68:5D:0F:CD:50:87:2F:9F:95:D5:75:5A:5B:2B:45:7D:81:F3:69:2B:61:0A:98:67:2F:0E:1B
Alias name: twcarootcertificationauthority
	 SHA1: CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48
	 SHA256: BF:D8:8F:E1:10:1C:41:AE:3E:80:1B:F8:BE:56:35:0E:E9:BA:D1:A6:B9:BD:51:5E:DC:5C:6D:5B:87:11:AC:44
Alias name: ucaextendedvalidationroot
	 SHA1: A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A
	 SHA256: D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24
Alias name: ucaglobalg2root
	 SHA1: 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A
	 SHA256: 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C
Alias name: usertrustecc
	 SHA1: D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0
	 SHA256: 4F:F4:60:D5:4B:9C:86:DA:BF:BC:FC:57:12:E0:40:0D:2B:ED:3F:BC:4D:4F:BD:AA:86:E0:6A:DC:D2:A9:AD:7A
Alias name: usertrustecccertificationauthority
	 SHA1: D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0
	 SHA256: 4F:F4:60:D5:4B:9C:86:DA:BF:BC:FC:57:12:E0:40:0D:2B:ED:3F:BC:4D:4F:BD:AA:86:E0:6A:DC:D2:A9:AD:7A
Alias name: usertrustrsa
	 SHA1: 2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E
	 SHA256: E7:93:C9:B0:2F:D8:AA:13:E2:1C:31:22:8A:CC:B0:81:19:64:3B:74:9C:89:89:64:B1:74:6D:46:C3:D4:CB:D2
Alias name: usertrustrsacertificationauthority
	 SHA1: 2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E
	 SHA256: E7:93:C9:B0:2F:D8:AA:13:E2:1C:31:22:8A:CC:B0:81:19:64:3B:74:9C:89:89:64:B1:74:6D:46:C3:D4:CB:D2
Alias name: utndatacorpsgcca
	 SHA1: 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4
	 SHA256: 85:FB:2F:91:DD:12:27:5A:01:45:B6:36:53:4F:84:02:4A:D6:8B:69:B8:EE:88:68:4F:F7:11:37:58:05:B3:48
Alias name: utnuserfirstclientauthemailca
	 SHA1: B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A
	 SHA256: 43:F2:57:41:2D:44:0D:62:74:76:97:4F:87:7D:A8:F1:FC:24:44:56:5A:36:7A:E6:0E:DD:C2:7A:41:25:31:AE
Alias name: utnuserfirsthardwareca
	 SHA1: 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7
	 SHA256: 6E:A5:47:41:D0:04:66:7E:ED:1B:48:16:63:4A:A3:A7:9E:6E:4B:96:95:0F:82:79:DA:FC:8D:9B:D8:81:21:37
Alias name: utnuserfirstobjectca
	 SHA1: E1:2D:FB:4B:41:D7:D9:C3:2B:30:51:4B:AC:1D:81:D8:38:5E:2D:46
	 SHA256: 6F:FF:78:E4:00:A7:0C:11:01:1C:D8:59:77:C4:59:FB:5A:F9:6A:3D:F0:54:08:20:D0:F4:B8:60:78:75:E5:8F
Alias name: valicertclass2ca
	 SHA1: 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6
	 SHA256: 58:D0:17:27:9C:D4:DC:63:AB:DD:B1:96:A6:C9:90:6C:30:C4:E0:87:83:EA:E8:C1:60:99:54:D6:93:55:59:6B
Alias name: verisignc1g1.pem
	 SHA1: 90:AE:A2:69:85:FF:14:80:4C:43:49:52:EC:E9:60:84:77:AF:55:6F
	 SHA256: D1:7C:D8:EC:D5:86:B7:12:23:8A:48:2C:E4:6F:A5:29:39:70:74:2F:27:6D:8A:B6:A9:E4:6E:E0:28:8F:33:55
Alias name: verisignc1g2.pem
	 SHA1: 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47
	 SHA256: 34:1D:E9:8B:13:92:AB:F7:F4:AB:90:A9:60:CF:25:D4:BD:6E:C6:5B:9A:51:CE:6E:D0:67:D0:0E:C7:CE:9B:7F
Alias name: verisignc1g3.pem
	 SHA1: 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5
	 SHA256: CB:B5:AF:18:5E:94:2A:24:02:F9:EA:CB:C0:ED:5B:B8:76:EE:A3:C1:22:36:23:D0:04:47:E4:F3:BA:55:4B:65
Alias name: verisignc1g6.pem
	 SHA1: 51:7F:61:1E:29:91:6B:53:82:FB:72:E7:44:D9:8D:C3:CC:53:6D:64
	 SHA256: 9D:19:0B:2E:31:45:66:68:5B:E8:A8:89:E2:7A:A8:C7:D7:AE:1D:8A:AD:DB:A3:C1:EC:F9:D2:48:63:CD:34:B9
Alias name: verisignc2g1.pem
	 SHA1: 67:82:AA:E0:ED:EE:E2:1A:58:39:D3:C0:CD:14:68:0A:4F:60:14:2A
	 SHA256: BD:46:9F:F4:5F:AA:E7:C5:4C:CB:D6:9D:3F:3B:00:22:55:D9:B0:6B:10:B1:D0:FA:38:8B:F9:6B:91:8B:2C:E9
Alias name: verisignc2g2.pem
	 SHA1: B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
	 SHA256: 3A:43:E2:20:FE:7F:3E:A9:65:3D:1E:21:74:2E:AC:2B:75:C2:0F:D8:98:03:05:BC:50:2C:AF:8C:2D:9B:41:A1
Alias name: verisignc2g3.pem
	 SHA1: 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11
	 SHA256: 92:A9:D9:83:3F:E1:94:4D:B3:66:E8:BF:AE:7A:95:B6:48:0C:2D:6C:6C:2A:1B:E6:5D:42:36:B6:08:FC:A1:BB
Alias name: verisignc2g6.pem
	 SHA1: 40:B3:31:A0:E9:BF:E8:55:BC:39:93:CA:70:4F:4E:C2:51:D4:1D:8F
	 SHA256: CB:62:7D:18:B5:8A:D5:6D:DE:33:1A:30:45:6B:C6:5C:60:1A:4E:9B:18:DE:DC:EA:08:E7:DA:AA:07:81:5F:F0
Alias name: verisignc3g1.pem
	 SHA1: A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B
	 SHA256: A4:B6:B3:99:6F:C2:F3:06:B3:FD:86:81:BD:63:41:3D:8C:50:09:CC:4F:A3:29:C2:CC:F0:E2:FA:1B:14:03:05
Alias name: verisignc3g2.pem
	 SHA1: 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F
	 SHA256: 83:CE:3C:12:29:68:8A:59:3D:48:5F:81:97:3C:0F:91:95:43:1E:DA:37:CC:5E:36:43:0E:79:C7:A8:88:63:8B
Alias name: verisignc3g3.pem
	 SHA1: 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
	 SHA256: EB:04:CF:5E:B1:F3:9A:FA:76:2F:2B:B1:20:F2:96:CB:A5:20:C1:B9:7D:B1:58:95:65:B8:1C:B9:A1:7B:72:44
Alias name: verisignc3g4.pem
	 SHA1: 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A
	 SHA256: 69:DD:D7:EA:90:BB:57:C9:3E:13:5D:C8:5E:A6:FC:D5:48:0B:60:32:39:BD:C4:54:FC:75:8B:2A:26:CF:7F:79
Alias name: verisignc3g5.pem
	 SHA1: 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5
	 SHA256: 9A:CF:AB:7E:43:C8:D8:80:D0:6B:26:2A:94:DE:EE:E4:B4:65:99:89:C3:D0:CA:F1:9B:AF:64:05:E4:1A:B7:DF
Alias name: verisignc4g2.pem
	 SHA1: 0B:77:BE:BB:CB:7A:A2:47:05:DE:CC:0F:BD:6A:02:FC:7A:BD:9B:52
	 SHA256: 44:64:0A:0A:0E:4D:00:0F:BD:57:4D:2B:8A:07:BD:B4:D1:DF:ED:3B:45:BA:AB:A7:6F:78:57:78:C7:01:19:61
Alias name: verisignc4g3.pem
	 SHA1: C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D
	 SHA256: E3:89:36:0D:0F:DB:AE:B3:D2:50:58:4B:47:30:31:4E:22:2F:39:C1:56:A0:20:14:4E:8D:96:05:61:79:15:06
Alias name: verisignclass1ca
	 SHA1: CE:6A:64:A3:09:E4:2F:BB:D9:85:1C:45:3E:64:09:EA:E8:7D:60:F1
	 SHA256: 51:84:7C:8C:BD:2E:9A:72:C9:1E:29:2D:2A:E2:47:D7:DE:1E:3F:D2:70:54:7A:20:EF:7D:61:0F:38:B8:84:2C
Alias name: verisignclass1g2ca
	 SHA1: 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47
	 SHA256: 34:1D:E9:8B:13:92:AB:F7:F4:AB:90:A9:60:CF:25:D4:BD:6E:C6:5B:9A:51:CE:6E:D0:67:D0:0E:C7:CE:9B:7F
Alias name: verisignclass1g3ca
	 SHA1: 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5
	 SHA256: CB:B5:AF:18:5E:94:2A:24:02:F9:EA:CB:C0:ED:5B:B8:76:EE:A3:C1:22:36:23:D0:04:47:E4:F3:BA:55:4B:65
Alias name: verisignclass2g2ca
	 SHA1: B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
	 SHA256: 3A:43:E2:20:FE:7F:3E:A9:65:3D:1E:21:74:2E:AC:2B:75:C2:0F:D8:98:03:05:BC:50:2C:AF:8C:2D:9B:41:A1
Alias name: verisignclass2g3ca
	 SHA1: 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11
	 SHA256: 92:A9:D9:83:3F:E1:94:4D:B3:66:E8:BF:AE:7A:95:B6:48:0C:2D:6C:6C:2A:1B:E6:5D:42:36:B6:08:FC:A1:BB
Alias name: verisignclass3ca
	 SHA1: A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B
	 SHA256: A4:B6:B3:99:6F:C2:F3:06:B3:FD:86:81:BD:63:41:3D:8C:50:09:CC:4F:A3:29:C2:CC:F0:E2:FA:1B:14:03:05
Alias name: verisignclass3g2ca
	 SHA1: 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F
	 SHA256: 83:CE:3C:12:29:68:8A:59:3D:48:5F:81:97:3C:0F:91:95:43:1E:DA:37:CC:5E:36:43:0E:79:C7:A8:88:63:8B
Alias name: verisignclass3g3ca
	 SHA1: 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6
	 SHA256: EB:04:CF:5E:B1:F3:9A:FA:76:2F:2B:B1:20:F2:96:CB:A5:20:C1:B9:7D:B1:58:95:65:B8:1C:B9:A1:7B:72:44
Alias name: verisignclass3g4ca
	 SHA1: 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A
	 SHA256: 69:DD:D7:EA:90:BB:57:C9:3E:13:5D:C8:5E:A6:FC:D5:48:0B:60:32:39:BD:C4:54:FC:75:8B:2A:26:CF:7F:79
Alias name: verisignclass3g5ca
	 SHA1: 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5
	 SHA256: 9A:CF:AB:7E:43:C8:D8:80:D0:6B:26:2A:94:DE:EE:E4:B4:65:99:89:C3:D0:CA:F1:9B:AF:64:05:E4:1A:B7:DF
Alias name: verisignclass3publicprimarycertificationauthorityg4
	 SHA1: 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A
	 SHA256: 69:DD:D7:EA:90:BB:57:C9:3E:13:5D:C8:5E:A6:FC:D5:48:0B:60:32:39:BD:C4:54:FC:75:8B:2A:26:CF:7F:79
Alias name: verisignclass3publicprimarycertificationauthorityg5
	 SHA1: 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5
	 SHA256: 9A:CF:AB:7E:43:C8:D8:80:D0:6B:26:2A:94:DE:EE:E4:B4:65:99:89:C3:D0:CA:F1:9B:AF:64:05:E4:1A:B7:DF
Alias name: verisignroot.pem
	 SHA1: 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54
	 SHA256: 23:99:56:11:27:A5:71:25:DE:8C:EF:EA:61:0D:DF:2F:A0:78:B5:C8:06:7F:4E:82:82:90:BF:B8:60:E8:4B:3C
Alias name: verisigntsaca
	 SHA1: 20:CE:B1:F0:F5:1C:0E:19:A9:F3:8D:B1:AA:8E:03:8C:AA:7A:C7:01
	 SHA256: CB:6B:05:D9:E8:E5:7C:D8:82:B1:0B:4D:B7:0D:E4:BB:1D:E4:2B:A4:8A:7B:D0:31:8B:63:5B:F6:E7:78:1A:9D
Alias name: verisignuniversalrootca
	 SHA1: 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54
	 SHA256: 23:99:56:11:27:A5:71:25:DE:8C:EF:EA:61:0D:DF:2F:A0:78:B5:C8:06:7F:4E:82:82:90:BF:B8:60:E8:4B:3C
Alias name: verisignuniversalrootcertificationauthority
	 SHA1: 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54
	 SHA256: 23:99:56:11:27:A5:71:25:DE:8C:EF:EA:61:0D:DF:2F:A0:78:B5:C8:06:7F:4E:82:82:90:BF:B8:60:E8:4B:3C
Alias name: xrampglobalca
	 SHA1: B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6
	 SHA256: CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2
Alias name: xrampglobalcaroot
	 SHA1: B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6
	 SHA256: CE:CD:DC:90:50:99:D8:DA:DF:C5:B1:D2:09:B7:37:CB:E2:C1:8C:FB:2C:10:C0:FF:0B:CF:0D:32:86:FC:1A:A2
```

# Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway
<a name="apigateway-control-access-aws-waf"></a>

AWS WAF è un firewall per applicazioni Web che aiuta a proteggere le applicazioni Web e APIs dagli attacchi. Consente di configurare un set di regole denominato lista di controllo accessi Web (web ACL) per consentire, bloccare o contare le richieste Web in base a condizioni e regole di sicurezza Web personalizzabili definite dall'utente. Per ulteriori informazioni, consulta [How AWS WAF Works](https://docs.aws.amazon.com/waf/latest/developerguide/how-aws-waf-works.html).

Puoi utilizzarla AWS WAF per proteggere l'API REST di API Gateway da exploit web comuni, come attacchi SQL injection e cross-site scripting (XSS). Questi potrebbero influire sulla disponibilità e sulle prestazioni delle API, compromettere la sicurezza o consumare risorse eccessive. Ad esempio, puoi creare regole per consentire o bloccare richieste da intervalli di indirizzi IP specificati, richieste da blocchi CIDR, richieste provenienti da un paese o una regione specifici, richieste che contengono codice SQL dannoso o richieste contenenti script dannoso. 

È anche possibile creare regole che corrispondono a una stringa specificata o un modello di espressione regolare in intestazioni HTTP, metodo, stringa di query, URI e il corpo della richiesta (entro i primi 64 KB). Inoltre, puoi creare regole per bloccare attacchi da utenti-agenti, bad bot e scraper di contenuti. Ad esempio, puoi usare le regole basate sulla frequenza per specificare il numero di richieste Web consentite da ogni IP client in un periodo di 5 minuti, costantemente aggiornato, finale. 

**Importante**  
AWS WAF è la tua prima linea di difesa contro gli exploit web. Quando AWS WAF è abilitato su un'API, AWS WAF le regole vengono valutate prima di altre funzionalità di controllo degli accessi, come [le policy delle risorse, le policy](apigateway-resource-policies.md) [IAM](permissions.md), gli autorizzatori [Lambda](apigateway-use-lambda-authorizer.md) e gli autorizzatori Amazon [Cognito](apigateway-integrate-with-cognito.md). Ad esempio, se AWS WAF blocca l'accesso da un blocco CIDR consentito da una politica delle risorse, ha la AWS WAF precedenza e la politica delle risorse non viene valutata.

 AWS WAF Per abilitare la tua API, devi fare quanto segue:

1. Usa la AWS WAF console, l' AWS SDK o la CLI per creare un ACL Web che contenga la combinazione desiderata AWS WAF di regole gestite e regole personalizzate. Per ulteriori informazioni, consulta la sezione [Guida introduttiva AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html) e [elenchi di controllo degli accessi Web (](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html)web). ACLs
**Importante**  
API Gateway richiede un ACL AWS WAFV2 web per un'applicazione regionale o un ACL AWS WAF Classic regionale web.

1. Associa l'ACL AWS WAF web a una fase API. Puoi farlo utilizzando la AWS WAF console, l' AWS SDK, la CLI o utilizzando la console API Gateway.

## Per associare un ACL AWS WAF Web a uno stadio API Gateway API utilizzando la console API Gateway
<a name="apigateway-control-access-aws-waf-console"></a>

Per utilizzare la console API Gateway per associare un ACL AWS WAF Web a uno stadio API Gateway API esistente, attenersi alla seguente procedura:

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

1. Seleziona un'API esistente o creane una nuova.

1. Nel riquadro di navigazione principale scegli **Fasi**, quindi seleziona una fase.

1. Nella sezione **Dettagli fase** scegli **Modifica**.

1. In **Web Application Firewall (AWS WAF)**, seleziona l'ACL web.

   Se lo stai utilizzando AWS WAFV2, seleziona un ACL AWS WAFV2 web per un'applicazione regionale. L'ACL web e tutte AWS WAFV2 le altre risorse che utilizza devono trovarsi nella stessa regione dell'API.

   Se lo stai utilizzando AWS WAF Classic regionale, seleziona un ACL web regionale.

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

## Associa un ACL AWS WAF Web a una fase API Gateway utilizzando il AWS CLI
<a name="apigateway-control-access-aws-waf-awscli"></a>

Il [associate-web-acl](https://docs.aws.amazon.com/cli/latest/reference/wafv2/associate-web-acl.html)comando seguente associa un ACL AWS WAFV2 Web per un'applicazione regionale a uno stadio API Gateway API esistente:

```
aws wafv2 associate-web-acl \
--web-acl-arn  arn:aws:wafv2:{region}:111122223333:regional/webacl/test-cli/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
--resource-arn arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod
```

Il [associate-web-acl](https://docs.aws.amazon.com/cli/latest/reference/waf-regional/associate-web-acl.html)comando seguente associa un ACL AWS WAF Classic regionale Web a uno stadio API Gateway API esistente:

```
aws waf-regional associate-web-acl \
--web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \
--resource-arn 'arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'
```

## Associa un ACL AWS WAF web a uno stadio API utilizzando l'API REST AWS WAF
<a name="apigateway-control-access-aws-waf-api"></a>

Per utilizzare l'API AWS WAFV2 REST per associare un ACL AWS WAFV2 Web per un'applicazione regionale a uno stadio API Gateway API esistente, utilizzate il comando [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html), come nell'esempio seguente:

```
import boto3
 
wafv2 = boto3.client('wafv2')

wafv2.associate_web_acl(
    WebACLArn='arn:aws:wafv2:{region}:111122223333:regional/webacl/test/abc6aa3b-fc33-4841-b3db-0ef3d3825b25',
    ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'
)
```

Per utilizzare l'API AWS WAF REST per associare un ACL AWS WAF Classic regionale Web a uno stadio API Gateway API esistente, utilizzate il comando [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_wafRegional_AssociateWebACL.html), come nell'esempio seguente:

```
import boto3
 
waf = boto3.client('waf-regional')
 
waf.associate_web_acl(
    WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf',
    ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'
)
```

# Limita le richieste al tuo REST APIs per una migliore velocità di trasmissione in API Gateway
<a name="api-gateway-request-throttling"></a>

Puoi configurare la limitazione e le quote per evitare che vengano sopraffatti da troppe richieste. APIs Sia le limitazioni che le quote sono applicate sulla base del massimo sforzo e dovrebbero essere considerate come obbiettivi piuttosto che massimali garantiti delle richieste.

API Gateway limita la larghezza di banda della rete delle richieste nell'API mediante l'algoritmo di token bucket, dove un token rappresenta una richiesta. In particolare, API Gateway esamina la frequenza e il numero di richieste inviate rispetto APIs a tutti gli utenti del tuo account, per regione. Nell'algoritmo di bucket token, un picco può consentire il superamento predefinito di tali limiti, ma anche altri fattori possono causare il superamento dei limiti in alcuni casi.

Quando le richieste inviate superano i limiti impostati per il tasso a regime e per i limiti di picco, API Gateway inizia a limitare le richieste. I clienti potrebbero ricevere risposte agli errori `429 Too Many Requests` a questo punto. Quando rileva queste eccezioni, il client può reinviare le richieste non riuscite in modo da limitare la velocità.

In qualità di sviluppatore di API, puoi impostare i limiti target per le singole fasi o metodi dell'API per migliorare le prestazioni complessive di tutto APIs il tuo account. In alternativa, puoi abilitare i piani di utilizzo per impostare limitazioni sugli invii di richieste al client in base a quote e tassi di richiesta specificati.

**Topics**
+ [Come sono applicate le impostazioni del limite del throttling in API Gateway](#apigateway-how-throttling-limits-are-applied)
+ [Limitazione a livello di account per regione](#apig-request-throttling-account-level-limits)
+ [Configurazione del throttling a livello di API e destinazioni delle limitazioni a livello di fase in un piano di utilizzo](#apigateway-api-level-throttling-in-usage-plan)
+ [Configurazione delle destinazioni di limitazione della larghezza di banda della rete a livello di fase](#apigateway-stage-level-throttling)
+ [Configurazione delle destinazioni della limitazione a livello di metodo in un piano di utilizzo](#apigateway-method-level-throttling-in-usage-plan)

## Come sono applicate le impostazioni del limite del throttling in API Gateway
<a name="apigateway-how-throttling-limits-are-applied"></a>

Prima di configurare le impostazioni di limitazione (della larghezza di banda della rete) e quota per l'API, è utile capire quali sono i tipi di impostazioni relative alla limitazione (della larghezza di banda della rete) e come vengono applicate da Gateway API.

Amazon API Gateway fornisce due tipi base di impostazioni correlate alle impostazioni delle limitazioni:
+ *AWS i limiti di limitazione* vengono applicati a tutti gli account e i clienti di una regione. Queste impostazioni del limite servono a evitare di sovraccaricare l'API, e di conseguenza il tuo account, con troppe richieste. Questi limiti sono stabiliti AWS e non possono essere modificati da un cliente.
+ I limiti per account vengono applicati a tutti i membri APIs di un account in una regione specificata. Il limite di tariffa a livello di account può essere aumentato su richiesta: sono possibili limiti più elevati con APIs timeout più brevi e carichi utili inferiori. Per richiedere un aumento dei limiti di limitazione a livello di account per Regione, contatta il [Centro assistenza AWS](https://console.aws.amazon.com/support/home#/). Per ulteriori informazioni, consulta [Quote Gateway Amazon API](limits.md). Tieni presente che questi limiti non possono essere superiori ai limiti di limitazione. AWS 
+ I limiti di throttling per API e per fase vengono applicati a livello di metodo API per una fase. È possibile configurare le stesse impostazioni per tutti i metodi o configurare impostazioni di throttling diverse per ciascun metodo. Tieni presente che questi limiti non possono essere superiori ai limiti di AWS limitazione.
+ *Limiti di throttling per client* vengono applicati ai client che utilizzano le chiavi API associate al piano di utilizzo come identificatore client. Ricorda che questi limiti non possono essere più alti dei limiti per account.

Le impostazioni correlate alla limitazione (della larghezza di banda della rete) di Gateway API vengono applicate nell'ordine seguente:

1. [Limiti di throttling per metodo o per client](#apigateway-method-level-throttling-in-usage-plan) impostati per una fase API in un [piano di utilizzo](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create)

1. [Limiti di throttling per metodo impostati per una fase API](set-up-stages.md#how-to-stage-settings)

1. [Limitazione a livello di account per regione](#apig-request-throttling-account-level-limits)

1. AWS Limitazione regionale

## Limitazione a livello di account per regione
<a name="apig-request-throttling-account-level-limits"></a>

Per impostazione predefinita, API Gateway limita le richieste allo stato stazionario (RPS) APIs all'interno di un AWS account, per regione. Inoltre, limita il burst (ovvero la dimensione massima del bucket) per tutti gli elementi di un account, per regione APIs . AWS In API Gateway, il limite dei picchi rappresenta il numero massimo di invii di richieste che API Gateway può gestire prima di restituire risposte di errore `429 Too Many Requests`. Per ulteriori informazioni sulla limitazione delle quote, vedere [Quote Gateway Amazon API](limits.md).

## Configurazione del throttling a livello di API e destinazioni delle limitazioni a livello di fase in un piano di utilizzo
<a name="apigateway-api-level-throttling-in-usage-plan"></a>

In un [piano di utilizzo](api-gateway-api-usage-plans.md) puoi impostare una destinazione della limitazione (della larghezza di banda della rete) per tutti i metodi a livello di API o di fase. È possibile specificare *una velocità di limitazione (della larghezza di banda della rete)*ovvero la frequenza, in richieste al secondo, con cui i token vengono aggiunti al bucket di token. È anche possibile specificare un *burst di limitazione (della larghezza di banda della rete)*, ovvero la capacità del bucket di token.

È possibile utilizzare la AWS CLI e creare un Console di gestione AWS piano di utilizzo. SDKs Per ulteriori informazioni su come creare un piano di utilizzo, consulta [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md). 

## Configurazione delle destinazioni di limitazione della larghezza di banda della rete a livello di fase
<a name="apigateway-stage-level-throttling"></a>

È possibile utilizzare la AWS CLI e la Console di gestione AWS per creare obiettivi SDKs di throttling a livello di fase.

Per ulteriori informazioni su come utilizzare per creare obiettivi di limitazione a livello Console di gestione AWS di fase, consulta. [Modifica delle impostazioni di fase](set-up-stages.md#how-to-stage-settings) [Per ulteriori informazioni su come utilizzare la AWS CLI per creare obiettivi di throttling a livello di fase, consulta create-stage.](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html)

## Configurazione delle destinazioni della limitazione a livello di metodo in un piano di utilizzo
<a name="apigateway-method-level-throttling-in-usage-plan"></a>

Puoi impostare destinazioni della limitazione aggiuntive a livello di metodo in **Usage Plans (Piani di utilizzo)** come mostrato in [Creazione di un piano di utilizzo](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create). Nella console API Gateway, questi vengono impostati specificando `Resource=<resource>`, `Method=<method>` nell'impostazione **Configure Method Throttling (Configurazione del throttling)**. [Ad esempio, ad esempio, è possibile specificare,. PetStore](api-gateway-create-api-step-by-step.md) `Resource=/pets` `Method=GET`

# REST privato APIs in API Gateway
<a name="apigateway-private-apis"></a>

Un'API privata è una REST API richiamabile solo all'interno di un VPC Amazon. Puoi accedere all'API utilizzando un [endpoint VPC di interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html), che è un'interfaccia di rete endpoint creata nel VPC. Gli endpoint di interfaccia sono alimentati daAWS PrivateLink, una tecnologia che consente di accedere in modo privato ai AWS servizi utilizzando indirizzi IP privati.

Puoi anche utilizzare Direct Connect per stabilire una connessione da una rete locale ad Amazon VPC e quindi accedere alla tua API privata tramite tale connessione. In ogni caso, il traffico alla tua API privata utilizza connessioni sicure ed è isolato dalla rete Internet pubblica. Il traffico non esce dalla rete Amazon.

## Le migliori pratiche per il settore privato APIs
<a name="apigateway-private-api-best-practices"></a>

Di seguito sono riportate le best practice consigliate per la creazione di un’API privata:
+ Usa un singolo endpoint VPC per accedere a più endpoint privati. APIs In questo modo si riduce il numero di endpoint VPC di cui potresti aver bisogno.
+ Associa il tuo endpoint VPC alla tua API. In questo modo viene creato un record DNS alias di Route 53 e risulta più semplice invocare l'API privata.
+ Attiva il DNS privato per il tuo VPC. Quando attivi il DNS privato per il tuo VPC, puoi invocare l'API all'interno di un VPC senza passare l'intestazione `Host` o `x-apigw-api-id`.

  Se attivi il DNS privato, non puoi accedere all'endpoint predefinito pubblico. APIs Per accedere all'endpoint pubblico predefinito APIs, puoi disattivare il DNS privato, creare una zona ospitata privata per ogni API privata nel tuo VPC e quindi effettuare il provisioning dei record richiesti in Route 53. Questo consente la risoluzione della tua API e ti permette comunque di invocare l'endpoint pubblico predefinito dal tuo VPC. Per ulteriori informazioni consulta [Creating a private hosted zone (Creazione di una zona ospitata privata)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html).
+ Limita l'accesso alla tua API privata a endpoint specifici VPCs o VPC. Aggiungi le condizioni `aws:SourceVpc` o `aws:SourceVpce` alla policy delle risorse dell'API per limitare l'accesso.
+ Per la massima sicurezza del perimetro dati, puoi creare una policy degli endpoint VPC. Questo controlla l'accesso agli endpoint VPC che possono invocare la tua API privata.

## Considerazioni per uso privato APIs
<a name="apigateway-private-api-considerations"></a>

Le seguenti considerazioni potrebbero influire sull'uso del privato: APIs
+ Sono APIs supportati solo REST.
+ Non è possibile convertire un'API privata in un'API ottimizzata per i confini.
+ Il protocollo privato supporta APIs solo TLS 1.2. Le versioni precedenti di TLS non sono supportate.
+ Se si effettua una richiesta utilizzando il protocollo HTTP/2, la richiesta viene forzata a utilizzare il protocollo HTTP/1.1.
+ Non puoi impostare il tipo di indirizzo IP come privato per consentire solo APIs agli IPv4 indirizzi di richiamare la tua API privata. È supportato solo il tipo dualstack. Per ulteriori informazioni, consulta [Tipi di indirizzo IP per REST API in Gateway API](api-gateway-ip-address-type.md).
+ Per inviare il traffico utilizzando l’API privata, è possibile usare tutti i tipi di indirizzo IP supportati da Amazon VPC. Puoi inviare dualstack e IPv6 traffico configurando le impostazioni sul tuo endpoint VPC. Questa configurazione non può essere modificata tramite Gateway API. Per ulteriori informazioni, consulta [Aggiungere IPv6 il supporto per il tuo VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).
+ Gli endpoint VPC per uso privato APIs sono soggetti alle stesse limitazioni degli altri endpoint VPC di interfaccia. *Per ulteriori informazioni, consulta [Accedere a un AWS servizio utilizzando un endpoint VPC di interfaccia nella Guida](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).AWS PrivateLink * *Per ulteriori informazioni sull'utilizzo di API Gateway con sottoreti condivise VPCs e condivise, consulta [Subnet condivise](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#interface-endpoint-shared-subnets) nella Guida.AWS PrivateLink *

## Passaggi successivi per il settore privato APIs
<a name="apigateway-private-api-next-steps"></a>

 Per informazioni su come creare un'API privata e associare un endpoint VPC, consulta [Creazione di un'API privata](apigateway-private-api-create.md). Per seguire un tutorial in cui si creano dipendenze CloudFormation e un'API privata in Console di gestione AWS, vedere[Tutorial: creazione di una REST API privata](private-api-tutorial.md).

# Creazione di un'API privata
<a name="apigateway-private-api-create"></a>

Prima di creare un'API privata, devi creare un endpoint VPC per Gateway API. Quindi devi creare la tua API privata e collegarvi una policy delle risorse. Facoltativamente, puoi associare il tuo endpoint VPC alla tua API privata per semplificare l'invocazione dell'API. Infine, implementa la tua API.

Nelle seguenti procedure viene descritto come effettuare questa operazione. Puoi creare un'API REST privata utilizzando AWS CLI o un AWS SDK. Console di gestione AWS

## Prerequisiti
<a name="apigateway-private-api-create-interface-vpc-prerequisites"></a>

Per eseguire questi passaggi, devi disporre di un VPC completamente configurato. Per informazioni su come creare un VPC, consulta [Creare solo un VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html#create-vpc-only) nella *Guida per l'utente di Amazon VPC*. Per seguire tutti i passaggi consigliati durante la creazione del VPC, abilita il DNS privato. In questo modo puoi invocare la tua API all'interno di un VPC senza dover passare l'host o l'intestazione `x-apigw-api-id`.

Per abilitare il DNS privato, è necessario che gli attributi `enableDnsSupport` e `enableDnsHostnames` del VPC siano impostati su `true`. Per ulteriori informazioni, consulta [DNS Support in Your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) e [Updating DNS Support for Your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating).

## Passaggio 1: creare un endpoint VPC per Gateway API nel VPC
<a name="apigateway-private-api-create-interface-vpc-endpoint"></a>

La procedura seguente descrive come creare un endpoint VPC per Gateway API. Per creare un endpoint VPC per API Gateway, devi specificare il `execute-api` dominio Regione AWS in cui creare l'API privata. Il dominio `execute-api` è il servizio del componente Gateway API per l'esecuzione dell'API.

Quando crei l'endpoint VPC per Gateway API, devi specificare le impostazioni DNS. Se disattivi il DNS privato, puoi accedere all'API solo tramite DNS pubblico. Per ulteriori informazioni, consulta [Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API](#apigateway-private-api-troubleshooting-public-access).

------
#### [ Console di gestione AWS ]

**Per creare un endpoint VPC dell'interfaccia per Gateway API**

1. Accedi Console di gestione AWS e apri la console Amazon VPC all'indirizzo. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Dal riquadro di navigazione, in **Cloud privato virtuale**, scegli **Endpoint**.

1. Seleziona **Crea endpoint**.

1. (Facoltativo) Per **Tag nome**, immetti un nome che consenta di identificare l'endpoint VPC.

1. Per **Service category (Categoria servizio)**, scegli **AWS services**.

1. In **Servizi**, sulla barra di ricerca, inserisci **execute-api**. Quindi, scegli l'endpoint del servizio API Gateway in Regione AWS cui creerai la tua API. Il nome del servizio deve essere simile a `com.amazonaws.us-east-1.execute-api` e il **Tipo** deve essere **Interfaccia**.

1. Per **VPC**, scegliere il VPC in cui si desidera creare l'endpoint.

1. (Facoltativo) Per disattivare **Abilita nome DNS privato**, scegli **Impostazioni aggiuntive** e quindi deseleziona **Abilita nome DNS privato**.

1. In **Sottoreti**, scegli le zone di disponibilità in cui hai creato le interfacce di rete dell'endpoint. Per migliorare la disponibilità della tua API, scegli più sottoreti.

1. In **Security group (Gruppo di sicurezza)**, selezionare il gruppo di sicurezza da associare alle interfacce di rete dell'endpoint VPC.

   Il gruppo di sicurezza scelto deve essere impostato in modo da consentire il traffico HTTPS in entrata sulla porta TCP 443 da un range di IP nel VPC o da un altro gruppo di sicurezza nel tuo VPC.

1. Per **Policy**, esegui una delle seguenti operazioni:
   + Se non hai creato la tua API privata o non desideri configurare una policy personalizzata degli endpoint VPC, scegli **Accesso completo**.
   + Se hai già creato un'API privata e desideri configurare una policy personalizzata degli endpoint VPC, puoi inserire tale policy. Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).

   Puoi aggiornare la policy degli endpoint VPC dopo aver creato l'endpoint VPC. Per ulteriori informazioni, consulta [Update a VPC endpoint policy](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy).

1. Seleziona **Crea endpoint**.

1. Copia l'ID dell'endpoint VPC risultante, poiché potresti utilizzarlo nei passaggi successivi.

------
#### [ AWS CLI ]

Il [create-vpc-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html)comando seguente crea un endpoint VPC:

```
aws ec2 create-vpc-endpoint \
    --vpc-id vpc-1a2b3c4d \
    --vpc-endpoint-type Interface \
    --service-name com.amazonaws.us-east-1.execute-api \
    --subnet-ids subnet-7b16de0c \
    --security-group-id sg-1a2b3c4d
```

Copia l'ID dell'endpoint VPC risultante, poiché potresti utilizzarlo nei passaggi successivi.

------

## Fase 2: creare un'API privata
<a name="apigateway-private-api-create-using-console"></a>

Dopo aver creato l'endpoint VPC, creerai una REST API privata. La procedura seguente mostra come creare un'API privata. 

------
#### [ Console di gestione AWS ]

**Per creare un'API privata**

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

1. Seleziona **Create API** (Crea API).

1. In **API REST**, scegliere **Crea**.

1. In **Nome**, immetti un nome.

1.  (Facoltativo) In **Descrizione**, immetti una descrizione. 

1. Per **Tipo di endpoint API** scegli **Privato**.

1. (Facoltativo) Per l'endpoint **VPC IDs, inserisci un ID endpoint** VPC.

   Se associ un ID endpoint VPC alla tua API privata, puoi invocarla dall'interno del VPC senza sostituire un'intestazione `Host` o passare un `x-apigw-api-id header`. Per ulteriori informazioni, consulta [(Facoltativo) Associazione o dissociazione di un endpoint VPC da una REST API privata](#associate-private-api-with-vpc-endpoint).

1. Per **Tipo di indirizzo IP**, scegli **Dualstack**.

1. Seleziona **Create API** (Crea API).

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Nozioni di base sulla console REST API](getting-started-rest-new-console.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------
#### [ AWS CLI ]

Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente crea un'API privata:

```
aws apigateway create-rest-api \
        --name 'Simple PetStore (AWS CLI, Private)' \
        --description 'Simple private PetStore API' \
        --region us-west-2 \
        --endpoint-configuration '{ "types": ["PRIVATE"], "ipAddressType": "dualstack" }'
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
{
    "createdDate": "2017-10-13T18:41:39Z",
    "description": "Simple private PetStore API",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ],
        "ipAddressType": "dualstack"
    },
    "id": "0qzs2sy7bh",
    "name": "Simple PetStore (AWS CLI, Private)"
}
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------
#### [ SDK JavaScript v3 ]

L'esempio seguente mostra come creare un'API privata utilizzando l' AWS SDK per la JavaScript versione 3:

```
import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway";
const apig = new APIGatewayClient({region:"us-east-1"});

const input = { // CreateRestApiRequest
  name: "Simple PetStore (JavaScript v3 SDK, private)", // required
  description: "Demo private API created using the AWS SDK for JavaScript v3",
  version: "0.00.001",
  endpointConfiguration: { // EndpointConfiguration
    types: [ "PRIVATE"],
  },  
};

export const handler = async (event) => {
const command = new CreateRestApiCommand(input);
try {
  const result = await apig.send(command);
  console.log(result);
} catch (err){
  console.error(err)
 }
};
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
{
  apiKeySource: 'HEADER',
  createdDate: 2024-04-03T17:56:36.000Z,
  description: 'Demo private API created using the AWS SDK for JavaScript v3',
  disableExecuteApiEndpoint: false,
  endpointConfiguration: { types: [ 'PRIVATE' ] },
  id: 'abcd1234',
  name: 'Simple PetStore (JavaScript v3 SDK, private)',
  rootResourceId: 'efg567',
  version: '0.00.001'
}
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------
#### [ Python SDK ]

L'esempio seguente mostra come creare un'API privata utilizzando l' AWS SDK per Python:

```
import json
import boto3
import logging

logger = logging.getLogger()
apig = boto3.client('apigateway')

def lambda_handler(event, context):
    try:
      result = apig.create_rest_api(
      name='Simple PetStore (Python SDK, private)',
      description='Demo private API created using the AWS SDK for Python',
      version='0.00.001',
      endpointConfiguration={
          'types': [
             'PRIVATE',
          ],
      },
      )
    except botocore.exceptions.ClientError as error:
            logger.exception("Couldn't create private API %s.", error)
            raise
    attribute=["id", "name", "description", "createdDate", "version", "apiKeySource", "endpointConfiguration"]
    filtered_data ={key:result[key] for key in attribute}
    result = json.dumps(filtered_data, default=str, sort_keys='true')
    return result
```

In caso di esito positivo, la chiamata restituisce un output simile al seguente:

```
"{\"apiKeySource\": \"HEADER\", \"createdDate\": \"2024-04-03 17:27:05+00:00\", \"description\": \"Demo private API created using the AWS SDK for \", \"endpointConfiguration\": {\"types\": [\"PRIVATE\"]}, \"id\": \"abcd1234\", \"name\": \"Simple PetStore (Python SDK, private)\", \"version\": \"0.00.001\"}"
```

 Dopo aver completato i passaggi precedenti, puoi seguire le istruzioni indicate alla sezione [Tutorial: crea un'API REST utilizzando AWS SDKs o AWS CLI](api-gateway-create-api-cli-sdk.md) per configurare i metodi e le integrazioni per l'API. Per distribuire l'API, segui il passaggio 3 e collega una policy delle risorse all'API. 

------

## Passaggio 3: impostare una policy delle risorse per un'API privata.
<a name="apigateway-private-api-set-up-resource-policy"></a>

La tua attuale API privata è inaccessibile a tutti. VPCs Utilizza una politica delle risorse per concedere a te VPCs e agli endpoint VPC l'accesso ai tuoi endpoint privati. APIs Puoi concedere l'accesso a un endpoint VPC in qualsiasi account. AWS 

La tua policy delle risorse deve contenere le condizioni `aws:SourceVpc` o `aws:SourceVpce` per limitare l'accesso. Ti consigliamo di identificare endpoint specifici VPCs e VPC e di non creare una politica delle risorse che consenta l'accesso a tutti gli endpoint VPCs VPC e a tutti gli endpoint.

La procedura seguente descrive come collegare una policy delle risorse all'API.

------
#### [ Console di gestione AWS ]

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

1. Scegliere una REST API.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Scegli **Crea policy**.

1. Scegli **Seleziona un modello** e quindi **VPC di origine**.

1. Sostituisci `{{vpcID}}` (incluse le parentesi graffe) con l’ID VPC.

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

------
#### [ AWS CLI ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente allega una politica delle risorse a un'API esistente:

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'
```

------

Può essere utile anche controllare quali risorse hanno accesso al tuo endpoint VPC. Per controllare quali risorse hanno accesso all'endpoint VPC, collega una policy di endpoint all'endpoint VPC. Per ulteriori informazioni, consulta [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).

## (Facoltativo) Associazione o dissociazione di un endpoint VPC da una REST API privata
<a name="associate-private-api-with-vpc-endpoint"></a>

Quando si associa un endpoint VPC all'API privata, Gateway API genera un nuovo record DNS alias di Route 53. Puoi usare questo record per richiamare il tuo nome privato APIs proprio come fai con quello pubblico APIs senza sovrascrivere un'`Host`intestazione o passare un'intestazione. `x-apigw-api-id`

L'URL di base generato è nel formato seguente:

```
https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}
```

------
#### [ Associate a VPC endpoint (Console di gestione AWS) ]

Puoi associare un endpoint VPC alla tua API privata durante o dopo la sua creazione. La procedura seguente spiega come associare un endpoint VPC a un'API creata in precedenza. 

**Per associare un endpoint VPC a un'API privata**

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

1. Scegli l'API privata.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Modifica la policy delle risorse per consentire le chiamate dall'endpoint VPC aggiuntivo.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Per endpoint **VPC IDs, seleziona un endpoint** VPC aggiuntivo. IDs

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Dissociate a VPC endpoint (Console di gestione AWS) ]

**Per annullare l'associazione di endpoint VPC da una REST API privata**

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

1. Scegli l'API privata.

1. Nel riquadro di navigazione principale, scegli **Policy delle risorse**.

1. Modifica la policy delle risorse per rimuovere le menzioni dell'endpoint VPC di cui desideri annullare l'associazione all'API privata.

1. Nel riquadro di navigazione principale, scegli **Impostazioni API**.

1. Nella sezione **Dettagli API**, scegli **Modifica**.

1. Per l'**endpoint VPC IDs**, scegli la **X** per dissociare l'endpoint VPC.

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

1. Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Associate a VPC endpoint (AWS CLI) ]

Il [create-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-rest-api.html)comando seguente associa gli endpoint VPC al momento della creazione dell'API:

```
aws apigateway create-rest-api \
    --name Petstore \
    --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ],
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-0393a628149c867ee"
        ]
    },
    "id": "u67n3ov968",
    "createdDate": 1565718256,
    "name": "Petstore"
}
```

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente associa gli endpoint VPC a un'API già creata:

```
aws apigateway update-rest-api \
    --rest-api-id u67n3ov968 \
    --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "name": "Petstore",
    "apiKeySource": "1565718256",
    "tags": {},
    "createdDate": 1565718256,
    "endpointConfiguration": {
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-0393a628149c867ee",
            "vpce-01d622316a7df47f9"
        ],
        "types": [
            "PRIVATE"
        ]
    },
    "id": "u67n3ov968"
}
```

Implementa nuovamente l'API per rendere effettive le modifiche.

------
#### [ Disassociate a VPC endpoint (AWS CLI) ]

Il [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html)comando seguente dissocia un endpoint VPC da un'API privata:

```
aws apigateway update-rest-api \
    --rest-api-id u67n3ov968 \
    --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \
    --region us-west-2
```

L'output sarà simile al seguente:

```
{
    "name": "Petstore",
    "apiKeySource": "1565718256",
    "tags": {},
    "createdDate": 1565718256,
    "endpointConfiguration": {
        "vpcEndpointIds": [
            "vpce-0212a4ababd5b8c3e",
            "vpce-01d622316a7df47f9"
        ],
        "types": [
            "PRIVATE"
        ]
    },
    "id": "u67n3ov968"
}
```

Implementa nuovamente l'API per rendere effettive le modifiche.

------

## Passaggio 4: implementare un'API privata
<a name="apigateway-private-api-deploy-using-console"></a>

Per implementare la tua API, crea un'implementazione API e associala a una fase. La procedura seguente mostra come implementare la tua API privata.

------
#### [ Console di gestione AWS ]

**Per distribuire un'API privata**

1. Scegliere l'API.

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

1. In **Fase**, seleziona **Nuova fase**.

1. Per **Nome fase** immetti il nome di una fase.

1. (Facoltativo) In **Descrizione**, immetti una descrizione.

1. Seleziona **Implementa**.

------
#### [ AWS CLI ]

Il comando [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-deployment.html) seguente implementa un’API privata:

```
aws apigateway create-deployment --rest-api-id a1b2c3 \ 
  --stage-name test \
  --stage-description 'Private API test stage' \
  --description 'First deployment'
```

------

## Risoluzione dei problemi relativi all'API privata
<a name="apigateway-private-api-troubleshooting"></a>

Di seguito sono forniti alcuni consigli per la risoluzione dei problemi relativi a errori e problemi che potrebbero verificarsi durante la creazione di un'API privata.

### Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API
<a name="apigateway-private-api-troubleshooting-public-access"></a>

Durante la creazione del VPC puoi configurare le impostazioni DNS. È consigliabile attivare il DNS privato per il VPC. Se decidi di disattivare il DNS privato, puoi accedere all'API solo tramite DNS pubblico.

Se abiliti il DNS privato, non puoi accedere all'endpoint predefinito di un'API pubblica di Gateway API dal tuo endpoint VPC. Puoi accedere a un'API con un nome di dominio personalizzato.

Se crei un nome di dominio personalizzato regionale utilizzi un record alias di tipo A, mentre se crei un nome di dominio personalizzato ottimizzato per l'edge non ci sono restrizioni per il tipo di record. Puoi accedere a questi server pubblici APIs con il DNS privato abilitato. Per ulteriori informazioni, consulta [Problema: non riesco a connettermi alla mia API pubblica da un endpoint VPC di Gateway API](https://repost.aws/knowledge-center/api-gateway-vpc-connections).

### Problema: la mia API restituisce `{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"}`
<a name="apigateway-private-api-troubleshooting-principal"></a>

Nella politica delle risorse, se imposti il Principal su un AWS principale, come segue:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/developer",
                    "arn:aws:iam::111122223333:role/Admin"
                ]
            },
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/stage/GET/pets"
            ]
        }
    ]
}
```

------

Devi utilizzare l'autorizzazione `AWS_IAM` per ogni metodo dell'API, altrimenti l'API restituirà il messaggio di errore precedente. Per ulteriori indicazioni su come attivare l'autorizzazione `AWS_IAM` per un metodo, consulta [Metodi per REST APIs in API Gateway](how-to-method-settings.md).

### Problema: non riesco a capire se il mio endpoint VPC è associato alla mia API
<a name="apigateway-private-api-troubleshooting-associate-wait-time"></a>

Se associ o dissoci un endpoint VPC dalla tua API privata, devi implementarla nuovamente. Il completamento dell'operazione di aggiornamento potrebbe richiedere alcuni minuti a causa della propagazione DNS. Durante questo periodo, l'API è disponibile, ma la propagazione DNS per il DNS appena generato URLs potrebbe essere ancora in corso. Se dopo alcuni minuti i nuovi dati non URLs vengono risolti nel DNS, ti consigliamo di ridistribuire l'API.

# Nomi di dominio personalizzati per uso privato APIs in API Gateway
<a name="apigateway-private-custom-domains"></a>

Puoi creare un nome di dominio personalizzato per uso privato APIs. Un nome di dominio personalizzato privato consente di fornire un URL più semplice e intuitivo ai chiamanti dell'API. Con un nome di dominio privato personalizzato, puoi ridurre la complessità, configurare le misure di sicurezza durante l'handshake TLS e controllare il ciclo di vita del certificato del tuo nome di dominio utilizzando AWS Certificate Manager (ACM). Per ulteriori informazioni, consulta [Protezione della chiave privata del certificato per il nome di dominio personalizzato](#apigateway-private-custom-domains-secure-certificate-private-key).

I nomi di dominio personalizzati per uso privato APIs non devono essere necessariamente univoci tra più account. È possibile creare `example.private.com` nell'account 111122223333 e nell'account 555555555555, purché il certificato ACM copra il nome di dominio. Per identificare un nome di dominio personalizzato privato, usa l'ARN del nome di dominio personalizzato privato. Questo identificatore è univoco per i nomi di dominio personalizzati privati.

Quando crei un nome di dominio personalizzato privato in Gateway API, sei un *provider di API*. Puoi fornire il tuo nome di dominio personalizzato privato ad altri Account AWS utilizzando API Gateway o AWS Resource Access Manager (AWS RAM).

Quando invochi un nome di dominio personalizzato privato, sei un *consumatore di API*. Puoi utilizzare un nome di dominio personalizzato privato tuo Account AWS o di un altro Account AWS.

Quando utilizzi un nome di dominio personalizzato privato, crei un'associazione di accesso al nome di dominio tra un endpoint VPC e un nome di dominio personalizzato privato. Con un'associazione di accesso al nome di dominio, i consumatori di API possono invocare il tuo nome di dominio personalizzato privato mentre sono isolati dalla rete Internet pubblica. Per ulteriori informazioni, consulta [Compiti dei fornitori di API e dei consumatori di API per nomi di dominio personalizzati per uso privato APIs](apigateway-private-custom-domains-associations.md).

## Protezione della chiave privata del certificato per il nome di dominio personalizzato
<a name="apigateway-private-custom-domains-secure-certificate-private-key"></a>

Quando richiedi un SSL/TLS certificato utilizzando ACM per creare il tuo nome di dominio personalizzato per uso privato APIs, ACM genera una public/private key pair. La coppia di chiavi viene generata al momento dell'importazione di un certificato. La chiave di accesso pubblica diventa parte del certificato. **Per archiviare in modo sicuro la chiave privata, ACM crea un'altra chiave utilizzando AWS KMS, chiamata chiave KMS, l'alias aws/acm.** AWS KMS utilizza questa chiave per crittografare la chiave privata del certificato. Per ulteriori informazioni, consulta [Data protection in AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/data-protection.html) nella *Guida per l'utente di AWS Certificate Manager *.

API Gateway utilizza AWS TLS Connection Manager, un servizio accessibile solo a Servizi AWS, per proteggere e utilizzare le chiavi private del certificato. Quando utilizzi il certificato ACM per creare un nome di dominio personalizzato API Gateway, API Gateway associa il certificato a AWS TLS Connection Manager. Lo facciamo creando una concessione a AWS KMS fronte della tua AWS chiave gestita. Questa concessione consente di utilizzare AWS KMS TLS Connection Manager per decrittografare la chiave privata del certificato. TLS Connection Manager utilizza il certificato e la chiave privata decrittografata (testo normale) per stabilire una connessione sicura (sessione SSL/TLS) con i client dei servizi Gateway API. Quando l'associazione del certificato a un servizio Gateway API viene annullata, la concessione viene ritirata. Per ulteriori informazioni, consulta [Grants](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) nella *Guida per gli sviluppatori di AWS Key Management Service *.

Per ulteriori informazioni, consulta [Crittografia dei dati inattivi in Amazon API Gateway](data-protection-encryption.md#data-protection-at-rest).

## Considerazioni sui nomi di dominio personalizzati
<a name="apigateway-private-custom-domains-considerations"></a>

Le seguenti considerazioni potrebbero influire sull’utilizzo dei nomi di dominio personalizzati:
+ Gateway API impiega circa 15 minuti per allocare il nome di dominio personalizzato privato.
+ Se si aggiorna il certificato ACM, Gateway API impiega circa 15 minuti per completare l’operazione. Durante questo periodo, il nome di dominio è nello stato `UPDATING` ed è ancora possibile accedervi.
+ Per invocare un nome di dominio personalizzato privato, è necessario creare un'associazione di accesso al nome di dominio personalizzato. Affinché un'associazione di accesso al nome di dominio sia pronta sono necessari circa 15 minuti.
+ Il nome di dominio personalizzato privato ARN contiene *account-id* e il. *domain-name-id* Quando si crea un nome di dominio, Gateway API utilizza il formato ARN `arn:partition:apigateway:region::/domainnames/domain-name`. Quando si accede a un nome di dominio personalizzato privato, si utilizza il formato ARN `arn:partition:apigateway:region:account-id:/domainnames/domain-name+domain-name-id`. 

  Potrebbe essere necessario modificare le autorizzazioni IAM per consentire l’accesso a un nome di dominio privato dopo averlo creato.
+ Non è possibile invocare nomi di dominio personalizzati privati con lo stesso nome dallo stesso endpoint VPC. Ad esempio, per invocare `arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234` e `arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+xyz000`, è necessario associare ciascun nome di dominio personalizzato privato a un endpoint VPC diverso.
+ Sono supportati i certificati con caratteri jolly, ad esempio un certificato per `*.private.example.com`.
+ I nomi di dominio personalizzati con caratteri jolly non sono supportati.
+ Sono supportati solo i certificati RSA con una lunghezza di chiave di 2048 bit e i certificati ECDSA con lunghezze di chiave di 256 bit e 384 bit.
+ Non puoi impostare il tipo di indirizzo IP come privato per consentire solo APIs agli IPv4 indirizzi di richiamare la tua API privata. È supportato solo il tipo dualstack. Per ulteriori informazioni, consulta [Tipi di indirizzo IP per REST API in Gateway API](api-gateway-ip-address-type.md).
+ Per inviare il traffico utilizzando l’API privata, è possibile usare tutti i tipi di indirizzo IP supportati da Amazon VPC. Puoi inviare dualstack e IPv6 traffico configurando le impostazioni sul tuo endpoint VPC. Questa configurazione non può essere modificata tramite Gateway API. Per ulteriori informazioni, consulta [Aggiungere IPv6 il supporto per il tuo VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).
+ La mappatura percorso di base a più livelli, ad esempio la mappatura API privata a `/developers/feature`, non è supportata, ma è possibile utilizzare una regola di routing per creare una condizione di percorso a più livelli. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).
+ Non è possibile impostare una versione TLS minima per un nome di dominio personalizzato privato. A tutti i nomi di dominio personalizzati privati è associata la policy di sicurezza `TLS-1-2`.
+ È possibile utilizzare la policy degli endpoint VPC per controllare l'accesso a un nome di dominio personalizzato privato. Per ulteriori informazioni, consulta gli esempi 4 e 5 in [Usa le policy degli endpoint VPC per uso privato APIs in API Gateway](apigateway-vpc-endpoint-policies.md).
+ È necessario creare una policy delle risorse separata per l'API privata e per il nome di dominio personalizzato privato. Per invocare un nome di dominio personalizzato privato, un consumatore di API deve disporre dell'accesso dalla policy delle risorse dei nomi di dominio personalizzati privati, dalla policy delle risorse delle API private e da qualsiasi autorizzazione o policy di endpoint VPC sull'API privata.

## Considerazioni sull'utilizzo di nomi di dominio personalizzati privati con altre risorse Gateway API
<a name="apigateway-private-custom-domains-considerations-for-migration"></a>

Le seguenti considerazioni potrebbero influire sull’utilizzo dei nomi di dominio personalizzati privati con altre risorse Gateway API:
+ Non è possibile inviare il traffico da un nome di dominio personalizzato privato a un’API pubblica.
+ Quando un'API privata viene mappata a un nome di dominio personalizzato privato, non è possibile modificare il tipo di endpoint dell'API. 
+ Non è possibile eseguire la migrazione di un nome di dominio personalizzato pubblico a un nome di dominio personalizzato privato.
+ Se disponi di un endpoint VPC che utilizzi per accedere a un nome di dominio personalizzato pubblico, non utilizzarlo per creare un'associazione di accesso al nome di dominio con un nome di dominio personalizzato privato.

## Differenze tra nomi di dominio personalizzati privati e nomi di dominio personalizzati pubblici
<a name="apigateway-private-custom-domains-public-differences"></a>

Di seguito sono descritte le differenze tra i nomi di dominio personalizzati privati e pubblici:
+ I nomi di dominio personalizzati privati non devono essere necessariamente univoci tra più account.
+ Un nome di dominio privato ha un ID del nome di dominio. Questo ID identifica in modo univoco un nome di dominio personalizzato privato e non viene generato per i nomi di dominio personalizzati pubblici.
+ Quando utilizzi il AWS CLI per aggiornare o eliminare il tuo nome di dominio personalizzato privato, devi fornire l'ID del nome di dominio. Se il nome di dominio personalizzato privato è `example.com` e il nome di dominio personalizzato pubblico è `example.com` e non si fornisce l'ID del nome di dominio, Gateway API modificherà o eliminerà il nome di dominio personalizzato pubblico.

## Passaggi successivi per i nomi di dominio personalizzati per uso privato APIs
<a name="apigateway-private-custom-domains-next-steps"></a>

Per informazioni sulle attività di un provider e di un consumatore di API, consulta [Compiti dei fornitori di API e dei consumatori di API per nomi di dominio personalizzati per uso privato APIs](apigateway-private-custom-domains-associations.md).

Per istruzioni sulla creazione di un nome di dominio privato personalizzato da richiamare autonomamente Account AWS, consulta[Tutorial: crea e richiama un nome di dominio personalizzato per uso privato APIs](apigateway-private-custom-domains-tutorial.md).

Per istruzioni su come fornire un altro Account AWS accesso al tuo nome di dominio personalizzato privato, consulta[Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM](apigateway-private-custom-domains-provider-share.md). Per istruzioni su come associare il tuo endpoint VPC a un nome di dominio privato personalizzato in Account AWS un altro, consulta. [Consumatore di API: associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso](apigateway-private-custom-domains-consumer-create.md)

# Compiti dei fornitori di API e dei consumatori di API per nomi di dominio personalizzati per uso privato APIs
<a name="apigateway-private-custom-domains-associations"></a>

Quando crei un nome di dominio personalizzato privato, sei un *provider di API*. Quando invochi un nome di dominio personalizzato privato, sei un *consumatore di API*. Puoi utilizzare un nome di dominio personalizzato privato tuo Account AWS o di un altro Account AWS.

La sezione seguente spiega le attività che il provider e il consumatore di API devono eseguire per utilizzare un nome di dominio personalizzato privato. Se desideri richiamare un nome di dominio personalizzato privato Account AWS, sei sia il fornitore dell'API che il consumatore dell'API. Se desideri richiamare un dominio privato personalizzato in un altro Account AWS, a seconda della relazione di fiducia tra il provider dell'API e il consumatore dell'API AWS Organizations, AWS RAM potresti completare alcune attività al posto tuo.

## Attività di un provider di API
<a name="apigateway-private-custom-domains-associations-provider"></a>

I provider di API creano nomi di dominio privati APIs e li associano a nomi di dominio personalizzati.

 I provider di API gestiscono due policy delle risorse per proteggere i propri nomi di dominio personalizzati privati. La prima policy riguarda il servizio `execute-api` e controlla quali endpoint VPC possono invocare il nome di dominio personalizzato privato. Nella configurazione del nome di dominio personalizzato privato è denominata `policy`.

La seconda policy riguarda il servizio Amazon API Gateway Management e controlla quali endpoint VPC di altri Account AWS possono formare un'associazione di accesso al nome di dominio con il tuo nome di dominio personalizzato privato. Un endpoint VPC deve formare un'associazione di accesso al nome di dominio con un nome di dominio personalizzato privato per invocarlo. Nella configurazione del nome di dominio personalizzato privato è denominata `managementPolicy`. Puoi utilizzare il AWS RAM nostro API Gateway per aggiornare questa politica. Se non intendi consentire agli endpoint VPC di altri di Account AWS richiamare il tuo nome di dominio personalizzato, non modifichi il. `managementPolicy`

Se sei un provider di API, devi eseguire le seguenti operazioni:

1. Crea un'API privata.

1. Aggiorna la `policy` dell'API privata per concedere all'endpoint VPC l'accesso all'API privata.

1. Crea un nome di dominio personalizzato privato.

1. Aggiorna la `policy` del nome di dominio personalizzato privato per concedere all'endpoint VPC l'accesso al nome di dominio personalizzato privato.

1. Crea una mappatura percorso di base o una regola di routing per inviare il traffico dall’API privata al nome di dominio personalizzato privato. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

Se desideri consentire agli utenti API di altri paesi di accedere Account AWS al tuo nome di dominio privato personalizzato, procedi come segue:

1. Aggiorna la `managementPolicy` del nome di dominio personalizzato privato per consentire ai consumatori di API in altri account di associare i loro endpoint VPC al tuo nome di dominio personalizzato privato. Puoi farlo utilizzando i seguenti metodi:  
**AWS RAM**  
Con AWS RAM, se il provider di API e il consumatore dell'API fanno parte della stessa organizzazione che utilizza AWS Organizations, la condivisione di risorse tra provider e consumatore viene accettata automaticamente. In caso contrario, è necessario attendere che il consumatore di API accetti la condivisione delle risorse. **Ti consigliamo di AWS RAM utilizzarlo per condividere il tuo nome di dominio personalizzato privato.**   
**Gateway API**  
Con API Gateway, AWS CLI è supportato solo il. Devi aggiornare il nome di dominio personalizzato privato utilizzando un'operazione di patch e fornire il documento di policy per `managementPolicy`.

1. Aggiorna il tuo nome `policy` di dominio privato personalizzato e qualsiasi nome privato APIs mappato su di esso per concedere l'accesso all'endpoint VPC del consumatore dell'API.

Per istruzioni su come fornire la tua API a un altro Account AWS utente, consulta. [Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM](apigateway-private-custom-domains-provider-share.md) 

## Attività di un consumatore di API
<a name="apigateway-private-custom-domains-associations-consumer"></a>

I consumatori di API associano i propri endpoint VPC a un ARN di nome di dominio per invocare un nome di dominio personalizzato privato. I consumatori di API non devono necessariamente creare un'API di Gateway API.

Se sei un consumatore di API, esegui le seguenti operazioni:

1. Crea un endpoint VPC con DNS privato abilitato in Amazon VPC.

1. (Facoltativo: se AWS RAM utilizzato) Accetta una condivisione di risorse di dominio personalizzata privata AWS RAM entro **12 ore** dalla condivisione delle risorse. Se fai parte della stessa organizzazione del provider di API, la condivisione di risorse viene accettata automaticamente.

1. Ottieni l'ARN del nome di dominio personalizzato privato. Poiché l'URL del nome di dominio personalizzato privato non è univoco, devi utilizzare l'ARN del nome di dominio personalizzato privato per creare l'associazione di accesso al nome di dominio tra l'endpoint VPC e il nome di dominio personalizzato privato. È possibile utilizzare AWS RAM per recuperare l'ARN del nome di dominio personalizzato privato.

1. Associa l'ARN del dominio personalizzato privato all'endpoint VPC in Gateway API. In questo modo viene creata una connessione sicura tra l'endpoint VPC e il nome di dominio personalizzato privato. Il traffico non esce dalla rete Amazon.

1. Attendi che il provider dell'API conceda all'endpoint VPC l'accesso al nome di dominio privato personalizzato e a qualsiasi nome privato APIs mappato al nome di dominio personalizzato privato. Se sei sia il provider che il consumatore di API, sei tu a concedere l'accesso per l'invocazione all'endpoint VPC.

1. Crea una zona ospitata privata di Route 53 e un record Route 53 per risolvere il nome di dominio personalizzato privato in Route 53.

Per istruzioni su come utilizzare un'API in un'altra Account AWS, consulta. [Consumatore di API: associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso](apigateway-private-custom-domains-consumer-create.md)

# Tutorial: crea e richiama un nome di dominio personalizzato per uso privato APIs
<a name="apigateway-private-custom-domains-tutorial"></a>

In questo tutorial creerai un nome di dominio personalizzato privato da invocare in un VPC nel tuo account. A questo scopo, sei il provider e il consumatore di API. Per completare questo tutorial devi disporre di un'API privata e di un endpoint VPC. Se disponi di un endpoint VPC che utilizzi per accedere a un nome di dominio personalizzato pubblico, non utilizzarlo per questo tutorial o per creare associazioni di accesso a nomi di dominio.

## Passaggio 1: creare un nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-create-domain"></a>

Puoi creare un nome di dominio personalizzato privato specificando il nome di dominio, il certificato ACM e la policy per il servizio `execute-api` per controllare quali endpoint VPC possono invocarlo.

------
#### [ Console di gestione AWS ]

**Per creare un nome di dominio personalizzato privato**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli **Aggiungi nome di dominio**.

1. In **Domain name (Nome di dominio)**, immettere un nome di dominio. 

   Il certificato ACM deve coprire questo nome di dominio, ma non è necessario che il nome di dominio sia univoco.

1. Seleziona **Privato**.

1. Per **Modalità di routing**, scegli **Solo mappature API.**

1. Per **Certificato ACM**, seleziona un certificato.

1. Scegli **Aggiungi nome di dominio**.

Gateway API effettua il provisioning di un nome di dominio con una policy `deny` per tutte le risorse. Questa è la policy delle risorse per il servizio `execute-api`. Devi aggiornare questa policy delle risorse per concedere l'accesso agli endpoint VPC per invocare il tuo nome di dominio personalizzato privato.

**Per aggiornare la policy delle risorse**

1. Scegli la scheda **Policy delle risorse**, quindi scegli **Modifica policy delle risorse**.

1. Inserisci la policy delle risorse seguente nell'editor di codice. Sostituisci l'endpoint VPC *vpce-abcd1234efg* con il tuo ID endpoint VPC.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": [
                   "execute-api:/*"
               ]
           },
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": [
                   "execute-api:/*"
               ],
               "Condition" : {
                   "StringNotEquals": {
                       "aws:SourceVpce": "vpce-abcd1234"
                   }
               }
           }
       ]
   }
   ```

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

------
#### [ AWS CLI ]

Quando crei un nome di dominio privato personalizzato utilizzando il AWS CLI, fornisci una politica di risorse affinché il `execute-api` servizio conceda l'accesso agli endpoint VPC per richiamare il tuo nome di dominio personalizzato privato, utilizzando il parametro. `--policy file://policy.json` È possibile modificare questa policy in un secondo momento.

In questo esempio si collega la seguente policy di risorse come `policy` caricando i parametri da un file. Copia e salva questo file come `policy.json`. Questa politica consente solo il traffico in entrata verso un nome di dominio personalizzato privato dall'endpoint * `vpce-abcd1234efg`* VPC:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": "vpce-abcd1234"
                }
            }
        }
    ]
}
```

Il [create-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-domain-name.html)comando seguente crea un nome di dominio privato personalizzato:

```
aws apigateway create-domain-name \
    --domain-name 'private.example.com' \
    --certificate-arn 'arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef' \
    --security-policy 'TLS_1_2' \
    --endpoint-configuration '{"types":["PRIVATE"]}' \
    --policy file://policy.json
```

L'output sarà simile al seguente:

```
{
    "domainName": "private.example.com",
    "domainNameId": "abcd1234",
    "domainNameArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
    "certificateArn": "arn:aws:acm:us-west-2:111122223333:certificate/a1b2c3d4-5678-90ab-cdef",
    "certificateUploadDate": "2024-09-10T10:31:20-07:00",
    "endpointConfiguration": {
        "types": [
            "PRIVATE"
        ]
    },
    "domainNameStatus": "AVAILABLE",
    "securityPolicy": "TLS_1_2",
    "routingMode" : "API_MAPPING_ONLY",
    "policy": "..."
}
```

------

## Passaggio 2: creare una mappatura del percorso di base per mappare l'API privata al nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-base-path-mapping"></a>

Dopo aver creato il nome di dominio personalizzato privato, mappa un'API privata a tale nome. Con una mappatura del percorso di base, un'API è accessibile tramite la combinazione di nome di dominio personalizzato privato e percorso di base associato. Si consiglia di utilizzare un singolo nome di dominio privato personalizzato come nome host di più nomi privati APIs.

Tutti i provider di API devono creare una mappatura del percorso di base, anche se non hai intenzione di invocare la tua API. Inoltre, devi concedere l'accesso agli endpoint VPC per richiamare qualsiasi privato APIs mappato al tuo nome di dominio privato personalizzato.

------
#### [ Console di gestione AWS ]

**Per creare una mappatura del percorso di base**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli un nome di dominio personalizzato privato.

1. Nella scheda **Mappature API** scegli **Configura mappature**.

1. Scegliere **Add new mapping (Aggiungi nuova mappatura)**.

1. Immettere un'**API**, uno **Stage (Fase)**e, facoltativamente, un **Path (Percorso)**.

1. Selezionare **Salva**.

------
#### [ AWS CLI ]

Il [create-base-path-mapping](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-base-path-mapping.html)comando seguente crea una mappatura tra un'API privata e un nome di dominio personalizzato privato:

```
aws apigateway create-base-path-mapping \
    --domain-name-id abcd1234 \
    --domain-name 'private.example.com' \
    --rest-api-id a1b2c3 \
    --stage prod \
    --base-path v1
```

L'output sarà simile al seguente.

```
{
    "basePath": "v1",
    "restApiId": "a1b2c3",
    "stage": "prod"
}
```

------

Per una maggiore flessibilità nel modo in cui indirizzate il traffico verso il vostro APIs, potete modificare la modalità di routing in `ROUTING_RULE_ONLY` o `ROUTING_RULE_THEN_API_MAPPING` e creare una regola di routing. Per ulteriori informazioni, consulta [Invia traffico al tuo APIs tramite il tuo nome di dominio personalizzato in API Gateway](rest-api-routing-mode.md).

**Nota**  
Se vuoi che altri Account AWS invochino il tuo nome di dominio privato personalizzato, dopo aver completato questo tutorial, segui i passaggi indicati. [Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM](apigateway-private-custom-domains-provider-share.md)

## Passaggio 3: creare un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato e un endpoint VPC
<a name="apigateway-private-custom-domains-provider-associate-with-vpce"></a>

A questo punto, creerai un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato privato e l'endpoint VPC. L'endpoint VPC utilizza l'associazione di accesso al nome di dominio per invocare il nome di dominio personalizzato privato mentre è isolato dalla rete Internet pubblica.

------
#### [ Console di gestione AWS ]

**Per creare un'associazione di accesso al nome di dominio**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli un nome di dominio personalizzato privato.

1. Nella scheda **Condivisione delle risorse**, per le **Associazioni di accesso ai nomi di dominio**, scegli **Crea associazione di accesso al nome di dominio**.

1. In **ARN del nome di dominio** digita il tuo nome di dominio.

1. In **ID endpoint VPC** seleziona l'ID endpoint VPC a cui hai fornito l'accesso nel passaggio 1.

1. Scegli **Associazione di accesso al nome di dominio**.

Puoi anche creare l'associazione di accesso al nome di dominio utilizzando la pagina **Associazioni di accesso ai nomi di dominio** della console.

------
#### [ AWS CLI ]

Il seguente comando `create-domain-name-access-association` crea un'associazione di accesso al nome di dominio tra il nome di dominio personalizzato privato e l'endpoint VPC.

```
aws apigateway create-domain-name-access-association \
    --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --access-association-source vpce-abcd1234efg \
    --access-association-source-type VPCE \
    --region us-west-2
```

L'output sarà simile al seguente.

```
{
    "domainNameAccessAssociationARN": "arn:aws:apigateway:us-west-2:111122223333:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg",
    "accessAssociationSource": "vpce-abcd1234efg",
    "accessAssociationSourceType": "VPCE",
    "domainNameARN" : "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
}
```

------

Affinché l'associazione di accesso al nome di dominio sia pronta sono necessari circa 15 minuti. Durante l'attesa, puoi eseguire i passaggi seguenti.

## Passaggio 4: creare una zona ospitata Route 53
<a name="apigateway-private-custom-domains-provider-create-route-53-private-hosted-zone"></a>

Dopo aver aggiornato la policy delle risorse e associato il nome di dominio personalizzato privato all'endpoint VPC, crea una zona ospitata privata in Route 53 per risolvere il nome di dominio personalizzato. Una zona ospitata è un contenitore che contiene informazioni su come si desidera indirizzare il traffico per un dominio all'interno di uno o più domini VPCs senza esporre le proprie risorse a Internet. Per ulteriori informazioni, consulta [Utilizzo delle zone ospitate private](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).

------
#### [ Console di gestione AWS ]

Per utilizzare la Console di gestione AWS, consulta [Creazione di una zona ospitata privata](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) nella *Amazon Route 53 Developer Guide*.

Per **Nome**, usa il tuo nome di dominio personalizzato privato. Per **ID VPC**, usa il VPC contenente l'endpoint VPC utilizzato nei passaggi precedenti.

------
#### [ AWS CLI ]

Il [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html)comando seguente crea una zona ospitata privata:

```
aws route53 create-hosted-zone --name private.example.com \
    --caller-reference 2014-04-01-18:47 \
    --hosted-zone-config Comment="command-line version",PrivateZone=true \
    --vpc VPCRegion=us-west-2,VPCId=vpc-abcd1234
```

L'output contiene l'ID della zona ospitata. L'ID della zona ospitata viene utilizzato nei passaggi seguenti.

------

## Passaggio 5: creare un record DNS di Route 53
<a name="apigateway-private-custom-domains-provider-create-route-53-record"></a>

Dopo aver creato la zona ospitata, devi creare un record per risolvere il tuo nome di dominio personalizzato privato. Userai l'ID della zona ospitata che hai creato nel passaggio precedente. In questo esempio viene creato un tipo di record A. Se lo utilizzi IPv6 per il tuo endpoint VPC, crea un tipo di record AAAA. Se utilizzi dualstack per il tuo endpoint VPC, crea un tipo di record sia AAAA che A.

------
#### [ Console di gestione AWS ]

Per utilizzare il Console di gestione AWS, consulta [Routing del traffico verso un'API Amazon API Gateway utilizzando il tuo nome di dominio](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

Usa **Creazione rapida** e attiva **Alias**. Per l'endpoint, utilizza il nome DNS dell'endpoint VPC.

------
#### [ AWS CLI ]

Per configurare i record DNS in modo da mappare il nome di dominio personalizzato privato al relativo nome host dell'ID della zona ospitata, devi creare un file JSON contenente la configurazione per configurare un record DNS per il nome di dominio privato.

Il seguente `setup-dns-record.json` mostra come creare un record `A` DNS per mappare un nome di dominio personalizzato privato al relativo nome host privato. Fornisci il `DNSName` del tuo ID DNS VPC e l'ID della zona ospitata che hai creato nel passaggio precedente.

```
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "private.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-abcd1234.execute-api.us-west-2.vpce.amazonaws.com",
          "HostedZoneId": "Z2OJLYMUO9EFXC",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
```

Il [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html)comando seguente crea un record DNS per il tuo nome di dominio privato personalizzato:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

Sostituisci `hosted-zone-id` con l'ID della zona ospitata di Route 53 del record DNS impostato nel tuo account. Il valore del parametro `change-batch` punta a un file JSON.

------

Se non intendi invocare il tuo nome di dominio personalizzato privato, dopo aver verificato che il nome di dominio personalizzato privato funzioni, puoi eliminare queste risorse.

## Passaggio 6: invocare il nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-tutorial-invoke"></a>

Ora puoi invocare il tuo nome di dominio personalizzato privato nel tuo Account AWS. Nel tuo VPC, usa il seguente comando curl per accedere al tuo nome di dominio personalizzato privato.

```
curl https://private.example.com/v1
```

Per ulteriori informazioni su altri modi per invocare la tua API privata, consulta [Invocazione di un'API privata utilizzando un nome di dominio personalizzato](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke).

## Passaggio 7: eseguire l'eliminazione
<a name="apigateway-private-custom-domains-cleanup"></a>

Per evitare costi inutili, elimina l'associazione tra l'endpoint VPC e il nome di dominio personalizzato privato, quindi elimina il nome di dominio personalizzato privato.

------
#### [ Console di gestione AWS ]

**Per eliminare l'associazione di accesso al nome di dominio**

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

1. Nel pannello di navigazione principale, scegli **Associazioni di accesso ai nomi di dominio**.

1. Seleziona l'associazione di accesso al nome di dominio, quindi scegli **Elimina**.

1. Conferma la tua scelta, quindi scegli **Elimina**.

Dopo aver eliminato l'associazione di accesso al nome di dominio, puoi eliminare il tuo nome di dominio personalizzato privato.

**Per eliminare il nome di dominio personalizzato privato**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli il tuo nome di dominio personalizzato privato.

1. Scegli **Elimina**.

1. Conferma la tua scelta, quindi scegli **Elimina**.

Se necessario, puoi anche eliminare il tuo endpoint VPC. Per ulteriori informazioni, consulta [Eliminazione di un endpoint dell'interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/delete-interface-endpoint.html).

------
#### [ AWS CLI ]

**Per eliminare**

1. Il seguente comando `delete-access-association` elimina l'associazione di accesso al nome di dominio:

   ```
   aws apigateway delete-domain-name-access-association \
       --domain-name-access-association-arn 'arn:aws:apigateway:us-west-2:111122223333:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg' \
       --region us-west-2
   ```

1. Il seguente comando `delete-domain-name` elimina il nome di dominio personalizzato privato. Questo comando rimuove anche tutte le mappature dei percorsi di base.

   ```
   aws apigateway delete-domain-name \
       --domain-name test.private.com \
       --domain-name-id abcd1234
   ```

Se necessario, puoi anche eliminare il tuo endpoint VPC. Per ulteriori informazioni, consulta [Eliminazione di un endpoint dell'interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/delete-interface-endpoint.html).

------

## Best practice
<a name="apigateway-private-custom-domains-best-practices"></a>

Di seguito sono riportate le best practice consigliate per la creazione di un nome di dominio personalizzato privato:
+ Utilizza la mappatura del percorso di base o le regole di routing per inviare il traffico da un nome di dominio privato personalizzato a più nomi privati. APIs
+ Quando un endpoint VPC non ha più bisogno di accedere a un nome di dominio personalizzato privato, elimina l'associazione. Inoltre, rimuovi l'endpoint VPC da `execute-api` per il servizio `policy` per il dominio personalizzato privato. 
+ Configura almeno due zone di disponibilità per endpoint VPC.
+ Disabilita l'endpoint predefinito. È consigliabile disabilitare l'endpoint predefinito per consentire ai consumatori dell'API di chiamare l'API solo dal nome di dominio personalizzato. Per ulteriori informazioni, consulta [Disabilita l'endpoint predefinito per REST APIs](rest-api-disable-default-endpoint.md).
+ È consigliabile effettuare il provisioning di una zona ospitata privata di Route 53 e di un record di tipo A durante la configurazione del nome di dominio personalizzato privato. Se non hai intenzione di invocare il tuo nome di dominio personalizzato privato, puoi eliminare queste risorse in un secondo momento.

# Utilizzo di nomi di dominio personalizzati privati in più account
<a name="apigateway-private-custom-domains-other-accounts"></a>

Questa sezione descrive come utilizzare nomi di dominio personalizzati privati in più account. Puoi fornire un nome di dominio privato personalizzato a un altro Account AWS e utilizzarne un altro Account AWS per richiamare un nome di dominio privato personalizzato.

Puoi condividere il tuo nome di dominio privato personalizzato Account AWS con un altro utente utilizzando AWS Resource Access Manager il nostro API Gateway. AWS Resource Access Manager (AWS RAM) consente di condividere in modo sicuro le risorse all'interno Account AWS e all'interno dell'organizzazione o delle unità organizzative (OUs). Per ulteriori informazioni, consulta [Cos'è AWS Resource Access Manager](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html).

Per istruzioni su come condividere un nome di dominio privato personalizzato Account AWS con un altro utente AWS RAM, consulta[Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM](apigateway-private-custom-domains-provider-share.md).

Per istruzioni su come condividere un nome di dominio privato personalizzato con un altro Account AWS tramite API Gateway, consulta[Provider API: condividi il tuo nome di dominio personalizzato privato utilizzando l'API Gateway AWS CLI](apigateway-private-custom-domains-provider-share-cli.md).

Per istruzioni su come utilizzare un nome di dominio personalizzato privato in un altro Account AWS, consulta[Consumatore di API: associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso](apigateway-private-custom-domains-consumer-create.md).

## Best practice per l'uso di nomi di dominio personalizzati privati in più account
<a name="apigateway-private-custom-domains-other-accounts-best-practices"></a>

Di seguito sono riportate le best practice consigliate per l’utilizzo di nomi di dominio personalizzati privati in più account:
+ Utilizzalo AWS RAM per condividere i tuoi nomi di dominio personalizzati privati. Quando lo utilizzi AWS RAM, puoi ridurre il sovraccarico operativo e non devi creare un servizio `managementPolicy` per il servizio Amazon API Gateway Management.
+ Usa il parametro `resource-owner` quando elenchi i tuoi nomi di dominio personalizzati privati o le associazioni di accesso ai nomi di dominio. Usa il parametro `resource-owner` per elencare solo le risorse che appartengono a te o ad altri Account AWS.

  L'esempio seguente mostra come ottenere tutte le associazioni di accesso ai nomi di dominio di tua proprietà:

  ```
  aws apigateway get-domain-name-access-associations --resource-owner SELF
  ```

  Usa `--resource-owner OTHER_ACCOUNTS` per elencare tutte le associazioni di accesso ai nomi di dominio che altri account hanno creato con il tuo nome di dominio personalizzato privato.

# Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM
<a name="apigateway-private-custom-domains-provider-share"></a>

Puoi fornire ai consumatori API un altro Account AWS accesso al tuo nome di dominio personalizzato privato. In questa sezione, imparerai come condividere il tuo nome di dominio personalizzato privato utilizzando AWS RAM e come controllare l'accesso al tuo nome di dominio personalizzato privato.

## Considerazioni sulla condivisione del nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-share-considerations"></a>

Le seguenti considerazioni potrebbero influire sul modo in cui fornisci l'accesso al tuo nome di dominio personalizzato privato tramite AWS RAM. Per informazioni su come condividere il tuo nome di dominio personalizzato privato senza utilizzarlo AWS RAM, consulta[Provider API: condividi il tuo nome di dominio personalizzato privato utilizzando l'API Gateway AWS CLI](apigateway-private-custom-domains-provider-share-cli.md).
+ I nomi di dominio privati personalizzati vengono condivisi a Regione AWS livello. Il nome di dominio personalizzato privato e l'endpoint VPC devono trovarsi nello stesso Regione AWS.
+ Puoi utilizzare una condivisione di risorse con più principali e, dopo aver creato la condivisione di risorse, aggiungervi altri principali. È consigliabile riutilizzare la condivisione di risorse, quando possibile.
+ Devi sempre concedere all'endpoint VPC del consumatore dell'API l'accesso all'endpoint VPC per richiamare il tuo nome di dominio privato personalizzato e qualsiasi mappatura privata APIs su di esso.
+ Se il consumatore e il provider dell'API fanno parte della stessa organizzazione che utilizza l'API AWS Organizations, la condivisione delle risorse viene accettata automaticamente. È comunque necessario creare la condivisione di risorse tramite AWS RAM.
+ Se il consumatore di API e il provider di API fanno parte della stessa organizzazione AWS Organizations e la condivisione delle risorse all'interno dell'organizzazione è abilitata, a tutti i responsabili dell'organizzazione con cui si condivide la condivisione viene automaticamente concesso l'accesso alle condivisioni di risorse. Non è necessario un invito e puoi evitare la condivisione di risorse.
+ Se il consumatore di API non accetta la condivisione di risorse entro **12 ore**, il provider di API deve condividere nuovamente la risorsa.
+ Dopo aver creato la condivisione di risorse, AWS RAM aggiorna il `managementPolicy` servizio Amazon API Gateway Management per il tuo nome di dominio privato personalizzato per impedire l'accesso ai principali senza accesso esplicito`allow`. Per ulteriori informazioni, consulta [Determining whether a request is allowed or denied within an account](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) nella Guida per l'utente di IAM.

  La `managementPolicy` aggiornata sarà simile alla seguente:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "abcd1234-1234-abcd-abcd-1234abcdefg",
      "Statement": [
          {
              "Sid": "APIGatewayPrivateDomainNameManagementPolicyDefaultPermission-org",
              "Effect": "Allow",
              "Principal": "*",
              "Action": "apigateway:CreateAccessAssociation",
              "Resource": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
              "Condition": {
                  "StringEquals": {
                      "aws:PrincipalOrgID": "o-1234abcd"
                  },
                  "StringNotEquals": {
                      "aws:PrincipalAccount": "111122223333"
                  }
              }
          }
      ]
  }
  ```

------

  AWS RAM ha impedito ai principali senza accesso esplicito di creare associazioni di `allow` accesso con il tuo nome di dominio privato personalizzato, aggiungendo quanto segue:

  ```
  "StringNotEquals": {
      "aws:PrincipalAccount": "111122223333"
  }
  ```

  È comunque possibile utilizzare il nome principale di Account AWS chi ha creato il nome di dominio personalizzato privato per creare associazioni di accesso al nome di dominio.

## Consentire ad altri account di creare associazioni di accesso ai nomi di dominio con il tuo nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-management-policy-update"></a>

Innanzitutto, concedi l'accesso a un altro utente Account AWS per creare associazioni di accesso al nome di dominio con il tuo nome di dominio privato personalizzato.

------
#### [ Console di gestione AWS ]

Per utilizzare il Console di gestione AWS, consulta [Creazione di una condivisione di risorse AWS RAM nella](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html) *Guida AWS RAM per l'utente*.

In **Seleziona il tipo di risorsa**, scegli **Domini personalizzati privati Gateway API**.

------
#### [ AWS CLI ]

Di seguito [create-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html)viene creata una condivisione di risorse per il nome di dominio personalizzato privato. Il completamento dell'associazione tra la risorsa e il principale può richiedere alcuni minuti. Per i principali, fornisci un ID account o un ID organizzazione, ad esempio `arn:aws:organizations::123456789012:organization/o-1234abcd`. Puoi fornire più principali per la condivisione di risorse.

```
aws ram create-resource-share \
    --region us-west-2 \
    --name privateCustomDomain-resource-share \
    --permission-arns arn:aws:ram::aws:permission/APIGatewayPrivateDomainNameManagementPolicyDefaultPermission \
    --resource-arns arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --principals 222222222222
```

------

Dopo aver fornito l'accesso a un altro Account AWS, i consumatori di API di quell'account devono creare un'associazione di accesso al nome di dominio tra il loro endpoint VPC e il tuo nome di dominio personalizzato privato. Non puoi creare l'associazione di accesso al nome di dominio al loro posto. Per ulteriori informazioni, consulta [Associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso](apigateway-private-custom-domains-consumer-create.md#apigateway-private-custom-domains-consumer-associate).

## Consentire ad altri account di invocare il nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-policy-update"></a>

Successivamente, concedi l'accesso all'endpoint VPC del consumatore dell'API per richiamare il tuo nome di dominio privato personalizzato e qualsiasi nome privato mappato APIs su di esso.

------
#### [ Console di gestione AWS ]

**Per consentire agli endpoint VPC in altri account di invocare il nome di dominio personalizzato privato**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli il nome di dominio privato personalizzato che hai condiviso con altri. Account AWS

1. Nella scheda **Policy delle risorse**, scegli **Modifica policy delle risorse**.

1. Aggiungi l'ID dell'endpoint VPC del consumatore di API alla tua policy delle risorse.

   Puoi trovare l'ID dell'endpoint VPC del consumatore di API nella sezione **Associazioni di accesso ai nomi di dominio** della scheda **Condivisione delle risorse** nella pagina **Dettagli del dominio** del tuo nome di dominio personalizzato privato.

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

------
#### [ AWS CLI ]

La seguente `policy` per il servizio `execute-api` consente il traffico in entrata verso un nome di dominio personalizzato privato dagli endpoint VPC `vpce-abcd1234efg` e `vpce-xyz000abc`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/*"
            ],
            "Condition" : {
                "StringNotEquals": {
                    "aws:SourceVpce": [
                    "vpce-abcd1234",
                    "vpce-xyzz0000"
                    ]
                }
            }
        }
    ]
}
```

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente utilizza un'operazione di patch `policy` per aggiornare il nome di dominio personalizzato privato:

```
aws apigateway update-domain-name
    --domain-name private.example.com \
    --domain-name-id abcd1234 \
    --patch-operations op=replace,path=/policy,value='"{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"]},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"],\"Condition\":{\"StringNotEquals\":[\"vpce-abcd1234efg\", \"vpce-xyz000abc\"]}}}]}"
```

------

# Provider di API: smetti di condividere un nome di dominio personalizzato privato utilizzando AWS RAM
<a name="apigateway-private-custom-domains-provider-stop-sharing"></a>

Per interrompere la condivisione del nome di dominio personalizzato privato, devi innanzitutto impedire al consumatore di API di creare altre associazioni di accesso ai nomi di dominio dissociando la condivisione delle risorse. Quindi, devi rifiutare l'associazione di accesso al nome di dominio e rimuovere l'endpoint VPC del consumatore di API dalla tua `policy` per il servizio `execute-api`. Il consumatore di API può quindi eliminare la propria associazione di accesso al nome di dominio.

## Interruzione della condivisione del nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-dissociate-ram"></a>

Innanzitutto, interrompi l'utilizzo della condivisione delle risorse AWS RAM.

------
#### [ Console di gestione AWS ]

Per utilizzare il Console di gestione AWS, vedi [Aggiornare una condivisione di risorse in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html).

------
#### [ AWS CLI ]

Di seguito [disassociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html)viene dissociata una condivisione di risorse dal nome di dominio personalizzato privato.

```
aws ram disassociate-resource-share \
    --region us-west-2 \
    --resource-arns arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234 \
    --principals 222222222222
```

------

## Rifiuto dell'associazione di accesso al nome di dominio
<a name="apigateway-private-custom-domains-provider-reject"></a>

Dopo aver interrotto la condivisione della risorsa AWS RAM, rifiuti l'associazione di accesso al nome di dominio tra un endpoint VPC in un altro account e il tuo nome di dominio personalizzato privato. 

**Nota**  
Non puoi rifiutare un'associazione di accesso a un nome di dominio nel tuo account. Per interrompere la condivisione di risorse, elimina l'associazione di accesso al nome di dominio. Per ulteriori informazioni, consulta la sezione su come [eliminare un'associazione di accesso al nome di dominio](apigateway-private-custom-domains-tutorial.md#apigateway-private-custom-domains-cleanup).

Quando rifiuti un'associazione di accesso al nome di dominio con un endpoint VPC, se un consumatore di API tenta di chiamare il tuo nome di dominio personalizzato privato, Gateway API rifiuta la chiamata e restituisce un codice di stato `403`.

------
#### [ Console di gestione AWS ]

**Per rifiutare un'associazione di accesso al nome di dominio**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli il nome di dominio privato personalizzato che hai condiviso con altri. Account AWS

1. Nella sezione **Condivisione delle risorse**, scegli l'associazione di accesso al nome di dominio che desideri rifiutare.

1. Scegli **Rifiuta l'associazione**.

1. Conferma la tua scelta, quindi scegli **Rifiuta**.

------
#### [ AWS CLI ]

Il seguente comando `reject-domain-name-access-association` rifiuta l'associazione di accesso al nome di dominio tra l'endpoint VPC e il nome di dominio personalizzato privato.

```
aws apigateway reject-domain-name-access-association \
    --domain-name-access-association-arn arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg \
    --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234
```

------

## Negazione dell'accesso al provider di API per invocare il nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-deny-access"></a>

Dopo avere rifiutato l'associazione di accesso al nome di dominio, rimuovi l'endpoint VPC del consumatore di API dalla tua `policy` per il servizio `execute-api`.

------
#### [ Console di gestione AWS ]

**Per rimuovere l'endpoint VPC del consumatore di API dalla tua policy delle risorse**

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

1. Nel pannello di navigazione principale, scegli **Nomi di dominio personalizzati**.

1. Scegli il nome di dominio privato personalizzato che hai condiviso con altri. Account AWS

1. Nella scheda **Policy delle risorse**, seleziona **Modifica**.

1. Rimuovi l'endpoint VPC dalla policy.

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

------
#### [ AWS CLI ]

Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente utilizza un'operazione di patch per aggiornare il `policy` `execute-api` servizio per un nome di dominio personalizzato privato. Questa nuova `policy` rimuove un ulteriore ID endpoint VPC aggiunto in [Consentire ad altri account di invocare il nome di dominio personalizzato privato](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update):

```
aws apigateway update-domain-name
    --domain-name private.example.com \
    --domain-name-id abcd1234 \
    --patch-operations op=replace,path=/policy,value='"{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"]},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\":[\"execute-api:/*\"],\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\": \"vpce-abcd1234efg\"}}}]}"
```

------

Il consumatore di API deve quindi eliminare l'associazione di accesso al nome di dominio. Non puoi farlo tu al suo posto. Per ulteriori informazioni, consulta [Consumatore di API: eliminazione dell'associazione di accesso al nome di dominio con un nome di dominio personalizzato privato](apigateway-private-custom-domains-consumer-delete-domain-name-access-association.md).

# Provider API: condividi il tuo nome di dominio personalizzato privato utilizzando l'API Gateway AWS CLI
<a name="apigateway-private-custom-domains-provider-share-cli"></a>

Puoi condividere un nome di dominio privato personalizzato utilizzando l'API Gateway AWS CLI, ma ti consigliamo di AWS RAM utilizzarlo per ridurre il sovraccarico operativo. Per istruzioni su come AWS RAM condividere il tuo nome di dominio personalizzato privato, consulta[Provider di API: condividi il tuo nome di dominio privato personalizzato utilizzando AWS RAM](apigateway-private-custom-domains-provider-share.md).

Per condividere un nome di dominio privato personalizzato utilizzando l'API Gateway AWS CLI, concedi ad altri Account AWS l'accesso per creare associazioni di accesso ai nomi di dominio e richiamare il tuo nome di dominio personalizzato privato. A tale scopo, è necessario aggiornare la `managementPolicy` del servizio di gestione di Gateway API e la `policy` per il servizio `execute-api` per il tuo nome di dominio personalizzato privato. È inoltre necessario concedere l'accesso all'endpoint VPC del consumatore dell'API nella politica delle risorse per qualsiasi APIs mappato privato al nome di dominio personalizzato privato.

Il consumatore di API dovrà comunque creare un'associazione di accesso al nome di dominio tra il suo endpoint VPC e il tuo nome di dominio personalizzato privato. Non puoi farlo tu al suo posto.

## Concedere l'accesso al nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-share-cli-allow"></a>

**Per concedere l'accesso al tuo nome di dominio personalizzato privato**

1. Per aggiornare la `managementPolicy` del servizio di gestione di Gateway API, è necessario creare un file JSON contenente l'operazione di patch per l'aggiornamento della policy. Quanto segue `patch-managementPolicy.json` sostituisce l'attuale politica `managementPolicy` con un esempio che concede l'accesso Account AWS 111122223333 e 444455556666 per creare associazioni di accesso ai nomi di dominio con il nome di dominio personalizzato privato. `private.example.com`

   ```
   [{
       "op": "replace",
       "path": "/managementPolicy",
       "value": "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam::111122223333:root\", \"arn:aws:iam::444455556666:root\"]},\"Action\":\"apigateway:CreateAccessAssociation\",\"Resource\":\"arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"}]}"
   }]
   ```

    Il comando seguente aggiorna l'utilizzo. [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)`managementPolicy``patch-managementPolicy.json` 

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-managementPolicy.json
   ```

   Una volta concesso l'accesso, devi notificare al consumatore di API che può formare l'associazione di accesso ai nomi di dominio. Se lo usi AWS RAM, AWS RAM farà questo passaggio per te.

1. Per aggiornare la `policy` per il servizio `execute-api`, è necessario creare un file JSON contenente l'operazione di patch per l'aggiornamento della policy. Il seguente `patch-policy.json` sostituisce la `policy` corrente con una policy di esempio che consente a due endpoint VPC di invocare il nome di dominio personalizzato privato `private.example.com`.

   ```
   [{
       "op": "replace",
       "path": "/policy",
       "value": "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\": \"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"},{\"Effect\": \"Deny\",\"Principal\": \"*\",\"Action\": \"execute-api:Invoke\",\"Resource\": \"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\",\"Condition\": {\"StringNotEquals\": {\"aws:SourceVpce\": [\"vpce-abcd1234\",\"vpce-xyzz0000\"]}}}]}"
   }]
   ```

    Usa il seguente [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando per aggiornare l'`policy`utilizzo`patch-policy.json`. 

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-policy.json
   ```

## Negare l'accesso al nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-provider-share-cli-deny"></a>

Per interrompere la condivisione del tuo nome di dominio personalizzato privato, devi rifiutare l'associazione di accesso al nome di dominio tra il tuo nome di dominio personalizzato privato e l'endpoint VPC del consumatore di API.

**Per negare l'accesso al nome di dominio personalizzato privato**

1. Il seguente comando `reject-domain-name-access-association` rifiuta l'associazione di accesso al nome di dominio.

   ```
   aws apigateway reject-domain-name-access-association \
       --domain-name-access-association-arn arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234 \
       --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234
   ```

1. Modifica `patch-managementPolicy.json` per rimuovere l'accesso che consente all'account del provider di API di creare un'associazione di accesso al nome di dominio con il tuo nome di dominio personalizzato privato. Il seguente `patch-managementPolicy.json` rimuove un account dalla `managementPolicy`:

   ```
   [{
        "op": "replace",
        "path": "/managementPolicy",
        "value": "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"apigateway:CreateAccessAssociation\",\"Resource\":\"arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"}]}"
   }]
   ```

   Il seguente [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando aggiorna l'`managementPolicy`utilizzo`patch-managementPolicy.json`. 

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-managementPolicy.json
   ```

1. Modifica `patch-policy.json` per rimuovere l'accesso che consente all'endpoint VPC del provider di API di invocare il tuo nome di dominio personalizzato privato. Il seguente `patch-policy.json` rimuove l'ID dell'endpoint VPC dalla `policy`:

   ```
   [{
       "op": "replace",
       "path": "/policy",
       "value": "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\"},{\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"execute-api:Invoke\",\"Resource\":\"arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234\",\"Condition\":{\"StringNotEquals\":{\"aws:SourceVpce\":\"vpce-abcd1234\"}}}]}"
   }]
   ```

   Il [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-domain-name.html)comando seguente aggiorna l'`policy`utilizzo`patch-policy.json`. 

   ```
   aws apigateway update-domain-name \
       --domain-name private.example.com \
       --domain-name-id abcd1234 \
       --patch-operations file://patch-policy.json
   ```

## Policy di esempio utilizzate in questa procedura
<a name="apigateway-private-custom-domains-provider-share-cli-policies"></a>

Nella sezione seguente sono illustrate le policy di esempio utilizzate nella procedura precedente.

La seguente policy di esempio riguarda `managementPolicy` per il servizio di gestione di Gateway Amazon API. Questa politica concede a Account AWS 111122223333 e 444455556666 l'accesso per creare associazioni di accesso ai nomi di dominio con il nome di dominio personalizzato privato. `private.example.com` 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "111122223333",
                    "444455556666"
                ]
            },
            "Action": "apigateway:CreateAccessAssociation",
            "Resource": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+a1b2c3"
        }
    ]
}
```

------

La seguente policy di esempio riguarda la `policy` per il servizio `execute-api`. Questa policy concede l'accesso agli endpoint VPC `vpce-abcd1234` e `vpce-xyzz0000` per invocare il nome di dominio personalizzato privato.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.example.com+abcd1234",
            "Condition": {
                "StringNotEquals": {
                    "aws:SourceVpce": [
                        "vpce-abcd1234",
                        "vpce-xyzz0000"
                    ]
                }
            }
        }
    ]
}
```

------

# Consumatore di API: associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso
<a name="apigateway-private-custom-domains-consumer-create"></a>

La procedura seguente mostra come utilizzare un nome di dominio privato in un altro Account AWS. A seconda del rapporto di fiducia che intrattenete con il provider di API, AWS RAM potreste completare alcune attività al posto vostro.

Quando ti trovi in un nome di dominio personalizzato diverso Account AWS da quello privato, puoi solo associare il tuo endpoint VPC a un nome di dominio personalizzato privato e richiamarlo. Non puoi visualizzare la `policy` o qualsiasi altro parametro del nome di dominio personalizzato privato.

## Prerequisiti
<a name="apigateway-private-custom-domains-consumer-prerequisites"></a>

I seguenti prerequisiti sono necessari per utilizzare un nome di dominio personalizzato privato in un altro: Account AWS
+ Un VPC e un endpoint VPC per il servizio `execute-api`. Per il VPC, è necessario che `enableDnsHostnames` e `enableDnsSupport` siano impostati su `true`.
+ È consigliabile configurare almeno due zone di disponibilità per endpoint VPC.

## (Facoltativo) Accettare la condivisione di risorse del dominio personalizzato privato
<a name="apigateway-private-custom-domains-consumer-accept-resource-share"></a>

Se il tuo provider di API creava AWS RAM una condivisione di risorse, hai **12 ore** per accettarla. Se fai parte della stessa organizzazione che utilizza AWS Organizations l'API provider, la condivisione viene accettata automaticamente. Se fai parte di un'organizzazione in cui è abilitata la condivisione automatica delle risorse, la risorsa viene condivisa automaticamente con te.

------
#### [ Console di gestione AWS ]

Per utilizzare la Console di gestione AWS, consulta [Accettazione e rifiuto degli inviti alla condivisione di risorse nella Guida](https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html) per l'*AWS RAM utente*. 

------
#### [ AWS CLI ]

Per trovare tutte le risorse condivise con te, usa il seguente comando: [get-resource-share-invitations](https://docs.aws.amazon.com/cli/latest/reference/ram/get-resource-share-invitations.html)

```
aws ram get-resource-share-invitations \
    --region us-west-2
```

Utilizza l'ARN di condivisione risorse risultante per accettare l'invito alla condivisione di risorse. Il [accept-resource-share-invitation](https://docs.aws.amazon.com/cli/latest/reference/ram/accept-resource-share-invitation.html)comando seguente accetta la condivisione delle risorse.

```
aws ram accept-resource-share-invitation \
    --resource-share-invitation-arn arn:aws:ram:us-west-2:123456789012:resource-share-invitation/1e3477be-4a95-46b4-bbe0-c4001EXAMPLE \
    --region us-west-2
```

------

## Associazione dell'endpoint VPC a un nome di dominio personalizzato privato condiviso
<a name="apigateway-private-custom-domains-consumer-associate"></a>

Poiché i nomi di dominio personalizzati privati non sono univoci, devi associare il tuo endpoint VPC all'ARN del nome di dominio personalizzato univoco. Dopo aver creato l'associazione di accesso al nome di dominio, possono essere necessari fino a 15 minuti prima che l'endpoint VPC invochi correttamente il nome di dominio personalizzato privato. Se disponi di un endpoint VPC che utilizzi per accedere a un nome di dominio personalizzato pubblico, non utilizzarlo per creare associazioni di accesso a nomi di dominio. 

------
#### [ Console di gestione AWS ]

**Per associare l'endpoint VPC a un nome di dominio personalizzato privato condiviso**

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

1. Nel pannello di navigazione principale, scegli **Associazioni di accesso ai nomi di dominio**.

1. Scegli **Crea associazione di accesso al nome di dominio**.

1. Per **ARN del nome di dominio**, seleziona l'ARN del nome di dominio che il provider di API ha condiviso con te.

   L'ARN del nome di dominio potrebbe non essere visualizzato nell'elenco a discesa. Puoi utilizzare la AWS RAM console per visualizzare i nomi di dominio condivisi con te, quindi copiare l'ARN del nome di dominio e inserirlo in questo campo.

1. Per **ID endpoint VPC**, seleziona l'ID endpoint VPC con cui desideri creare l'associazione di accesso al nome di dominio.

1. Scegli **Crea associazione di accesso al nome di dominio**.

------
#### [ AWS CLI ]

Poiché i nomi di dominio personalizzati privati non sono univoci, devi associare il tuo endpoint VPC all'ARN del nome di dominio personalizzato univoco. Per trovare l'ARN del nome di dominio, utilizza uno dei comandi seguenti.

1.   
**AWS RAM**  
Il seguente comando [list-resources](https://docs.aws.amazon.com/cli/latest/reference/ram/list-resources.html) elenca le risorse condivise con te. Il provider dell'API deve aver condiviso con te il proprio dominio privato personalizzato per utilizzare questo comando. AWS RAM   

   ```
   aws ram list-resources \
       --resource-owner OTHER-ACCOUNTS \
       --region us-west-2
       --resource-type apigateway:Domainnames
   ```  
**Gateway API**  
Il `get-domain-names` comando seguente elenca tutti i nomi di dominio personalizzati privati di proprietà di altri con Account AWS cui è possibile creare associazioni di accesso ai nomi di dominio.  

   ```
   aws apigateway get-domain-names \
       --resource-owner OTHER_ACCOUNTS \
       --region us-west-2
   ```

1.  Dopo aver recuperato l'ARN, utilizza Gateway API per creare l'associazione di accesso al nome di dominio tra l'endpoint VPC e un nome di dominio personalizzato privato condiviso. Utilizza il seguente comando `create-domain-name-access-association`:

   ```
   aws apigateway create-domain-name-access-association \
       --access-association-source-type VPCE \
       --access-association-source 'vpce-1a2b3c4d5e6f1a2b3' \
       --domain-name-arn arn:aws:apigateway:us-west-2:111122223333:/domainnames/private.example.com+abcd1234"
   ```

   L'output sarà simile al seguente.

   ```
   {
       "domainNameAccessAssociationARN": "arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg", 
       "accessAssociationSource": "vpce-1a2b3c4d5e6f1a2b3",
       "accessAssociationSourceType": "VPCE",
       "domainNameARN" : "arn:aws:apigateway:us-west-1:111122223333:/domainnames/private.example.com+a1b2c3"
   }
   ```

------

Dopo aver associato il tuo endpoint VPC al nome di dominio personalizzato privato, verifica che il tuo provider di API abbia aggiornato la policy del proprio nome di dominio personalizzato privato per consentire al tuo endpoint VPC di invocare il suo nome di dominio. Per ulteriori informazioni, consulta [Consentire ad altri account di invocare il nome di dominio personalizzato privato](apigateway-private-custom-domains-provider-share.md#apigateway-private-custom-domains-provider-policy-update).

## Creazione di una zona ospitata Route 53
<a name="apigateway-private-custom-domains-consumer-create-route-53-private-hosted-zone"></a>

Per risolvere il nome di dominio personalizzato privato, devi creare una zona ospitata privata Route 53. Una zona ospitata è un contenitore che contiene informazioni su come si desidera indirizzare il traffico per un dominio all'interno di uno o più domini VPCs senza esporre le proprie risorse a Internet. Per ulteriori informazioni, consulta [Utilizzo delle zone ospitate private](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html).

------
#### [ Console di gestione AWS ]

Per utilizzare la Console di gestione AWS, consulta [Creazione di una zona ospitata privata](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) nella *Amazon Route 53 Developer Guide*.

Per **Nome**, usa il nome di dominio personalizzato privato. Per **ID VPC**, usa il VPC contenente l'endpoint VPC che hai usato per l'associazione di accesso al nome di dominio.

------
#### [ AWS CLI ]

Il [create-hosted-zone](https://docs.aws.amazon.com/cli/latest/reference/route53/create-hosted-zone.html)comando seguente crea una zona ospitata privata:

```
aws route53 create-hosted-zone --name private.example.com \
    --caller-reference 2014-04-01-18:47 \
    --hosted-zone-config Comment="command-line version",PrivateZone=true \
    --vpc VPCRegion=us-west-2,VPCId=vpc-abcd1234
```

L'output contiene l'ID della zona ospitata. L'ID della zona ospitata viene utilizzato nei passaggi seguenti.

------

## Creazione di un record DNS di Route 53
<a name="apigateway-private-custom-domains-consumer-create-route-53-record"></a>

Dopo aver creato la zona ospitata, devi creare un record per risolvere il dominio personalizzato privato. In questo esempio viene creato un tipo di record A. Se lo utilizzi IPv6 per il tuo endpoint VPC, crea un tipo di record AAAA. Se utilizzi dualstack per il tuo endpoint VPC, crea un tipo di record sia AAAA che A.

------
#### [ Console di gestione AWS ]

Per utilizzare il Console di gestione AWS, consulta [Routing del traffico verso un'API Amazon API Gateway utilizzando il tuo nome di dominio](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-api-gateway.html).

Usa **Creazione rapida** e attiva **Alias**. Per l'endpoint, utilizza il nome DNS dell'endpoint VPC.

------
#### [ AWS CLI ]

Per configurare i record DNS in modo da mappare il nome di dominio personalizzato privato al relativo nome host dell'ID della zona ospitata, devi prima creare un file JSON contenente la configurazione per configurare un record DNS per il nome di dominio privato.

Il seguente `setup-dns-record.json` mostra come creare un record `A` DNS per mappare un nome di dominio personalizzato privato al relativo nome host privato. Fornisci il `DNSName` del tuo ID DNS VPC e l'ID della zona ospitata che hai creato nel passaggio precedente.

```
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "private.example.com",
        "Type": "A",
        "AliasTarget": {
          "DNSName": "vpce-abcd1234.execute-api.us-west-2.vpce.amazonaws.com",
          "HostedZoneId": "Z2OJLYMUO9EFXC",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
```

Il [change-resource-record-sets](https://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html)comando seguente crea un record DNS per il nome di dominio privato personalizzato:

```
aws route53 change-resource-record-sets \
    --hosted-zone-id ZABCDEFG1234 \
    --change-batch file://path/to/your/setup-dns-record.json
```

Sostituisci `hosted-zone-id` con l'ID della zona ospitata di Route 53 del record DNS impostato nel tuo account. Il valore del parametro `change-batch` punta a un file JSON.

------

## Passaggi successivi per un consumatore di API
<a name="apigateway-private-custom-domains-consumer-next-steps"></a>

Ora puoi invocare l'API privata nel tuo Account AWS. Nel tuo VPC, puoi usare il seguente comando curl per accedere al tuo nome di dominio personalizzato privato.

```
curl https://private.example.com/v1
```

Per ulteriori informazioni su altri modi per invocare la tua API privata, consulta [Invocazione di un'API privata utilizzando un nome di dominio personalizzato](apigateway-private-api-test-invoke-url.md#apigateway-private-custom-domains-provider-invoke).

# Consumatore di API: eliminazione dell'associazione di accesso al nome di dominio con un nome di dominio personalizzato privato
<a name="apigateway-private-custom-domains-consumer-delete-domain-name-access-association"></a>

Se sei un consumatore di API, puoi eliminare la risorsa di associazione di accesso in qualsiasi momento. Il provider di API non può eliminare l'associazione di accesso al nome di dominio per te.

È consigliabile eliminare sempre un'associazione di accesso al nome di dominio quando non viene più utilizzata.

------
#### [ Console di gestione AWS ]

**Per eliminare l'associazione di accesso al nome di dominio**

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

1. Nel pannello di navigazione principale, scegli **Associazioni di accesso ai nomi di dominio**.

1. Seleziona l'associazione di accesso al nome di dominio, quindi scegli **Elimina**.

1. Conferma la tua scelta, quindi scegli **Elimina**.

------
#### [ AWS CLI ]

Il seguente comando `delete-access-association` elimina l'associazione di accesso:

```
aws apigateway delete-domain-name-access-association \
    --domain-name-access-association-arn 'arn:aws:apigateway:us-west-2:444455556666:/domainnameaccessassociations/domainname/private.example.com+abcd1234/vpcesource/vpce-abcd1234efg'
```

------

# Crea un nome di dominio personalizzato per uso privato APIs CloudFormation
<a name="apigateway-private-custom-domains-cfn"></a>

Il CloudFormation modello di esempio seguente crea un'API privata e un nome di dominio personalizzato privato, mappa l'API privata al nome di dominio personalizzato e quindi crea un'associazione di accesso al nome di dominio. Devi specificare l'endpoint VPC, il nome di dominio e l'ARN del certificato.

Le seguenti considerazioni potrebbero influire sull'utilizzo di CloudFormation per creare un nome di dominio personalizzato privato:
+ Non puoi rifiutare un'associazione di accesso a un nome di dominio utilizzando. CloudFormation Per rifiutare un'associazione di accesso al nome di dominio, utilizza la AWS CLI.
+ Utilizza la `AWS::ApiGateway::DomainNameV2` CloudFormation proprietà per creare un nome di dominio privato personalizzato.
+ Utilizzate la `AWS::ApiGateway:BasePathMappingV2` CloudFormation proprietà per creare una mappatura del percorso di base.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EndpointID:
    Type: String
    Default: vpce-abcd1234567efg
    Description: A VPC endpoint with enableDnsHostnames and enableDnsSupport set to true.
  DomainName:
    Type: String
    Default: private.example.com
    Description: A domain name that you own.
  CertificateArn:
    Type: String
    Default: arn:aws:acm:us-west-2:123456789:certificate/abcd-000-1234-0000-000000abcd
    Description: An ACM certificate that covers the domain name.
Resources:
  PrivateApi:
    Type: 'AWS::ApiGateway::RestApi'
    Properties:
      EndpointConfiguration:
        Types:
          - PRIVATE
        VpcEndpointIds:
          - !Ref EndpointID
      Name: private-api
      Policy:
        Statement:
          - Action: 'execute-api:Invoke'
            Effect: Allow
            Principal: '*'
            Resource: 'execute-api:/*'
          - Action: 'execute-api:Invoke'
            Condition:
              StringNotEquals:
                'aws:SourceVpce': !Ref EndpointID
            Effect: Deny
            Principal: '*'
            Resource: 'execute-api:/*'
        Version: 2012-10-17		 	 	 
  PrivateApiDeployment:
    Type: 'AWS::ApiGateway::Deployment'
    Properties:
      RestApiId: !Ref PrivateApi
      Description: Private API deployment
    DependsOn:
      - PrivateApiMethod
  PrivateApiStage:
    Type: 'AWS::ApiGateway::Stage'
    Properties:
      RestApiId: !Ref PrivateApi
      DeploymentId: !Ref PrivateApiDeployment
      StageName: prod
  PrivateApiMethod: 
    Type: 'AWS::ApiGateway::Method'
    Properties:
      HttpMethod: ANY
      ResourceId: !GetAtt PrivateApi.RootResourceId
      RestApiId: !Ref PrivateApi
      AuthorizationType: NONE
      Integration:
        Type: MOCK
        RequestTemplates:
          application/json: "{\"statusCode\": 200}"
        IntegrationResponses:
          - StatusCode: '200'
      MethodResponses:
        - StatusCode: '200'
  PrivateDomainName:
    Type: AWS::ApiGateway::DomainNameV2
    Properties:
      DomainName: !Ref DomainName
      CertificateArn: !Ref CertificateArn
      EndpointConfiguration:
        Types:
          - PRIVATE
      SecurityPolicy: TLS_1_2
      Policy:
        Statement:
            - Action: 'execute-api:Invoke'
              Effect: Allow
              Principal: '*'
              Resource: 'execute-api:/*'
            - Action: 'execute-api:Invoke'
              Condition:
                StringNotEquals:
                  'aws:SourceVpce': !Ref EndpointID
              Effect: Deny
              Principal: '*'
              Resource: 'execute-api:/*'
        Version: 2012-10-17		 	 	 
  PrivateBasePathMapping:
    Type: AWS::ApiGateway::BasePathMappingV2
    DependsOn:
      - PrivateApiStage
    Properties:
      BasePath: prod
      DomainNameArn: !GetAtt PrivateDomainName.DomainNameArn
      RestApiId: !Ref PrivateApi
      Stage: prod
  DomainNameAccessAssociation: 
    Type: AWS::ApiGateway::DomainNameAccessAssociation
    Properties:
      DomainNameArn: !GetAtt PrivateDomainName.DomainNameArn
      AccessAssociationSource: !Ref EndpointID
      AccessAssociationSourceType: VPCE
```

# Invocazione di un'API privata
<a name="apigateway-private-api-test-invoke-url"></a>

Puoi invocare un'API privata solo dall'interno di un VPC utilizzando un endpoint VPC. La tua API privata deve avere una politica delle risorse che consenta a endpoint specifici VPCs e VPC di richiamare la tua API.

Se richiami un'API privata senza utilizzare un nome di dominio personalizzato o nomi DNS privati e il tuo APIs nome di dominio utilizza una politica di sicurezza che inizia con`SecurityPolicy_`, devi impostare la modalità di accesso all'endpoint su. `BASIC` Per ulteriori informazioni, consulta [Modalità di accesso agli endpoint](apigateway-security-policies.md#apigateway-security-policies-endpoint-access-mode).

## Invocazione di un'API privata utilizzando un nome di dominio personalizzato
<a name="apigateway-private-custom-domains-provider-invoke"></a>

Per invocare un'API privata utilizzando un nome di dominio personalizzato, è necessario che l'endpoint VPC disponga di un'associazione di accesso ai nomi di dominio con un nome di dominio personalizzato e il nome di dominio personalizzato deve consentire l'accesso affinché l'endpoint VPC possa invocarla. Per ulteriori informazioni, consulta [Nomi di dominio personalizzati per uso privato APIs in API Gateway](apigateway-private-custom-domains.md).

Non ci sono differenze tra invocare un nome di dominio privato personalizzato in un VPC Account AWS proprio o in un altro. Account AWS

### Uso del nome di dominio personalizzato
<a name="apigateway-private-custom-domains-invoke-1"></a>

All'interno del tuo VPC, puoi invocare la tua API utilizzando il nome di dominio personalizzato. L'esempio seguente è un comando curl per invocare il tuo nome di dominio personalizzato privato:

```
curl https://private.example.com
```

### Uso di nomi host DNS privati specifici dell'endpoint
<a name="apigateway-private-custom-domains-invoke-2"></a>

È possibile invocare l’API utilizzando il nome di dominio personalizzato come nome host DNS privato specifico dell’endpoint.

```
curl https://private-dns-hostname.execute-api.region.vpce.amazonaws.com/basepath -H 'Host:custom-domain-name'
```

L’esempio seguente è un comando curl per invocare il nome di dominio personalizzato utilizzando il nome host DNS privato specifico dell’endpoint:

```
curl https://vpce-123456-abc000.execute-api.us-east-2.vpce.amazonaws.com/test -H 'Host:private.example.com'
```

## Invocazione di un'API privata senza utilizzare un nome di dominio personalizzato
<a name="apigateway-private-api-invoke-without-custom-domain-name"></a>

Per invocare la tua API privata senza utilizzare un nome di dominio personalizzato, devi identificare i nomi DNS per l'API. La procedura seguente mostra come trovare i nomi DNS.

------
#### [ Console di gestione AWS ]

**Per trovare i nomi DNS**

1. Accedi Console di gestione AWS e apri la console Amazon VPC all'indirizzo. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Nel pannello di navigazione principale, scegli **Endpoint**, quindi seleziona l'endpoint VPC dell'interfaccia per Gateway API.

1. Nel riquadro **Dettagli** verranno visualizzati 5 valori nel campo **Nomi DNS**. I primi tre sono i nomi DNS pubblici per l'API. Gli altri due sono i nomi DNS privati.

------
#### [ AWS CLI ]

Usa il seguente [describe-vpc-endpoints](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html)comando per elencare i tuoi valori DNS.

```
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids vpce-01234567abcdef012
```

I primi tre sono i nomi DNS pubblici per l'API. Gli altri due sono i nomi DNS privati.

------

### Invocazione di un'API privata utilizzando un alias Route53
<a name="apigateway-private-api-route53-alias"></a>

È possibile associare o dissociare un endpoint VPC da una REST API privata. Per ulteriori informazioni, consulta [(Facoltativo) Associazione o dissociazione di un endpoint VPC da una REST API privata](apigateway-private-api-create.md#associate-private-api-with-vpc-endpoint).

Dopo aver associato gli endpoint VPC alla tua API privata, puoi utilizzare il seguente URL di base per invocare l'API:

```
https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}
```

Ad esempio, se hai configurato il metodo `GET /pets` per la fase `test` e se l'ID REST API era `01234567ab`, il tuo ID endpoint VPC era `vpce-01234567abcdef012` e la Regione era `us-west-2`, puoi invocare la tua API come:

```
curl -v https://01234567ab-vpce-01234567abcdef012.execute-api.us-west-2.amazonaws.com/test/pets
```

### Invocazione di un'API privata utilizzando i nomi DNS privati
<a name="w2aac15c20c17c17b9b9"></a>

Se hai abilitato il DNS privato, puoi accedere all'API privata utilizzando i seguenti nomi DNS privati:

```
{restapi-id}.execute-api.{region}.amazonaws.com
```

L'URL di richiamata di base dell'API è nel formato seguente:

```
https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage}
```

Ad esempio, se hai configurato il metodo `GET /pets` per la fase `test` e se l'ID REST API era `01234567ab` e la tua Regione era `us-west-2`, puoi invocare la tua API privata inserendo il seguente URL in un browser:

```
https://01234567ab.execute-api.us-west-2.amazonaws.com/test/pets
```

In alternativa, puoi utilizzare il seguente comando cURL per invocare l'API privata:

```
curl -X GET https://01234567ab.execute-api.us-west-2.amazonaws.com/test/pets 
```

**avvertimento**  
Se abiliti il DNS privato per il tuo endpoint VPC, non sarai in grado di accedere all'endpoint pubblico predefinito. APIs Per ulteriori informazioni, consulta [Perché non riesco a connettere un endopoint VPC di API Gateway alla mia API pubblica?](https://repost.aws/knowledge-center/api-gateway-vpc-connections).

### Invoca un'API privata utilizzando Direct Connect
<a name="w2aac15c20c17c17b9c11"></a>

Puoi utilizzarlo Direct Connect per stabilire una connessione privata dedicata da una rete locale ad Amazon VPC e accedere al tuo endpoint API privato tramite tale connessione utilizzando nomi DNS pubblici.

Puoi anche utilizzare nomi DNS privati per accedere alla tua API privata da una rete locale configurando un endpoint in Amazon Route 53 Resolver entrata e inoltrando tutte le query DNS del DNS privato dalla tua rete remota. Per ulteriori informazioni, consulta [Inoltro delle query DNS in entrata al tuo indirizzo nella](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html) *Amazon* Route 53 VPCs Developer Guide.

### Invocazione di un'API privata tramite nomi host DNS pubblici specifici dell'endpoint
<a name="apigateway-private-api-public-dns"></a>

Puoi accedere all'API privata tramite nomi host DNS specifici dell'endpoint Si tratta di nomi host del DNS pubblico che contengono l'ID dell'endpoint VPC o l'ID dell'API per la tua API privata.

L'URL di base generato è nel formato seguente:

```
https://{public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com/{stage}
```

Ad esempio, se hai impostato il `GET /pets` metodo per lo `test` stage e il tuo ID API REST era`abc1234`, il suo hostname DNS pubblico era e la tua regione sì `vpce-def-01234567``us-west-2`, puoi richiamare la tua API privata utilizzando il suo VPCe ID utilizzando l'`Host`intestazione in un comando cURL:

```
curl -v https://vpce-def-01234567.execute-api.us-west-2.vpce.amazonaws.com/test/pets -H 'Host: abc1234.execute-api.us-west-2.amazonaws.com'
```

In alternativa, puoi invocare la tua API privata tramite il relativo ID utilizzando l'intestazione `x-apigw-api-id` in un comando cURL con il seguente formato:

```
curl -v https://{public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com/{stage} -H 'x-apigw-api-id:{api-id}'
```

# Monitoraggio delle REST API in Gateway API
<a name="rest-api-monitor"></a>

In questa sezione verrà illustrato come monitorare le API utilizzando le metriche CloudWatch, CloudWatch Logs, Firehose e AWS X-Ray. Combinando i log di esecuzione i parametri di CloudWatch, è possibile registrare errori e tracciamenti di esecuzione, nonché monitorare le prestazioni dell'API. È possibile anche registrare i log delle chiamate API in Firehose. Inoltre, puoi utilizzare AWS X-Ray per tracciare le chiamate tramite i servizi di downstream che compongono l'API.

**Nota**  
L'API Gateway potrebbe non generare log e parametri nei seguenti casi:  
Errori 413 per richiesta troppo grande
Errori 431 Campi intestazione richiesta troppo grandi
Errori 429 per troppe richieste
Errori serie 400 per richieste inviate a un dominio personalizzato che non dispone del mapping API
Errori serie 500 per malfunzionamenti interni
API Gateway non genererà log e parametri durante il test di un metodo REST API. Le voci CloudWatch sono simulate. Per ulteriori informazioni, consulta [Utilizzo della console API Gateway per il test di un metodo API REST](how-to-test-method.md).

**Topics**
+ [Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon](monitoring-cloudwatch.md)
+ [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md)
+ [Registrazione dei log delle chiamate REST API su Amazon Data Firehose in Gateway API](apigateway-logging-to-kinesis.md)
+ [Variabili per la registrazione dei log degli accessi per Gateway API](api-gateway-variables-for-access-logging.md)
+ [Traccia delle richieste degli utenti alle REST API utilizzando X-Ray in Gateway API](apigateway-xray.md)

# Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon
<a name="monitoring-cloudwatch"></a>

Puoi monitorare l'esecuzione delle API utilizzando CloudWatch, che raccoglie ed elabora i dati grezzi da API Gateway in metriche leggibili. near-real-time Queste statistiche vengono registrate per un periodo di 15 mesi, per permettere l'accesso alle informazioni storiche e offrire una prospettiva migliore sulle prestazioni del servizio o dell'applicazione Web. Per impostazione predefinita, i dati metrici di API Gateway vengono inviati automaticamente CloudWatch in periodi di un minuto. Per ulteriori informazioni, consulta [What Is Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) nella *Amazon CloudWatch User Guide*.

I parametri forniti dall'API Gateway offrono informazioni che possono essere analizzate in diversi modi. L'elenco seguente mostra alcuni usi comuni dei parametri che sono suggerimenti per iniziare:
+ Monitora le **IntegrationLatency**metriche per misurare la reattività del backend.
+ Monitora i parametri **Latency** per misurare la velocità di risposta complessiva delle chiamate API.
+ Monitora le metriche **CacheHitCount**e le **CacheMissCount**metriche per ottimizzare le capacità della cache e ottenere le prestazioni desiderate.

**Topics**
+ [Dimensioni e parametri di Amazon API Gateway](api-gateway-metrics-and-dimensions.md)
+ [Visualizzazione dei parametri di CloudWatch con il pannello di controllo delle API in API Gateway](how-to-api-dashboard.md)
+ [Visualizza le metriche dell'API Gateway nella console CloudWatch](metrics_dimensions_view_in_cloud_watch.md)
+ [Visualizza gli eventi di registro dell'API Gateway nella CloudWatch console](view-cloudwatch-log-events-in-cloudwatch-console.md)
+ [Strumenti di monitoraggio in AWS API Gateway](monitoring_automated_manual.md)

# Dimensioni e parametri di Amazon API Gateway
<a name="api-gateway-metrics-and-dimensions"></a>

Le metriche e le dimensioni che API Gateway invia ad Amazon CloudWatch sono elencate di seguito. Per ulteriori informazioni, consulta [Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon](monitoring-cloudwatch.md). 

## Parametri di API Gateway
<a name="api-gateway-metrics"></a>

Amazon API Gateway invia dati metrici CloudWatch ogni minuto.

Lo spazio dei nomi `AWS/ApiGateway` include le metriche descritte di seguito.


| Metrica | Descrizione | 
| --- | --- | 
|  4XXError |  Il numero di errori lato client catturati in un dato periodo. API Gateway conta i codici di stato di risposta del gateway modificati come 4 XXError errori. La statistica `Sum` rappresenta questo parametro, ovvero il numero totale di errori 4XXError nel dato periodo. La statistica `Average` rappresenta la percentuale di errori 4XXError nel dato periodo, ovvero il numero totale di errori 4XXError diviso per il numero totale di richieste durante il periodo. Il denominatore corrisponde al parametro Count (di seguito). Unit: Count  | 
|  5XXError  |  Il numero di errori lato server catturati in un dato periodo. La statistica `Sum` rappresenta questo parametro, ovvero il numero totale di errori 5XXError nel dato periodo. La statistica `Average` rappresenta la percentuale di errori 5XXError nel dato periodo, ovvero il numero totale di errori 5XXError diviso per il numero totale di richieste durante il periodo. Il denominatore corrisponde al parametro Count (di seguito). Unit: Count  | 
|  CacheHitCount  |  Il numero di richieste servite dalla cache API in un dato periodo. La statistica `Sum` rappresenta questo parametro, ovvero il numero totale di riscontri nella cache nel dato periodo. La statistica `Average` rappresenta la percentuale di riscontri nella cache, ovvero il numero totale di riscontri nella cache diviso per il numero totale di richieste durante il periodo. Il denominatore corrisponde al parametro Count (di seguito). Unit: Count  | 
|  CacheMissCount  |  Il numero di richieste servite dal back-end in un dato periodo, quando la memorizzazione nella cache delle API è abilitata. La statistica `Sum` rappresenta questo parametro, ovvero il numero totale di mancati riscontri nella cache nel dato periodo. La statistica `Average` rappresenta la percentuale di mancati riscontri nella cache, ovvero il numero totale di mancati riscontri nella cache diviso per il numero totale di richieste durante il periodo. Il denominatore corrisponde al parametro Count (di seguito). Unit: Count  | 
|  Count  |  Il numero totale di richieste API in un dato periodo. La statistica `SampleCount` rappresenta questo parametro. Unit: Count  | 
|  IntegrationLatency  |  Il tempo che intercorre tra il momento in cui API Gateway ritrasmette una richiesta al back-end e quando riceve da questo una risposta. Unit: Millisecond  | 
|  Latency  |  Il tempo che intercorre tra il momento in cui API Gateway riceve una richiesta dal client e quando restituisce ad esso una risposta. La latenza include la latenza di integrazione e altri sovraccarichi dell'API Gateway. Unit: Millisecond  | 

## Dimensioni per i parametri
<a name="api-gateway-metricdimensions"></a>

Per filtrare i parametri di API Gateway, puoi utilizzare le dimensioni nella seguente tabella.

**Nota**  
API Gateway rimuove i caratteri non ASCII dalla ApiName dimensione prima di inviare le metriche a. CloudWatch Se APIName non contiene caratteri ASCII, API ID viene utilizzato come ApiName.


| Dimensione | Descrizione | 
| --- | --- | 
|  ApiName  |  Filtra i parametri dell'API Gateway per l’API REST con il nome API specificato.  | 
|  ApiName, Method, Resource, Stage  |  Filtra i parametri dell'API Gateway per il metodo API con nome API, fase, risorsa e metodo specificati. API Gateway non invierà queste metriche a meno che tu non abbia abilitato esplicitamente le metriche dettagliate CloudWatch . Nella console, scegli una fase, quindi seleziona **Modifica** per **Log e tracciamento**. Seleziona **Parametri dettagliati**, quindi scegli **Salva modifiche**. In alternativa, puoi chiamare il AWS CLI comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) per aggiornare la proprietà a. `metricsEnabled` `true` L'abilitazione di questi parametri comporta addebiti aggiuntivi sul tuo account. Per informazioni sui prezzi, consulta la pagina [ CloudWatchdei prezzi di Amazon](https://aws.amazon.com/cloudwatch/pricing/).  | 
|  ApiName, Stage  |  Filtra i parametri di API Gateway per la risorsa della fase API con il nome e la fase specificati per l'API.  | 

# Visualizzazione dei parametri di CloudWatch con il pannello di controllo delle API in API Gateway
<a name="how-to-api-dashboard"></a>

È possibile utilizzare il pannello di controllo delle API nella console API Gateway per visualizzare i parametri di CloudWatch dell'API distribuita in API Gateway. Tali parametri sono visualizzati come un riepilogo delle attività delle API nel corso del tempo. 

**Topics**
+ [Prerequisiti](#how-to-api-dashboard-prerequisites)
+ [Esame delle attività nel pannello di controllo delle API](#how-to-api-dashboard-console)

## Prerequisiti
<a name="how-to-api-dashboard-prerequisites"></a>

1. Devi aver creato un'API in API Gateway. Segui le istruzioni in [Sviluppa REST APIs in API Gateway](rest-api-develop.md).

1. Devi avere distribuito l'API almeno una volta. Segui le istruzioni in [Implementazione di REST API in Gateway API](how-to-deploy-api.md).

## Esame delle attività nel pannello di controllo delle API
<a name="how-to-api-dashboard-console"></a>

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

1. Scegliere un'API.

1. Nel pannello di navigazione principale, seleziona **Pannello di controllo**.

1. In **Fase**, scegli la fase desiderata.

1. Scegli **Intervallo di date** per specificare un intervallo di date.

1. Aggiorna, se necessario, e visualizza le singole metriche presenti nei grafici intitolati **Chiamate API**, **Latenza**, **Latenza di integrazione**, **Latenza**, **Errore 4xx** ed **Errore 5xx**.
**Suggerimento**  
Per esaminare i parametri di CloudWatch a livello di metodo, assicurarsi di aver attivato CloudWatch Logs a livello di metodo. Per ulteriori informazioni su come configurare la registrazione dei log a livello di metodo, consultare [Sostituzione delle impostazioni a livello di fase](set-up-stages.md#how-to-method-override).

# Visualizza le metriche dell'API Gateway nella console CloudWatch
<a name="metrics_dimensions_view_in_cloud_watch"></a>

I parametri vengono raggruppati prima in base allo spazio dei nomi del servizio e successivamente in base alle diverse combinazioni di dimensioni all'interno di ogni spazio dei nomi. Per visualizzare le metriche a livello di metodo per l'API, attiva le metriche dettagliate. Per ulteriori informazioni, consulta [Modifica delle impostazioni di fase](set-up-stages.md#how-to-stage-settings).

**Per visualizzare le metriche dell'API Gateway utilizzando la console CloudWatch**

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Se necessario, modifica Regione AWS. Dalla barra di navigazione, seleziona la regione in cui risiedono AWS le tue risorse.

1. Nel riquadro di navigazione, seleziona **Parametri**.

1. Nella scheda **All metrics (Tutti i parametri)**, scegliere **API Gateway (Gateway API)**. 

1.  Per visualizzare i parametri in base alla fase, selezionare il pannello **By Stage (Per fase)**. Quindi, seleziona il tuo nome APIs e quello delle metriche. 

1. Per visualizzare i parametri in base a un'API specifica, selezionare il pannello **API Name (Nome API)**. Quindi, seleziona il tuo nome APIs e quello delle metriche.

**Per visualizzare le metriche utilizzando la CLI AWS**

1. Utilizza il seguente comando [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) per elencare le metriche:

   ```
   aws cloudwatch list-metrics --namespace "AWS/ApiGateway"
   ```

   Dopo aver creato una metrica, occorrono fino a 15 minuti perché venga visualizzata. Per visualizzare più rapidamente le statistiche delle metriche, usa o. [get-metric-data[get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/update-domain-name.html)](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/update-domain-name.html)

1. Utilizzate il seguente [get-metrics-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html)comando per visualizzare la media su un periodo di tempo utilizzando intervalli di 5 minuti:

   ```
   aws cloudwatch get-metric-statistics --namespace AWS/ApiGateway --metric-name Count --start-time 2011-10-03T23:00:00Z --end-time 2017-10-05T23:00:00Z --period 300 --statistics Average
   ```

# Visualizza gli eventi di registro dell'API Gateway nella CloudWatch console
<a name="view-cloudwatch-log-events-in-cloudwatch-console"></a>

La sezione seguente spiega i prerequisiti necessari e come visualizzare gli eventi di registro di API Gateway nella CloudWatch console.

## Prerequisiti
<a name="view-cloudwatch-log-event-prerequisites"></a>

1. Devi aver creato un'API in API Gateway. Segui le istruzioni in [Sviluppa REST APIs in API Gateway](rest-api-develop.md).

1. È necessario avere implementato e richiamato l'API almeno una volta. A tale scopo, segui le istruzioni riportate in [Implementazione di REST API in Gateway API](how-to-deploy-api.md) e [Invocazione di REST API in Gateway API](how-to-call-api.md).

1. È necessario che CloudWatch i log siano abilitati per una fase. Segui le istruzioni in [Configurare la CloudWatch registrazione per REST APIs in API Gateway](set-up-logging.md).

## Per visualizzare le richieste e le risposte API registrate utilizzando la console CloudWatch
<a name="view-cloudwatch-log-event"></a>

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Se necessario, modifica Regione AWS. Dalla barra di navigazione, seleziona la regione in cui risiedono AWS le tue risorse. Per ulteriori informazioni, consulta [Regioni ed endpoint](https://docs.aws.amazon.com/general/latest/gr/rande.html).

1. Nel pannello di navigazione a sinistra, scegli **Log**, **Gruppi di log**.

1. Nella tabella **Log Groups**, scegliete un gruppo di log del nome **API-Gateway-Execution-Logs\$1** \$1\$1/\$1stage-name\$1. rest-api-id 

1.  Nella tabella **Log Streams (Flussi di log)**, scegliere un flusso di log. Puoi utilizzare il timestamp per individuare il flusso di log che ti interessa. 

1. Selezionare **Text (Testo)** per vedere il testo non elaborato o scegliere **Row (Riga)** per visualizzare l'evento riga dopo riga.

**Importante**  
 CloudWatch consente di eliminare gruppi o stream di log. Non eliminare manualmente i gruppi o i flussi di log delle API di API Gateway, lasciare che sia API Gateway a gestire queste risorse. L'eliminazione manuale dei flussi e dei gruppi di log potrebbe causare la mancata registrazione delle richieste e delle risposte dell'API. In tal caso puoi eliminare l'intero gruppo di log dell'API e ridistribuire l'API. Ciò accade perché il Gateway API crea flussi o gruppi di log per una fase API nel momento in cui viene distribuita. 

# Strumenti di monitoraggio in AWS API Gateway
<a name="monitoring_automated_manual"></a>

AWS fornisce vari strumenti che è possibile utilizzare per monitorare API Gateway. Alcuni di questi strumenti possono essere configurati in modo che eseguano automaticamente il monitoraggio, mentre altri richiedono l'intervento manuale. Si consiglia di automatizzare il più possibile i processi di monitoraggio.

## Strumenti di monitoraggio automatizzati in AWS
<a name="monitoring_automated_tools"></a>

Per controllare l'API Gateway e segnalare l'eventuale presenza di problemi è possibile usare i seguenti strumenti di monitoraggio automatici:
+ **Amazon CloudWatch Alarms**: monitora una singola metrica in un periodo di tempo specificato ed esegui una o più azioni in base al valore della metrica rispetto a una determinata soglia in diversi periodi di tempo. L'azione è una notifica inviata a un argomento di Amazon Simple Notification Service (Amazon SNS) o a una policy di Amazon EC2 Auto Scaling. CloudWatch gli allarmi non richiamano azioni semplicemente perché si trovano in uno stato particolare; lo stato deve essere cambiato e mantenuto per un determinato numero di periodi. Per ulteriori informazioni, consulta [Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon](monitoring-cloudwatch.md).
+ **Amazon CloudWatch Logs**: monitora, archivia e accedi ai tuoi file di registro da AWS CloudTrail o altre fonti. Per ulteriori informazioni, consulta [What is CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) nella *Amazon CloudWatch User Guide*.
+ **Amazon EventBridge (precedentemente chiamato CloudWatch Events)**: abbina gli eventi e li indirizza a una o più funzioni o flussi di destinazione per apportare modifiche, acquisire informazioni sullo stato e intraprendere azioni correttive. Per ulteriori informazioni, consulta [What Is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) nella *Guida EventBridge per l'utente*.
+ **AWS CloudTrail Monitoraggio dei** registri: condividi i file di CloudTrail registro tra account, monitora i file di registro in tempo reale inviandoli a CloudWatch Logs, scrivi applicazioni di elaborazione dei log in Java e verifica che i file di registro non siano stati modificati dopo la consegna da parte di. CloudTrail Per ulteriori informazioni, consulta [Lavorare con i file di CloudTrail registro nella Guida](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html) per l'*AWS CloudTrail utente*. 

## Strumenti di monitoraggio manuali
<a name="monitoring_manual_tools"></a>

Un'altra parte importante del monitoraggio di API Gateway riguarda il monitoraggio manuale degli elementi che gli CloudWatch allarmi non coprono. L'API Gateway e altre dashboard della AWS console forniscono una at-a-glance panoramica dello stato dell' AWS ambiente. CloudWatch Consigliamo anche di controllare i file di log nell'esecuzione dell'API.
+ Il pannello di controllo di API Gateway mostra le seguenti statistiche per una determinata fase API nel corso di un determinato periodo di tempo:
  + **API Calls (Chiamate API)**
  + **Cache HIt (Riscontri nella cache)** solo quando è abilitato il caching dell'API.
  + **Cache Miss (Mancato riscontro nella cache)** solo quando è abilitato il caching dell'API.
  + **Latenza**
  + **Integration Latency (Latenza di integrazione)**
  + **4XX Error (Errore 4XX)**
  + **5XX Error (Errore 5XX)**
+ La CloudWatch home page mostra:
  + Stato e allarmi attuali
  + Grafici degli allarmi e delle risorse
  + Stato di integrità dei servizi

  Inoltre, è possibile utilizzare CloudWatch per effettuare le seguenti operazioni: 
  + Crea [pannelli di controllo personalizzati](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html) per monitorare i servizi di interesse.
  + Crea grafici dei dati dei parametri per la risoluzione di problemi e il rilevamento di tendenze.
  + Cerca e sfoglia tutte le metriche AWS delle tue risorse
  + Crea e modifica gli allarmi per ricevere le notifiche dei problemi.

## Creazione di CloudWatch allarmi per monitorare API Gateway
<a name="creating_alarms"></a>

Puoi creare un CloudWatch allarme che invia un messaggio Amazon SNS quando l'allarme cambia stato. Un allarme controlla un singolo parametro in un periodo di tempo specificato ed esegue una o più operazioni in base al valore del parametro relativo a una determinata soglia in una serie di periodi di tempo. L'operazione corrisponde all'invio di una notifica a un argomento di Amazon SNS o a una policy di Auto Scaling. Gli allarmi richiamano azioni solo per cambiamenti di stato sostenuti. CloudWatch gli allarmi non richiamano azioni semplicemente perché si trovano in uno stato particolare; lo stato deve essere cambiato e mantenuto per un determinato numero di periodi.

# Configurare la CloudWatch registrazione per REST APIs in API Gateway
<a name="set-up-logging"></a>

 Per risolvere i problemi relativi all'esecuzione della richiesta o all'accesso del client alla tua API, puoi abilitare Amazon CloudWatch Logs per registrare le chiamate API. Per ulteriori informazioni su CloudWatch, consulta. [Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon](monitoring-cloudwatch.md)

## CloudWatch formati di registro per API Gateway
<a name="apigateway-cloudwatch-log-formats"></a>

 Esistono due tipi di accesso tramite API CloudWatch: registrazione dell'esecuzione e registrazione degli accessi. Nella registrazione dell'esecuzione, API Gateway gestisce i CloudWatch log. Il processo include la creazione di gruppi e flussi di log e la segnalazione ai flussi di log delle richieste e delle risposte dell'intermediario. 

I dati registrati nei log includono errori o tracce di esecuzione (come valori di parametri di richiesta o di risposta oppure payload), dati usati da sistemi di autorizzazione Lambda (noti in precedenza come sistemi di autorizzazione ad hoc), indicazioni sull'eventuale necessità di chiavi API e sull'eventuale abilitazione dei piani di utilizzo e altre informazioni. Gateway API oscura le intestazioni di autorizzazione, i valori delle chiavi API e parametri di richiesta sensibili simili dai dati registrati nei log.

Per migliorare il livello di sicurezza, è consigliabile utilizzare la registrazione nei log dell’esecuzione a livello di `ERROR` o `INFO`. Potrebbe essere necessario eseguire questa operazione per rispettare vari framework di conformità. Per ulteriori informazioni, consultare [Amazon API Gateway controls](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) nella *Guida per l’utente di AWS Security Hub *.

Quando si distribuisce un'API, API Gateway crea un gruppo di log e i relativi flussi. Al gruppo di log viene assegnato un nome nel formato `API-Gateway-Execution-Logs_{rest-api-id}/{stage_name}`. All'interno di ciascun gruppo, i log sono suddivisi ulteriormente in flussi, che vengono ordinati in base al valore **Last Event Time** (Ora ultimo evento) quando vengono riportati i dati registrati. 

Nella registrazione degli accessi, in qualità di sviluppatore dell'API puoi registrare chi ha avuto accesso alla tua API e in che modo l'intermediario ha avuto accesso all'API. Puoi creare un gruppo di log personalizzato o sceglierne uno esistente che potrebbe essere gestito da API Gateway. Per specificare i dettagli di accesso, seleziona le variabili [`$context`](api-gateway-variables-for-access-logging.md), un formato di log e un gruppo di log come destinazione.

Il formato del log di accesso deve includere almeno `$context.requestId` o `$context.extendedRequestId`. Come best practice, includere `$context.requestId` e `$context.extendedRequestId` nel formato di log.

**`$context.requestId`**  
In questo modo il valore dell'intestazione `x-amzn-RequestId` viene registrato nel log. I client possono sostituire il valore nell'intestazione `x-amzn-RequestId` con un valore nel formato di un identificatore univoco universale (UUID). API Gateway restituisce questo ID richiesta nell'intestazione della risposta di `x-amzn-RequestId`. API Gateway sostituisce le richieste sovrascritte IDs che non sono in formato UUID nei log di accesso. `UUID_REPLACED_INVALID_REQUEST_ID`

**`$context.extendedRequestId`**  
Il valore di extendedRequestID è un ID univoco generato da Gateway API. API Gateway restituisce questo ID richiesta nell'intestazione della risposta di `x-amz-apigw-id`. Un caller API non può fornire o ignorare questo ID di richiesta. Potrebbe essere necessario fornire questo valore a AWS Support per risolvere i problemi dell'API. Per ulteriori informazioni, consulta [Variabili per la registrazione dei log degli accessi per Gateway API](api-gateway-variables-for-access-logging.md).

Seleziona un formato di log adottato anche dal back-end analitico, ad esempio [Common Log Format](https://httpd.apache.org/docs/current/logs.html#common) (CLF), JSON, XML o CSV. Quindi puoi alimentarlo direttamente con i log di accesso per l'elaborazione e il rendering dei parametri. [Per definire il formato di registro, impostate l'ARN del gruppo di log sulla proprietà [accessLogSettings/destinationARN](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#destinationArn) sullo stage.](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) È possibile ottenere un ARN del gruppo di log nella CloudWatch console. [Per definire il formato del registro degli accessi, impostate un formato scelto nella proprietà [accessLogSetting/format](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#format) sullo stage.](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html) 

Esempi di alcuni formati di log delle operazioni di accesso utilizzati con maggiore frequenza sono mostrati nella console API Gateway ed elencati qui di seguito.
+ `CLF` ([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime]"$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  ```
+  `JSON`: 

  ```
  { "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId","ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod", "resourcePath":"$context.resourcePath", "status":"$context.status", "protocol":"$context.protocol", "responseLength":"$context.responseLength" }
  ```
+ `XML`: 

  ```
  <request id="$context.requestId"> <extendedRequestId>$context.extendedRequestId</extendedRequestId> <ip>$context.identity.sourceIp</ip> <caller>$context.identity.caller</caller> <user>$context.identity.user</user> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <resourcePath>$context.resourcePath</resourcePath> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> </request>
  ```
+ `CSV` (valori separati da virgola):

  ```
  $context.identity.sourceIp,$context.identity.caller,$context.identity.user,$context.requestTime,$context.httpMethod,$context.resourcePath,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId
  ```

## Autorizzazioni per la registrazione CloudWatch
<a name="set-up-access-logging-permissions"></a>

Per abilitare CloudWatch i log, devi concedere ad API Gateway l'autorizzazione a leggere e scrivere i log del tuo CloudWatch account. [Amazon APIGateway PushToCloudWatchLogs](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAPIGatewayPushToCloudWatchLogs.html) dispone di tutte le autorizzazioni necessarie.

**Nota**  
Chiama AWS Security Token Service API Gateway per assumere il ruolo IAM, quindi assicurati che AWS STS sia abilitato per la regione. Per ulteriori informazioni, consulta [Managing AWS STS in an AWS Region](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html).

[https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html#cloudWatchRoleArn](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html#cloudWatchRoleArn) È necessario impostare la proprietà [cloudWatchRoleArn](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html#cloudWatchRoleArn) separatamente per ogni AWS regione in cui si desidera abilitare i log. CloudWatch 

Se ricevi un errore durante l'impostazione dell'ARN del ruolo IAM, controlla le impostazioni AWS Security Token Service dell'account per assicurarti che AWS STS sia abilitato nella regione che stai utilizzando. Per ulteriori informazioni sull'abilitazione AWS STS, consulta [Managing AWS STS in an AWS Region nella](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate) *IAM User Guide*.

## Configurare la registrazione delle CloudWatch API utilizzando la console API Gateway
<a name="set-up-access-logging-using-console"></a>

Per configurare la registrazione CloudWatch dell'API, è necessario aver distribuito l'API in una fase. È inoltre necessario aver configurato [un ARN del ruolo CloudWatch Logs appropriato](#set-up-access-logging-permissions) per il proprio account. 

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

1. Nel pannello di navigazione principale, scegli **Impostazioni**, quindi in **Registrazione** seleziona **Modifica**. 

1. Per l'**ARN del ruolo di CloudWatch registro**, inserisci l'ARN di un ruolo IAM con le autorizzazioni appropriate. È necessario eseguire questa operazione una volta per ogni Account AWS creazione creata APIs utilizzando API Gateway. 

1. Nel riquadro di navigazione principale, scegli **APIs**, quindi esegui una delle seguenti operazioni:

   1.  Seleziona un'API esistente e quindi scegli una fase.

   1.  Crea un'API e implementala in una fase.

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

1.  Nella sezione **Log e tracciamento** scegli **Modifica**.

1. Per abilitare il logging dell'esecuzione:

   1. Seleziona un livello di registrazione dal menu a discesa **CloudWatch Registri.** I livelli di registrazione dei log sono:
      + **Inattivo**: la registrazione dei log non è attivata per questa fase. 
      + **Solo errori**: la registrazione dei log è abilitata solo per gli errori. 
      + **Errori e log informativi**: la registrazione dei log è abilitata per tutti gli eventi.

   1. (Facoltativo) Seleziona **Tracciamento dei dati** per attivare la registrazione dei log della traccia dei dati per la fase. Questo può essere utile per la risoluzione dei problemi APIs, ma può comportare la registrazione di dati sensibili.
**Nota**  
Ti consigliamo di non utilizzare il **tracciamento dei dati** per la produzione. APIs

   1. (Facoltativo) Seleziona **Metriche dettagliate** per attivare le metriche dettagliate CloudWatch .

   Per ulteriori informazioni sulle CloudWatch metriche, consulta. [Monitora l'esecuzione delle API REST con i CloudWatch parametri di Amazon](monitoring-cloudwatch.md)

1. Per abilitare il logging degli accessi:

   1. Attiva **Registrazione accesso personalizzato**.

   1. Immetti l'ARN di un gruppo di log in **ARN di destinazione del log degli accessi**. Il formato dell'ARN è `arn:aws:logs:{region}:{account-id}:log-group:log-group-name`.

   1. In **Formato dei log** immetti un formato di log. Puoi scegliere **CLF**, **JSON**, **XML** o **CSV**. Per ulteriori informazioni sui formati di log di esempio, consulta [CloudWatch formati di registro per API Gateway](#apigateway-cloudwatch-log-formats).

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

**Nota**  
Puoi abilitare la registrazione dell'esecuzione e quella degli accessi in modo reciprocamente indipendente.

API Gateway ora è pronto a registrare i log delle richieste all'API. Non è necessario ridistribuire l'API quando si aggiornano le impostazioni delle fasi, i log o le variabili delle fasi. 

## Configurare la registrazione CloudWatch delle API utilizzando CloudFormation
<a name="set-up-access-logging-using-cloudformation"></a>

Utilizza il seguente CloudFormation modello di esempio per creare un gruppo di log Amazon CloudWatch Logs e configurare l'esecuzione e la registrazione degli accessi per una fase. Per abilitare CloudWatch i log, devi concedere ad API Gateway l'autorizzazione a leggere e scrivere i log del tuo CloudWatch account. Per ulteriori informazioni, consulta [Associate account with IAM role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html#aws-resource-apigateway-account--examples) nella *Guida per l'utente di AWS CloudFormation *.

```
  TestStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: test
      RestApiId: !Ref MyAPI
      DeploymentId: !Ref Deployment
      Description: "test stage description"
      MethodSettings:
        - ResourcePath: "/*"
          HttpMethod: "*"
          LoggingLevel: INFO
      AccessLogSetting:
        DestinationArn: !GetAtt MyLogGroup.Arn
        Format: $context.extendedRequestId $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime] "$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId
  MyLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Join
        - '-'
        - - !Ref MyAPI
          - access-logs
```

# Registrazione dei log delle chiamate REST API su Amazon Data Firehose in Gateway API
<a name="apigateway-logging-to-kinesis"></a>

Per facilitare il debug dei problemi relativi all'accesso dei client all'API, è possibile registrare i log delle chiamate API su Amazon Data Firehose. Per ulteriori informazioni su Firehose, consulta [What Is Amazon Data Firehose?](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)

Per la registrazione degli accessi, puoi solo abilitare CloudWatch o FireHose, non puoi abilitare entrambi. Tuttavia, è possibile abilitare CloudWatch la registrazione dell'esecuzione e Firehose la registrazione degli accessi.

**Topics**
+ [Formati di log di Firehose per Gateway API](#apigateway-kinesis-log-formats)
+ [Autorizzazioni per la registrazione dei log di Firehose](#set-up-kinesis-access-logging-permissions)
+ [Configurazione della registrazione dei log degli accessi di Firehose tramite la console Gateway API](#set-up-kinesis-access-logging-using-console)

## Formati di log di Firehose per Gateway API
<a name="apigateway-kinesis-log-formats"></a>

[La registrazione Firehose utilizza lo stesso formato della registrazione. CloudWatch ](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html)

## Autorizzazioni per la registrazione dei log di Firehose
<a name="set-up-kinesis-access-logging-permissions"></a>

Quando la registrazione dei log degli accessi di Firehose è abilitata su una fase, Gateway API crea nell'account un ruolo collegato al servizio, se non è già esistente. Il ruolo è denominato `AWSServiceRoleForAPIGateway` ed è collegato alla policy gestita `APIGatewayServiceRolePolicy`. Per ulteriori informazioni sui ruoli collegati ai servizi, consulta [Utilizzo dei ruoli collegati ai servizi](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html).

**Nota**  
Il nome del flusso di Firehose deve essere `amazon-apigateway-{your-stream-name}`.

## Configurazione della registrazione dei log degli accessi di Firehose tramite la console Gateway API
<a name="set-up-kinesis-access-logging-using-console"></a>

Per configurare la registrazione API, devi aver distribuito l'API in una fase. È inoltre necessario aver creato un flusso di Firehose. 

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

1.  Esegui una delle seguenti operazioni:

   1.  Seleziona un'API esistente e quindi scegli una fase.

   1.  Crea un'API e distribuiscila in una fase.

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

1.  Nella sezione **Log e tracciamento** scegli **Modifica**.

1. Per abilitare la registrazione dei log degli accessi in un flusso Firehose:

   1. Attiva **Registrazione accesso personalizzato**.

   1. In **ARN di destinazione del log degli accessi** inserisci l'ARN di un flusso Firehose. Il formato dell'ARN è `arn:aws:firehose:{region}:{account-id}:deliverystream/amazon-apigateway-{your-stream-name}`.
**Nota**  
Il nome del flusso di Firehose deve essere `amazon-apigateway-{your-stream-name}`.

   1. In **Formato dei log** immetti un formato di log. Puoi scegliere **CLF**, **JSON**, **XML** o **CSV**. Per ulteriori informazioni sui formati di log di esempio, consulta [CloudWatch formati di registro per API Gateway](set-up-logging.md#apigateway-cloudwatch-log-formats).

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

Gateway API è ora pronto per registrare i log delle richieste all'API su Firehose. Non è necessario ridistribuire l'API quando si aggiornano le impostazioni delle fasi, i log o le variabili delle fasi. 

# Variabili per la registrazione dei log degli accessi per Gateway API
<a name="api-gateway-variables-for-access-logging"></a>

 Nella registrazione degli accessi, in qualità di sviluppatore dell'API puoi registrare chi ha avuto accesso alla tua API e in che modo l'intermediario ha avuto accesso all'API. Puoi creare un gruppo di log personalizzato o sceglierne uno esistente che potrebbe essere gestito da API Gateway. Per specificare i dettagli di accesso, è possibile utilizzare le seguenti variabili `$context` con distinzione tra maiuscole e minuscole.

Per l’elenco di tutte le variabili di riferimento per le trasformazioni dei dati, consultare [Variabili per le trasformazioni dei dati per Gateway API](api-gateway-mapping-template-reference.md).


| Parametro | Description | 
| --- | --- | 
| \$1context.accountId |  L'ID dell' AWS account del proprietario dell'API.  | 
| \$1context.apiId |  Identificatore assegnato da API Gateway all'API.  | 
| \$1context.authorize.error | Il messaggio di errore di autorizzazione. | 
| \$1context.authorize.latency | La latenza di autorizzazione in ms. | 
| \$1context.authorize.status | Il codice di stato restituito da un tentativo di autorizzazione. | 
| \$1context.authorizer.claims.property |  Proprietà delle richieste restituite dal pool di utenti di Amazon Cognito dopo che l'intermediario del metodo viene autenticato correttamente. Per ulteriori informazioni, consulta [Controlla l'accesso a REST APIs utilizzando i pool di utenti di Amazon Cognito come autorizzatore](apigateway-integrate-with-cognito.md).  La chiamata di `$context.authorizer.claims` restituisce null.   | 
| \$1context.authorizer.error | Il messaggio di errore restituito da un'autorizzazione. | 
| \$1context.authorizer.integrationLatency | Latenza di integrazione del sistema di autorizzazione in ms. | 
| \$1context.authorizer.integrationStatus | Il codice di stato restituito da un'autorizzazione Lambda. | 
| \$1context.authorizer.latency | La latenza di autorizzazione in ms. | 
| \$1context.authorizer.principalId |  Identificazione dell'utente dell'entità principale associata al token inviata dal client e restituita da un'autorizzazione Lambda in API Gateway (precedentemente noto come autorizzazione ad hoc). Per ulteriori informazioni, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.authorizer.property |  Valore in formato stringa della coppia chiave/valore specificata della mappa `context` restituita da una funzione delle autorizzazioni Lambda di API Gateway. Ad esempio, se le autorizzazioni restituiscono la mappa `context` seguente:  <pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre> La chiamata di `$context.authorizer.key` restituisce la stringa `"value"`, la chiamata di `$context.authorizer.numKey` restituisce la stringa `"1"` e la chiamata di `$context.authorizer.boolKey` restituisce la stringa `"true"`. Infatti*property*, l'unico carattere speciale supportato è il carattere di sottolineatura`(_)`. Per ulteriori informazioni, consulta [Uso di autorizzazioni Lambda di API Gateway](apigateway-use-lambda-authorizer.md).  | 
| \$1context.authorizer.requestId | L'ID della richiesta dell' AWS endpoint. | 
| \$1context.authorizer.status | Il codice di stato restituito da un'autorizzazione. | 
| \$1context.authenticate.error | Il messaggio di errore restituito da un tentativo di autenticazione. | 
| \$1context.authenticate.latency | La latenza di autenticazione in ms. | 
| \$1context.authenticate.status | Il codice di stato restituito da un tentativo di autenticazione. | 
| \$1context.awsEndpointRequestId |  L'ID della richiesta dell' AWS endpoint.  | 
| \$1context.cipherSuite |  Il codice, in formato IANA, negoziato durante l'handshake TLS tra il client e API Gateway.  | 
| \$1context.customDomain.basePathMatched |  Il percorso per una mappatura API a cui corrisponde una richiesta in ingresso. Applicabile quando un client utilizza un nome di dominio personalizzato per accedere a un'API. Ad esempio, se un client invia una richiesta a `https://api.example.com/v1/orders/1234` e la richiesta corrisponde alla mappatura API con il percorso `v1/orders`, il valore è `v1/orders`. Per ulteriori informazioni, consulta [Usa le mappature delle API per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs](rest-api-mappings.md).  | 
| \$1context.customDomain.routingRuleIdMatched | La regola di routing a cui corrisponde una richiesta in ingresso. Applicabile quando un client utilizza un nome di dominio personalizzato per accedere a un'API. Per ulteriori informazioni, consulta [Regole di routing per connettere le fasi dell'API a un nome di dominio personalizzato per REST APIs](rest-api-routing-rules.md). | 
| \$1context.deploymentId | ID dell'implementazione API. | 
| \$1context.domainName |  Nome di dominio completo usato per richiamare l'API. Deve essere lo stesso dell'intestazione `Host` in ingresso.  | 
| \$1context.domainPrefix |  Prima etichetta di `$context.domainName`.  | 
| \$1context.endpointType | Il tipo di endpoint dell'API. | 
| \$1context.error.message |  Stringa contenente un messaggio di errore di API Gateway. Questa variabile può essere utilizzata solo per la semplice sostituzione di variabili in un modello di [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)body mapping, che non viene elaborato dal motore Velocity Template Language, e nella registrazione degli accessi. Per ulteriori informazioni, consultare [Monitora l'esecuzione delle WebSocket API con CloudWatch metriche](apigateway-websocket-api-logging.md) e [Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.messageString | Valore \$1context.error.message tra virgolette, ovvero "\$1context.error.message". | 
| \$1context.error.responseType |  [Un tipo di. [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseType) Questa variabile può essere utilizzata solo per la semplice sostituzione di variabili in un modello di [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html)body mapping, che non viene elaborato dal motore Velocity Template Language, e nella registrazione degli accessi. Per ulteriori informazioni, consultare [Monitora l'esecuzione delle WebSocket API con CloudWatch metriche](apigateway-websocket-api-logging.md) e [Configurazione delle risposte del gateway per la personalizzazione delle risposte agli errori](api-gateway-gatewayResponse-definition.md#customize-gateway-responses).  | 
| \$1context.error.validationErrorString |  Stringa contenente un messaggio dettagliato di errore di convalida.  | 
| \$1context.extendedRequestId | ID esteso generato da API Gateway e assegnato alla richiesta API. L’ID della richiesta esteso contiene ulteriori informazioni utili per il debug e la risoluzione dei problemi. | 
| \$1context.httpMethod |  Metodo HTTP usato. I valori validi sono: `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST` e `PUT`.  | 
| \$1context.identity.accountId |  L'ID dell'account associato alla richiesta. AWS   | 
| \$1context.identity.apiKey |  Per i metodi API che richiedono una chiave API, questa variabile è la chiave API associata alla richiesta del metodo. Per i metodi che non richiedono una chiave API, questa variabile è null. Per ulteriori informazioni, consulta [Piani di utilizzo e chiavi API per REST APIs in API Gateway](api-gateway-api-usage-plans.md).  | 
| \$1context.identity.apiKeyId | ID chiave API associato a una richiesta API che richiede una chiave API. | 
| \$1context.identity.caller |  Identificatore dell'entità principale dell'intermediario che ha firmato la richiesta. Supportato per risorse che utilizzano l'autorizzazione IAM.  | 
| \$1context.identity.cognitoAuthenticationProvider |  Un elenco separato da virgole con tutti i provider di autenticazione Amazon Cognito utilizzati dal chiamante che effettua la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  Ad esempio, per un'identità di un pool di utenti Amazon Cognito, `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` Per informazioni sui provider di autenticazione Amazon Cognito disponibili, consulta [Using Federated Identities](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) nella *Guida per gli sviluppatori di Amazon Cognito*. | 
| \$1context.identity.cognitoAuthenticationType |  Tipo di autenticazione Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito. I valori possibili includono `authenticated` per le identità autenticate e `unauthenticated` per le identità non autenticate. | 
| \$1context.identity.cognitoIdentityId |  ID identità di Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  | 
| \$1context.identity.cognitoIdentityPoolId |  ID pool di identità di Amazon Cognito dell'intermediario da cui proviene la richiesta. Disponibile solo se la richiesta è stata firmata con credenziali Amazon Cognito.  | 
| \$1context.identity.principalOrgId |  L'[ID organizzazione AWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html).  | 
| \$1context.identity.sourceIp |  L'indirizzo IP di origine della connessione TCP immediata da cui proviene la richiesta all'endpoint di Gateway API.  | 
| \$1context.identity.clientCert.clientCertPem |  Certificato client codificato PEM che il client ha presentato durante l'autenticazione TLS reciproca. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.subjectDN |  Nome distinto dell'oggetto del certificato presentato da un client. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.issuerDN |  Nome distinto dell'approvatore del certificato presentato da un cliente. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.serialNumber |  Il numero di serie del certificato. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.validity.notBefore |  La data prima della quale il certificato non è valido. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
| \$1context.identity.clientCert.validity.notAfter |  La data dopo la quale il certificato non è valido. Presente quando un client accede a un'API utilizzando un nome di dominio personalizzato che ha attivato l'autenticazione TLS reciproca. Presente solo nei log di accesso se l'autenticazione TLS reciproca non riesce.  | 
|  \$1context.identity.vpcId | L'ID VPC del VPC da cui proviene la richiesta all'endpoint Gateway API. | 
|  \$1context.identity.vpceId |  L'ID endpoint VPC dell'endpoint VPC da cui proviene la richiesta all'endpoint Gateway API. Presente solo quando si dispone di un'API privata.  | 
| \$1context.identity.user |  Identificatore dell'entità principale dell'utente che sarà autorizzato per l'accesso alle risorse. Supportato per risorse che utilizzano l'autorizzazione IAM.  | 
| \$1context.identity.userAgent |  Intestazione [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) del chiamante API.  | 
| \$1context.identity.userArn |  Amazon Resource Name (ARN) dell'utente valido identificato dopo l'autenticazione. Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html).  | 
| \$1context.integration.error | Il messaggio di errore restituito da un'integrazione. | 
| \$1context.integration.integrationStatus | Per l'integrazione del proxy Lambda, il codice di stato restituito dal codice della funzione Lambda di backend AWS Lambda, non dal codice della funzione Lambda. | 
| \$1context.integration.latency | Latenza di integrazione in ms. Equivalente a \$1context.integrationLatency. | 
| \$1context.integration.requestId | L'ID della AWS richiesta dell'endpoint. Equivalente a \$1context.awsEndpointRequestId. | 
| \$1context.integration.responseTransferMode | La modalità di trasferimento delle risposte della tua integrazione. Ciò può essere BUFFERED o STREAMED. | 
| \$1context.integration.status | Il codice di stato restituito da un'integrazione. Per le integrazioni proxy Lambda, questo è il codice di stato restituito dal codice della funzione Lambda.  | 
| \$1context.integration.timeToAllHeaders | Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve tutte le intestazioni di risposta all'integrazione dal client.  | 
| \$1context.integration.timeToFirstContent | Il tempo che intercorre tra il momento in cui API Gateway stabilisce la connessione di integrazione e il momento in cui riceve i primi byte di contenuto. | 
| \$1context.integrationLatency | Latenza di integrazione in ms. | 
| \$1context.integrationStatus | Per l'integrazione del proxy Lambda, questo parametro rappresenta il codice di stato restituito dal codice della funzione Lambda di AWS Lambda backend e non dal codice della funzione Lambda. | 
| \$1context.isCanaryRequest |  Restituisce `true` se la richiesta era indirizzata al canary e `false` se la richiesta non era indirizzata al canary. Presente solo quando è abilitato un canary. | 
| \$1context.path | Percorso della richiesta. Ad esempio, per un URL di richiesta non proxy https://\$1rest-api-id\$1.execute-api.\$1region\$1.amazonaws.com/\$1stage\$1/root/child, il valore di \$1context.path è /\$1stage\$1/root/child.  | 
| \$1context.protocol | Protocollo della richiesta, ad esempi, HTTP/1.1.  API Gateway APIs può accettare richieste HTTP/2, ma API Gateway invia richieste alle integrazioni di backend utilizzando HTTP/1.1. Di conseguenza, il protocollo di richiesta viene registrato come HTTP/1.1 anche se un client invia una richiesta che utilizza HTTP/2.   | 
| \$1context.requestId |  L'ID della richiesta. I client possono sovrascrivere questo ID di richiesta. Utilizza `$context.extendedRequestId` per un ID di richiesta univoco generato da API Gateway.  | 
| \$1context.requestOverride.header.header\$1name |  Sovrascrittura intestazione della richiesta. Se definito, questo parametro contiene le intestazioni da utilizzare al posto delle **intestazioni HTTP** che sono definite nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.path.path\$1name |  Sovrascrittura percorso della richiesta. Se definito, questo parametro contiene il percorso della richiesta da utilizzare al posto dei **parametri di percorso URL** che sono definiti nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.requestOverride.querystring.querystring\$1name |  Sovrascrittura stringa di query della richiesta. Se definito, questo parametro contiene la stringa di query della richiesta da utilizzare al posto dei **URL Query String Parameters (Parametri stringa di query URL)** che sono definiti nel riquadro **Integration Request (Richiesta di integrazione)**. Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md).  | 
| \$1context.responseLatency | Latenza della risposta in ms. | 
| \$1context.responseLength | Lunghezza del payload della risposta in byte. | 
| \$1context.responseOverride.header.header\$1name | Sovrascrittura intestazione della risposta. Se definito, questo parametro contiene l'intestazione da restituire al posto della Response header (Intestazione di risposta) che è definita come la Default mapping (mappatura predefinita) nel riquadro Integration Response (Risposta integrazione). Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.responseOverride.status | Sovrascrittura codice di stato della risposta. Se definito, questo parametro contiene il codice di stato da restituire al posto di Method response status (Stato risposta metodo) che è definito come la Default mapping (Mappatura predefinita) nel riquadro Integration Response (Risposta integrazione). Per ulteriori informazioni, consulta [Sostituisci i parametri di richiesta e risposta e i codici di stato dell'API per REST APIs in API Gateway](apigateway-override-request-response-parameters.md). | 
| \$1context.requestTime | Ora della richiesta in formato [CLF](https://httpd.apache.org/docs/current/logs.html#common) (dd/MMM/yyyy:HH:mm:ss \$1-hhmm). | 
| \$1context.requestTimeEpoch | L'ora della richiesta in formato [epoca (Unix epoch)](https://en.wikipedia.org/wiki/Unix_time) in millisecondi. | 
| \$1context.resourceId |  Identificatore assegnato da API Gateway alla risorsa.  | 
| \$1context.resourcePath |  Percorso della risorsa. Ad esempio, per l'URI della richiesta non proxy di `https://{rest-api-id}.execute-api.{region}.amazonaws.com/{stage}/root/child`, il valore di `$context.resourcePath` è `/root/child`. Per ulteriori informazioni, consulta [Tutorial: creazione di una REST API con un'integrazione non proxy HTTP](api-gateway-create-api-step-by-step.md).   | 
| \$1context.stage |  La fase di distribuzione della richiesta API (ad esempio `Beta` o `Prod`).  | 
| \$1context.status | Stato della risposta del metodo. | 
| \$1context.tlsVersion |  La versione TLS negoziata durante l'handshake TLS tra il client e API Gateway. | 
| \$1context.waf.error | Il messaggio di errore restituito da. AWS WAF | 
| \$1context.waf.latency | La AWS WAF latenza in ms. | 
| \$1context.waf.status | Il codice di stato restituito da AWS WAF. | 
| \$1context.xrayTraceId |  L'ID della traccia di X-Ray. Per ulteriori informazioni, consulta [Configurazione AWS X-Ray con API Gateway REST APIs](apigateway-enabling-xray.md).  | 
| \$1context.wafResponseCode |  La risposta ricevuta da [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html): `WAF_ALLOW` o `WAF_BLOCK`. Non verrà impostata se la fase non è associata a un ACL Web. Per ulteriori informazioni, consulta [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md).  | 
| \$1context.webaclArn |  ARN completo della lista di controllo accessi Web usata per stabilire se consentire o bloccare la richiesta. Non verrà impostata se la fase non è associata a un ACL Web. Per ulteriori informazioni, consulta [Utilizzalo AWS WAF per proteggere il tuo REST APIs in API Gateway](apigateway-control-access-aws-waf.md).  | 

# Traccia delle richieste degli utenti alle REST API utilizzando X-Ray in Gateway API
<a name="apigateway-xray"></a>

Puoi utilizzare [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) per monitorare e analizzare le richieste degli utenti durante il passaggio attraverso le API REST di Amazon API Gateway verso i servizi sottostanti. API Gateway supporta il monitoraggio attraverso X-Ray per tutti i tipi di endpoint API REST di API Gateway: regionale, ottimizzato per l’edge e privato. Puoi usare X-Ray con Amazon API Gateway in tutte le Regioni AWS in cui X-Ray è disponibile.

Poiché X-Ray offre una panoramica completa di un'intera richiesta, puoi analizzare le latenze nelle API e i relativi servizi di back-end. È possibile utilizzare una mappa del servizio di X-Ray per visualizzare la latenza di un'intera richiesta e quella dei servizi downstream integrati con X-Ray. Inoltre, puoi configurare le regole di campionamento per comunicare a X-Ray quali richieste registrare e a quale frequenza in base alle policy specificate. 

Se chiami un'API di API Gateway da un servizio già tracciato, API Gateway passa subito attraverso il monitoraggio, anche se X-Ray non è abilitato sull'API.

È possibile abilitare X-Ray per una fase API utilizzando la console API Gateway o utilizzando l'API o l'interfaccia a riga di comando di API Gateway.

**Topics**
+ [Configurazione AWS X-Ray con API Gateway REST APIs](apigateway-enabling-xray.md)
+ [Usa le mappe dei AWS X-Ray servizi e traccia le viste con API Gateway](apigateway-using-xray-maps.md)
+ [Configurazione delle regole AWS X-Ray di campionamento per API Gateway APIs](apigateway-configuring-xray-sampling-rules.md)
+ [AWS X-Ray tracce per Amazon API Gateway APIs](apigateway-understanding-xray-traces.md)

# Configurazione AWS X-Ray con API Gateway REST APIs
<a name="apigateway-enabling-xray"></a>

In questa sezione puoi trovare informazioni dettagliate su come configurare [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html)con API Gateway REST APIs.

**Topics**
+ [Modalità di monitoraggio di X-Ray per API Gateway](#apigateway-tracing-modes)
+ [Autorizzazioni per il monitoraggio di X-Ray](#set-up-xray-tracing-permissions)
+ [Abilitazione del monitoraggio tramite X-Ray nella console API Gateway](#apigateway-xray-console-setup)
+ [Abilitazione del AWS X-Ray tracciamento utilizzando l'API Gateway CLI](#apigateway-xray-cli-setup)

## Modalità di monitoraggio di X-Ray per API Gateway
<a name="apigateway-tracing-modes"></a>

Il percorso di una richiesta nell'applicazione viene tracciato mediante un ID traccia. Una traccia raccoglie tutti i segmenti generati da una singola richiesta, in genere una richiesta HTTP `GET` o `POST`.

Per un'API di API Gateway sono disponibili due modalità di monitoraggio:
+ **Passiva**: questa è l'impostazione predefinita se non hai abilitato il monitoraggio X-Ray su una fase API. Questo approccio significa che l'API di API Gateway viene tracciata solo se X-Ray è stato abilitato in un servizio upstream.
+ **Attiva**: quando per una fase API di API Gateway si sceglie questa impostazione, API Gateway esegue automaticamente il campionamento delle richieste di invocazione dell'API in base all'algoritmo di campionamento specificato da X-Ray.

  Quando su una fase il monitoraggio è abilitato in modalità attiva, API Gateway crea un ruolo collegato ai servizi nel tuo account se questo non è già esistente. Il ruolo è denominato `AWSServiceRoleForAPIGateway` e sarà collegato alla policy gestita `APIGatewayServiceRolePolicy`. Per ulteriori informazioni sui ruoli collegati ai servizi, consulta [Utilizzo dei ruoli collegati ai servizi](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html).
**Nota**  
X-Ray applica un algoritmo di campionamento per garantire che il monitoraggio avvenga in modo efficiente, continuando allo stesso tempo a fornire un campione rappresentativo delle richieste ricevute dall'API. L'algoritmo di campionamento di default corrisponde a una richiesta al secondo, con il 5% di richieste campionate oltre tale limite.

Puoi modificare la modalità di tracciamento per la tua API utilizzando la console di gestione API Gateway, l'API Gateway CLI o AWS un SDK.

## Autorizzazioni per il monitoraggio di X-Ray
<a name="set-up-xray-tracing-permissions"></a>

Quando su una fase è abilitato il monitoraggio tramite X-Ray, API Gateway crea un ruolo collegato ai servizi nel tuo account se questo non è già esistente. Il ruolo è denominato `AWSServiceRoleForAPIGateway` e sarà collegato alla policy gestita `APIGatewayServiceRolePolicy`. Per ulteriori informazioni sui ruoli collegati ai servizi, consulta [Utilizzo dei ruoli collegati ai servizi](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html).

## Abilitazione del monitoraggio tramite X-Ray nella console API Gateway
<a name="apigateway-xray-console-setup"></a>

Puoi utilizzare la console di Amazon API Gateway per abilitare il monitoraggio in modalità attiva in una fase API.

In queste fasi si presuppone che l'API sia già stata distribuita a una fase.

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

1. Scegli l'API, quindi nel pannello di navigazione principale, seleziona **Fasi**.

1. Nel riquadro **Fasi** scegli una fase.

1. Nella sezione **Log e tracciamento** scegli **Modifica**.

1. Per abilitare il tracciamento X-Ray seleziona **Tracciamento X-Ray** per attivarlo.

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

Una volta abilitato X-Ray per la fase API, è possibile utilizzare la console di gestione di X-Ray per visualizzare il monitoraggio e le mappe di servizio.

## Abilitazione del AWS X-Ray tracciamento utilizzando l'API Gateway CLI
<a name="apigateway-xray-cli-setup"></a>

Il comando [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) seguente crea una fase con tracciamento X-Ray attivo:

```
aws apigateway create-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --deployment-id deployment-id \
    --region region \
    --tracing-enabled=true
```

L'output sarà simile al seguente:

```
{
    "tracingEnabled": true, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533849811, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

Il comando [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) seguente crea una fase senza tracciamento X-Ray attivo:

```
aws apigateway create-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --deployment-id deployment-id \
    --region region \
    --tracing-enabled=false
```

L'output sarà simile al seguente:

```
{
    "tracingEnabled": false, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533849811, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente attiva il tracciamento X-Ray per un’API implementata: 

```
aws apigateway update-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --patch-operations op=replace,path=/tracingEnabled,value=true
```

Il comando [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) seguente disattiva il tracciamento X-Ray per un’API implementata: 

```
aws apigateway update-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --region region \
    --patch-operations op=replace,path=/tracingEnabled,value=false
```

L'output sarà simile al seguente:

```
{
    "tracingEnabled": false, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533850033, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

Una volta abilitato X-Ray per la fase API, utilizzare l'interfaccia a riga di comando di X-Ray per recuperare le informazioni sul monitoraggio. Per ulteriori informazioni, vedere [Utilizzo dell'API X-Ray con la CLI AWS](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-tutorial).

# Usa le mappe dei AWS X-Ray servizi e traccia le viste con API Gateway
<a name="apigateway-using-xray-maps"></a>

In questa sezione sono disponibili informazioni dettagliate sull'utilizzo delle mappe di servizio e delle viste di monitoraggio di [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) con API Gateway.

**Topics**
+ [Esempio di mappa dei servizi di X-Ray](#apigateway-using-xray-maps-active)
+ [Esempio di visualizzazione del monitoraggio di X-Ray](#apigateway-using-xray-trace-view-active)

## Esempio di mappa dei servizi di X-Ray
<a name="apigateway-using-xray-maps-active"></a>

AWS X-Ray le mappe dei servizi mostrano informazioni sull'API e su tutti i relativi servizi a valle. Quando X-Ray è abilitato per una fase API in API Gateway, sarà possibile visualizzare un nodo nella mappa di servizio che contiene informazioni sul tempo complessivo passato nel servizio API Gateway. Puoi ottenere informazioni dettagliate sullo stato della risposta e un istogramma del tempo di risposta dell'API nel periodo di tempo selezionato. Per l' APIs integrazione con AWS servizi come AWS Lambda Amazon DynamoDB, vedrai più nodi che forniscono metriche prestazionali relative a tali servizi. C'è una mappa di servizio per ogni fase API.

L'esempio seguente mostra una mappa di servizio per la fase `test` di un'API denominata `xray`. Quest’API dispone di due integrazioni Lambda. I nodi rappresentano il servizio Gateway API e le due funzioni Lambda.

Per una spiegazione dettagliata della struttura della mappa di servizio, consulta [Use the X-Ray trace map](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-servicemap).

![\[Esempio di mappa del servizio di una fase API di API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-xray-servicemap-2.png)


La mappa dei servizi può essere ingrandita per mostrare una vista della traccia della fase API. La traccia visualizza informazioni approfondite riguardanti l'API, rappresentate come segmenti e segmenti secondari. Ad esempio, il monitoraggio della mappa di servizio mostrata sopra include i segmenti del servizio Lambda e della funzione Lambda. [Per ulteriori informazioni, consulta e.AWS LambdaAWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-lambda.html)

Se scegli un nodo o un edge su una mappa di servizio di X-Ray, la console di X-Ray mostra un istogramma della distribuzione della latenza. Puoi utilizzare un istogramma della latenza per visualizzare il tempo impiegato da un servizio per completare le richieste. Di seguito è riportato un istogramma della fase dell'API Gateway denominata `xray/test` nella precedente mappa di servizio. Per una spiegazione dettagliata degli istogrammi di distribuzione della latenza, consulta [Use Latency Histograms](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-histograms).

![\[Istogramma X-Ray di una fase API di API Gateway\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-xray-histogram-1.png)


## Esempio di visualizzazione del monitoraggio di X-Ray
<a name="apigateway-using-xray-trace-view-active"></a>

Il seguente diagramma mostra una vista del monitoraggio generato per l’API di esempio descritta in precedenza, con una funzione di backend Lambda. Viene mostrata una richiesta metodo API andata a buon fine con codice di risposta pari a 200.

Per una spiegazione dettagliata delle viste di traccia, consulta [View traces and trace details](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-traces).

![\[API Gateway con monitoraggio in modalità attiva abilitato\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/apigateway-xray-traceview-1.png)


# Configurazione delle regole AWS X-Ray di campionamento per API Gateway APIs
<a name="apigateway-configuring-xray-sampling-rules"></a>

Puoi utilizzare la AWS X-Ray console o l'SDK per configurare le regole di campionamento per la tua API Amazon API Gateway. Una regola di campionamento specifica le richieste che X-Ray deve registrare per l'API. Personalizzando le regole di campionamento è possibile controllare la quantità di dati da registrare e modificare immediatamente il campionamento senza dover cambiare o ridistribuire il codice.

Prima di specificare le regole di campionamento di X-Ray, leggere i seguenti argomenti nella Guida per gli sviluppatori di X-Ray:
+ [Configurazione delle regole di campionamento](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling)
+ [Utilizzo delle regole di campionamento con l'API X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-sampling)

**Topics**
+ [Valori delle opzioni della regola di campionamento a raggi X per API Gateway APIs](#apigateway-xray-sampling-rule-options)
+ [Esempi di regole di campionamento di X-Ray](#apigateway-xray-sampling-rules-examples)

## Valori delle opzioni della regola di campionamento a raggi X per API Gateway APIs
<a name="apigateway-xray-sampling-rule-options"></a>

Le seguenti opzioni di campionamento di X-Ray sono rilevanti per API Gateway. I valori di stringa possono utilizzare caratteri jolly per corrispondere a un solo carattere (?) o a zero o più caratteri (\$1). Per ulteriori informazioni, compresa una spiegazione dettagliata di come vengono utilizzate le impostazioni del **reservoir** e della **frequenza**, consulta [Configure sampling rules](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling).
+ **Nome regola** (stringa): un nome univoco per la regola.
+ **Priorità** (numero intero compreso tra 1 e 9999): la priorità della regola di campionamento. I servizi valutano le regole in ordine crescente di priorità e prendono una decisione sul campionamento in base alla prima regola corrispondente.
+ **Riserva** (numero intero non negativo): un numero fisso di richieste che rispettano il filtro da analizzare ogni secondo, prima di applicare la percentuale fissa. Il reservoir non viene utilizzato direttamente dai servizi, ma si applica a tutti i servizi che utilizzano la regola nel loro complesso.
+ **Percentuale** (numero tra 0 e 100): la percentuale di richieste che rispettano il filtro da analizzare dopo l'esaurimento della riserva.
+ **Nome servizio** (stringa): nome della fase API, nel formato ***\$1api-name\$1*/*\$1stage-name\$1***. Ad esempio, se si dovesse distribuire l'API di [PetStore](api-gateway-create-api-from-example.md)esempio in una fase denominata`test`, il valore del **nome del servizio** da specificare nella regola di campionamento sarebbe. **pets/test**
+ **Tipo servizio** (stringa): per un'API di API Gateway è possibile specificare sia **AWS::ApiGateway::Stage** che **AWS::ApiGateway::\$1**.
+ **Host** (stringa): il nome host ricavato dall'intestazione HTTP host. Per la corrispondenza a tutti i nome host, va impostato su **\$1**. Si può anche specificare un nome host completo o parziale di corrispondenza, ad esempio **api.example.com** o **\$1.example.com**.
+ **Resource ARN (ARN risorsa)** (stringa): l'ARN della fase API, ad esempio **arn:aws:apigateway:*region*::/restapis/*api-id*/stages/*stage-name***.

  Il nome di fase si può ricavare dalla console, dall'interfaccia a riga di comando o dall'API di API Gateway. Per ulteriori informazioni sui formati degli ARN, consulta [Riferimenti generali di Amazon Web Services](https://docs.aws.amazon.com/general/latest/gr/).
+ **Metodo HTTP** (stringa): il metodo da campionare, ad esempio **GET**.
+ **URL path** (Percorso URL) (stringa): il percorso dell'URL della richiesta.
+ (opzionale) **Attributi** (chiave e valore): intestazioni provenienti dalla richiesta HTTP originale, ad esempio **Connection**, **Content-Length** o **Content-Type**. Ogni valore dell'attributo può contenere fino a 32 caratteri.

## Esempi di regole di campionamento di X-Ray
<a name="apigateway-xray-sampling-rules-examples"></a>

**Esempio 1 di regola di campionamento**

Questa regola campiona tutte le richieste `GET` per l'API `testxray` nella fase `test`.
+ **Nome regola — ****test-sampling**
+ **Priorità — ****17**
+ **Dimensioni riserva — ****10**
+ **Percentuale fissa — ****10**
+ **Nome servizio — ****testxray/test**
+ **Tipo servizio — ****AWS::ApiGateway::Stage**
+ **Metodo HTTP — ****GET**
+ **ARN risorsa — ****\$1**
+ **Host — ****\$1**

**Esempio 2 di regola di campionamento**

Questa regola campiona tutte le richieste `testxray` per l'API nella fase `prod`.
+ **Nome regola — ****prod-sampling**
+ **Priorità — ****478**
+ **Dimensioni riserva — ****1**
+ **Percentuale fissa — ****60**
+ **Nome servizio — ****testxray/prod**
+ **Tipo servizio — ****AWS::ApiGateway::Stage**
+ **Metodo HTTP — ****\$1**
+ **ARN risorsa — ****\$1**
+ **Host — ****\$1**
+ **Attributi** — **\$1\$1**

# AWS X-Ray tracce per Amazon API Gateway APIs
<a name="apigateway-understanding-xray-traces"></a>

Questa sezione illustra i segmenti di AWS X-Ray traccia, i sottosegmenti e altri campi di traccia per Amazon API Gateway. APIs

Prima di leggere questa sezione, rivedere i seguenti argomenti nella Guida per gli sviluppatori di X-Ray:
+  [Usa un Console di gestione AWS](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html)
+  [Documenti sui segmenti di X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments)
+ [Concetti](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html#xray-concepts)

**Topics**
+ [Esempi di oggetti di monitoraggio per un'API di API Gateway](#apigateway-understanding-xray-traces-example-segments)
+ [Comprendere la traccia](#apigateway-understanding-xray-traces-segments)

## Esempi di oggetti di monitoraggio per un'API di API Gateway
<a name="apigateway-understanding-xray-traces-example-segments"></a>

Questa sezione illustra alcuni degli oggetti visibili in un monitoraggio di un'API di API Gateway.

**Annotazioni**

Le annotazioni possono essere visualizzate nei segmenti e nei segmenti secondari. Servono da espressioni di filtro nelle regole di campionamento per filtrare le tracce. Per ulteriori informazioni, consulta [Configure sampling rules](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling).

Di seguito è riportato un esempio di un oggetto `annotations`, in cui una fase API è identificata dall'ID dell'API e dal nome della fase API:

```
"annotations": {
    "aws:api_id": "a1b2c3d4e5",
    "aws:api_stage": "dev"
}
```

Per ulteriori informazioni sulle annotazioni, consulta **X-Ray segment documents** e scegli **Annotations** in [X-Ray segment documents](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments).

**AWS dati relativi alle risorse**

L'oggetto `aws` viene visualizzato solo nei segmenti. Di seguito è riportato l'esempio di un oggetto `aws` corrispondente alla regola di campionamento predefinita. Per una spiegazione dettagliata delle regole di campionamento, consulta [Configure sampling rules](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling).

```
"aws": {
    "xray": {
        "sampling_rule_name": "Default"
    },
    "api_gateway": {
        "account_id": "123412341234",
        "rest_api_id": "a1b2c3d4e5",
        "stage": "dev",
        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
    }
}
```

Per ulteriori informazioni sull'oggetto `aws`, consulta **X-Ray segment documents** e **AWS resource data** in [X-Ray segment documents](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments).

## Comprendere la traccia
<a name="apigateway-understanding-xray-traces-segments"></a>

Di seguito è riportato un segmento di monitoraggio per una fase dell'API Gateway. Per una spiegazione dettagliata dei campi che compongono il segmento di traccia, consulta [X-Ray segment documents](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments).

```
        {
            "Document": {
                "id": "a1b2c3d4a1b2c3d4",
                "name": "testxray/dev",
                "start_time": 1533928226.229,
                "end_time": 1533928226.614,
                "metadata": {
                    "default": {
                        "extended_request_id": "abcde12345abcde=",
                        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
                    }
                },
                "http": {
                    "request": {
                        "url": "https://example.com/dev?username=demo&message=hellofromdemo/",
                        "method": "GET",
                        "client_ip": "192.0.2.0",
                        "x_forwarded_for": true
                    },
                    "response": {
                        "status": 200,
                        "content_length": 0
                    }
                },
                "aws": {
                    "xray": {
                        "sampling_rule_name": "Default"
                    },
                    "api_gateway": {
                        "account_id": "123412341234",
                        "rest_api_id": "a1b2c3d4e5",
                        "stage": "dev",
                        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
                    }
                },
                "annotations": {
                    "aws:api_id": "a1b2c3d4e5",
                    "aws:api_stage": "dev"
                },
                "trace_id": "1-a1b2c3d4-a1b2c3d4a1b2c3d4a1b2c3d4",
                "origin": "AWS::ApiGateway::Stage",
                "resource_arn": "arn:aws:apigateway:us-east-1::/restapis/a1b2c3d4e5/stages/dev",
                "subsegments": [
                    {
                        "id": "abcdefgh12345678",
                        "name": "Lambda",
                        "start_time": 1533928226.233,
                        "end_time": 1533928226.6130002,
                        "http": {
                            "request": {
                                "url": "https://example.com/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:xray123/invocations",
                                "method": "GET"
                            },
                            "response": {
                                "status": 200,
                                "content_length": 62
                            }
                        },
                        "aws": {
                            "function_name": "xray123",
                            "region": "us-east-1",
                            "operation": "Invoke",
                            "resource_names": [
                                "xray123"
                            ]
                        },
                        "namespace": "aws"
                    }
                ]
            },
            "Id": "a1b2c3d4a1b2c3d4"
        }
```