La lecture (R du CRUD) permet de lire des collections d'entités. Dès qu'il y a un volume conséquent de données, on voudra permettre de récupérer des données :
- par pages
- triées
Au niveau de la requête, on va considérer qu'une page n'a pas d'existence propre et n'a donc pas d'URI dédiée, mais correspond à un paramétrage de l'URI d'accès à la collection de l'ensemble des entités. Ce paramétrage indique :
- la taille des pages (combien d'entités par page)
- le numéro de page (attention : indice commençant à 0 ou à 1 ?)
L'ordre correspond lui aussi à un paramétrage déterminé par un ou plusieurs :
- attribut de l'entité (e.g. nom, prix, popularité,…)
- direction ascendant ou descendante (e.g. tri par prix croissants ou décroissants)
On utilisera l'interface Page pour représenter une page et l'interface Sort pour représenter les ordres (façons de trier) dans le framework Spring
Au niveau JPA, on utilise l'interface PagingAndSortingRepository (ou une interface dérivée ).
En utilisant l'URL http://localhost:8080/swagger-ui.html . Celle-ci est générée grâce aux annotations comme @ApiParam.
Utiliser l'annotation PageableDefault pour gérer les valeurs par défaut de pagination. Si l'on veut utiliser un paramètre de type Pageable au niveau de la requête, il faut aider swagger à le gérer.
Essayer de généraliser le code qui gère l'ordre de tri.
Au delà de REST, on pourrait vouloir implémenter HATEOAS avec notamment les liens vers les pages suivante et précedente d'une page donnée. La bibliothèque spring-hateoas met à disposition un framework pour réaliser une telle implémentation. Pour automatiser l'implémentation d'accès à nos données par REST, on peut aussi utiliser spring-data-rest, y compris pour gérer la pagination.