

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

# Impaginazione nell'API Amazon EC2
<a name="ec2-api-pagination"></a>

Ti consigliamo di utilizzare l'impaginazione quando richiami azioni di descrizione che possono potenzialmente restituire un gran numero di risultati, ad esempio. `DescribeInstances` L'utilizzo della paginazione limita il numero di elementi restituiti da una chiamata di descrizione e il tempo necessario per la restituzione della chiamata. Se si dispone di un numero elevato di risorse, le chiamate non impaginate potrebbero essere limitate e potrebbero scadere. Pertanto, la latenza complessiva è migliore con le chiamate impaginate che con le chiamate non impaginate, perché le chiamate impaginate hanno sempre esito positivo.

Per ulteriori informazioni, consulta [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination) nell'*Amazon EC2 API Reference.*

## Best practice
<a name="pagination-best-practices"></a>

Se possibile, specifica un elenco di risorse IDs nelle chiamate di descrizione. Questo è il modo più veloce per descrivere un gran numero di risorse. Tieni presente che non devi specificare più di 1.000 IDs in una singola chiamata. Di seguito è riportato un esempio.

```
private List<Reservation> describeMyInstances(List<String> ids){
    if (ids == null || ids.isEmpty()) {
        return ImmutableList.of();
    }
        
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withInstanceIds(ids);

    return ec2.describeInstances(request).getReservations();
}
```

Se non riesci a specificare la risorsa IDs nelle chiamate di descrizione, ti consigliamo vivamente di utilizzare la paginazione. Di seguito è riportato un esempio.

```
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withFilters(filters)
            .withMaxResults(1000);

    List<Reservation> reservations = new ArrayList<>();
    String nextToken = null;
    do {
        request.setNextToken(nextToken);
        final DescribeInstancesResult response = ec2.describeInstances(request);
        reservations.addAll(response.getReservations());
        nextToken = response.getNextToken();
    } while (nextToken != null);

    return reservations;
}
```

Se devi riprovare una chiamata impaginata, usa il back-off [esponenziale](ec2-api-throttling.md#api-backoff) con jitter.

## Problemi comuni
<a name="pagination-common-issues"></a>

Di seguito sono riportati alcuni esempi di codice che effettua inavvertitamente chiamate non impaginate.

**Example Esempio di problema: passaggio di un elenco vuoto di risorse IDs**  
Il codice seguente utilizza un elenco di IDs. Tuttavia, se l'elenco è vuoto, il risultato è una chiamata non impaginata.  

```
private List<Reservation> describeMyInstances(List<String> ids){
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withInstanceIds(ids);

    return ec2.describeInstances(request).getReservations();
}
```
Per risolvere questo problema, assicurati che l'elenco non sia vuoto prima di effettuare la chiamata describe.  

```
private List<Reservation> describeMyInstances(List<String> ids){
    if (ids == null || ids.isEmpty()) {
        return ImmutableList.of();
        // OR
        return Lists.newArrayList();
        // OR
        return new ArrayList<>();
    }
        
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withInstanceIds(ids);

    return ec2.describeInstances(request).getReservations();
}
```

**Example Esempio di problema: mancata impostazione MaxResults**  
Il codice seguente controlla e utilizza`nextToken`, ma non imposta`MaxResults`.  

```
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withFilters(filters);

    List<Reservation> reservations = new ArrayList<>();
    String nextToken = null;
    do {
        request.setNextToken(nextToken);
        final DescribeInstancesResult response = ec2.describeInstances(request);
        reservations.addAll(response.getReservations());
        nextToken = response.getNextToken();
    } while (nextToken != null);

    return reservations;
}
```
Per correggere questo problema, aggiungi `withMaxResults` quanto segue.  

```
private List<Reservation> describeMyInstances(final Collection<Filter> filters){
    final DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withFilters(filters)
            .withMaxResults(1000);

    List<Reservation> reservations = new ArrayList<>();
    String nextToken = null;
    do {
        request.setNextToken(nextToken);
        final DescribeInstancesResult response = ec2.describeInstances(request);
        reservations.addAll(response.getReservations());
        nextToken = response.getNextToken();
    } while (nextToken != null);

    return reservations;
}
```