

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Paginación en la API de Amazon EC2
<a name="ec2-api-pagination"></a>

Le recomendamos que utilice paginación cuando llame a acciones de descripción que puedan devolver una gran cantidad de resultados, por ejemplo, `DescribeInstances`. El uso de paginación limita el número de elementos devueltos por una llamada de descripción y el tiempo que tarda en devolverse la llamada. Si tiene un gran número de recursos, es posible que las llamadas no paginadas tengan limitación y se agote el tiempo de espera. Por tanto, la latencia general es mejor con llamadas paginadas que con no paginadas, ya que las llamadas paginadas se realizan correctamente de forma constante.

Para obtener más información, consulte [Paginación](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination) en la *Referencia de la API de Amazon EC2*.

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

Siempre que sea posible, especifique una lista de ID de recursos en las llamadas de descripción. Esta es la forma más rápida de describir un gran número de recursos. Tenga en cuenta que no debe especificar más de 1000 ID en una sola llamada. A continuación se muestra un ejemplo.

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

Si no puede especificar los ID de recurso en las llamadas de descripción, le recomendamos encarecidamente que utilice paginación. A continuación se muestra un ejemplo.

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

Si necesita reintentar una llamada paginada, utilice [retardo exponencial con fluctuación](ec2-api-throttling.md#api-backoff).

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

A continuación se ofrecen ejemplos de código que realiza llamadas no paginadas de forma inadvertida.

**Example Ejemplo de problema: pasar una lista vacía de ID de recursos**  
En el siguiente código se utiliza una lista de ID. Sin embargo, si la lista está vacía, el resultado es una llamada no paginada.  

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

    return ec2.describeInstances(request).getReservations();
}
```
Para corregir este problema, asegúrese de que la lista no esté vacía antes de realizar la llamada de descripción.  

```
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 Problema de ejemplo: no configurar MaxResults**  
El siguiente código comprueba y utiliza `nextToken`, pero no configura `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 corregir este problema, agregue `withMaxResults` de este modo.  

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