Z nagłówkami za pan brat — X-Total-Count

Pierwszy z serii postów na temat przydatnych nagłówków HTTP. Dziś na warsztat biorę X-Total-Count, który przyda się nam przy obsłudze paginacji w REST’owych usługach.

W celu poprawnej obsługi paginacji potrzebujemy określić przynajmniej 3 elementy: numer aktualnej strony, liczba pozycji na stronę oraz liczba wszystkich dostępnych elementów. W większości przypadków w grę wchodzić będą jeszcze dodatkowe filtry na dane, jednak pominę je tutaj, dla ułatwienia przykładu.

Nad pierwszymi dwoma elementami (numer i wielkość strony) nie ma sensu się rozwodzić, każdy może określić je wedle własnego uznania. Uzyskanie ostatniego z tercetu, wymagać będzie odwołania się do zasobów serwera. Nic nie stoi na przeszkodzie, aby przy okazji żądania pobierającego dane, serwer zwrócił nam aktualną liczbę wszystkich elementów. Zaletą tego rozwiązania jest zwolnienie z konieczności drugiego odpytania serwera i każdorazowo aktualna liczba danych.

Dobrą praktyką w tym wypadku jest wykorzystanie, wspomnianego już, nagłówka X-Total-Count. Prosty przykład jak można go zaimplementować:

Metoda pobierająca dane przyjmuje query parametry w celu zwrócenia poprawnej strony. Adnotacja @DefaultValue umożliwia przypisanie domyślnej wartości do parametrów metody REST’owej. Klasa PageRequest pomaga przy określaniu offsetu dla pobieranych danych.

Prosty projekt, oparty na Dropwizard, z użyciem powyższego kodu można znaleźć na moim GitHubie.