

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Paginação na API do Amazon EC2
<a name="ec2-api-pagination"></a>

Recomendamos que você use a paginação ao chamar ações de descrição que podem exibir um grande número de resultados, como `DescribeInstances`. O uso da paginação limita o número de itens exibidos por uma chamada de descrição e o tempo necessário para o retorno da chamada. Se você tiver um grande número de recursos, chamadas não paginadas poderão ter controle de utilização e atingir o tempo limite. Portanto, a latência geral é melhor com chamadas paginadas do que com chamadas não paginadas porque as chamadas paginadas são consistentemente bem-sucedidas.

Para obter mais informações, consulte [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination) (Paginação) em *Amazon EC2 API Reference* (Referência de API do Amazon EC2).

## Práticas recomendadas
<a name="pagination-best-practices"></a>

Sempre que possível, especifique uma lista de IDs de recursos em suas chamadas de descrição. Essa é a maneira mais rápida de descrever um grande número de recursos. Observe que você não deve especificar mais de mil IDs em uma única chamada. Veja um exemplo a seguir.

```
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();
}
```

Caso você não possa especificar IDs de recursos em suas chamadas de descrição, é altamente recomendável usar a paginação. Veja um exemplo a seguir.

```
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 você precisar repetir uma chamada paginada, use o [recuo exponencial com instabilidade](ec2-api-throttling.md#api-backoff).

## Problemas comuns
<a name="pagination-common-issues"></a>

Veja a seguir exemplos de código que inadvertidamente faz chamadas não paginadas.

**Example Exemplo de problema: transmitir uma lista vazia de IDs de recursos**  
O código a seguir usa uma lista de IDs. No entanto, se a lista estiver vazia, o resultado será uma chamada não paginada.  

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

    return ec2.describeInstances(request).getReservations();
}
```
Para corrigir esse problema, a lista não deve estar vazia antes de fazer a chamada de descrição.  

```
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 Exemplo de problema: MaxResults não definido**  
O código a seguir confere e usa `nextToken`, mas não define `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;
}
```
Para corrigir esse problema, adicione `withMaxResults` da forma a seguir.  

```
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;
}
```