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