Caso de Uso: Consultas Paginadas

Clase: net.hrider.api.usecases.Pagination.java
Algunas de las colecciones de la API pueden ser demasiado grandes para obtenerlas en una única petición, es el caso por ejemplo de empleados y evaluaciones. En estos casos, la API pagina el resultado retornando solo una cantidad pequeña de resultados por petición.
Para navegar por la colección se utilizan los parámetros 'query' page, para indicar un número de página concreto, y pageSize para indicar el número de elementos que queremos obtener por cada página. Si no se especifican, los valores por defecto son page 1 y pageSize 50.

Puesto que la API de Hrider sigue el principio HATEOS, podemos navegar fácilmente por la colección utilizando sus enlaces next y previous sin preocuparnos de crear la URI para la página siguiente o previa. Vamos a ver un ejemplo:

Para empezar, creamos algunos empleados que obtendremos más adelante de forma paginada:

Link employeesLink = company.getLinks().getEmployees();
service.create(employeesLink, buildEmployee("EMP1", "Employee 1", "[email protected]"));
service.create(employeesLink, buildEmployee("EMP2", "Employee 2", "[email protected]"));
service.create(employeesLink, buildEmployee("EMP3", "Employee 3", "[email protected]"));        


Ahora realizamos una consulta paginada de 2 en 2 empleados (pageSize = 2) e imprimimos cada página:

Link link = company.getLinks().getEmployees().addQueryParam("pageSize", "2");
EmployeesCollection collection = service.get(EmployeesCollection.class, link);
int page = 1;
printPage(page++, collection.getEmbedded().getEmployees());
while (collection.getLinks().getNext() != null) {
    collection = service.get(EmployeesCollection.class, collection.getLinks().getNext());
    printPage(page++, collection.getEmbedded().getEmployees());
}

Como vemos, utilizando el enlace next podemos ir avanzando página a página mientras que next no sea null. El resultado es el esperado, una primera página con 2 empleados y la última con el empleado restante:

Page: 1
ID                  Code      Email               Name                
------------------- --------- ------------------  ------------------  
184916402857051713  EMP1      [email protected]       EMPLOYEE 1          
184916402968200770  EMP2      [email protected]       EMPLOYEE 2          


Page: 2
ID                  Code      Email               Name                
------------------- --------- ------------------  ------------------  
184916403059426883  EMP3      [email protected]       EMPLOYEE 3