Obsługa stronicowania i sortowania

Ostatnia aktualizacja: 3 miesiące temu

Interfejs API zwraca wyniki wyszukiwania w postaci stron. Oto jak sprawnie poruszać się po dużych zbiorach wyników.

Podstawowe stronicowanie

POST /resources
{
  "query": "saints",
  "page": 1,
  "page_size": 20
}
Odpowiedź:
{
  "total": 1523,
  "page": 1,
  "page_size": 20,
  "results": [ ... 20 items ... ]
}

Odpowiedź informuje, że łącznie jest 1 523 wyniki, a Ty przeglądasz stronę 1 z 20 elementami.

Obliczanie liczby stron

const totalPages = Math.ceil(response.total / response.page_size);
// 1523 / 20 = 76.15 → 77 stron

Wczytywanie następnej strony

// Prosta kolejna strona
currentPage++;
// Albo zbuduj interfejs stronicowania
for (let page = 1; page <= totalPages; page++) {
  // Utwórz przycisk strony
}

Optymalizacja rozmiaru strony

Wybierz rozmiar strony w zależności od swojego przypadku użycia:

Małe strony (10–20 elementów):

  • Szybsze początkowe wczytywanie

  • Dobre do wyszukiwania dostępnego dla użytkowników

  • Potrzebnych jest więcej zapytań do API

Duże strony (50–100 elementów):

  • Mniej zapytań do API

  • Dobre do przetwarzania wsadowego

  • Wolniejsze pojedyncze zapytania

  • Maksimum to 100 elementów

Opcje sortowania

Popularne (domyślne):

{
  "order": "popular"
}

Zwraca najpierw najczęściej pobierane zasoby. Najlepsze do prezentowania treści wysokiej jakości, sprawdzonych.

Najnowsze:

{
  "order": "recent"
}

Zwraca najpierw najnowsze przesłane materiały. Dobre do odkrywania świeżych treści.

Przykład nieskończonego przewijania

let currentPage = 1;
const pageSize = 20;
let isLoading = false;
let hasMore = true;
async function loadMore() {
  if (isLoading || !hasMore) return;
  
  isLoading = true;
  
  const response = await fetch('https://api.cathopic.com/resources', {
    method: 'POST',
    headers: {
      'x-api-key': apiKey,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      query: 'prayer',
      page: currentPage,
      page_size: pageSize,
      order: 'popular'
    })
  });
  
  const data = await response.json();
  
  // Dodaj wyniki do swojego interfejsu
  appendResults(data.results);
  
  // Sprawdź, czy są kolejne strony
  const totalPages = Math.ceil(data.total / pageSize);
  hasMore = currentPage < totalPages;
  
  currentPage++;
  isLoading = false;
}
// Wywołaj przy przewijaniu
window.addEventListener('scroll', () => {
  if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {
    loadMore();
  }
});

Wskazówki dotyczące wydajności

  • Buforuj wyniki lokalnie, aby uniknąć zbędnych zapytań

  • Stosuj odpowiednie rozmiary stron do swojego przypadku użycia

  • Wdroż stany ładowania dla lepszego UX

  • Rozważ wirtualizację dla bardzo długich list

  • Nie pobieraj wszystkich stron naraz — wczytuj na żądanie

Aby uzyskać więcej szczegółów, zobacz pełną dokumentację na stronie api.cathopic.com/docs.

Czy ten artykuł był pomocny?