Paginering en sortering beheren

Laatst bijgewerkt: 3 maanden geleden

De API geeft zoekresultaten in pagina’s terug. Zo navigeer je efficiënt door grote resultatenreeksen.

Basis-paginering

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

Het antwoord vertelt je dat er in totaal 1.523 resultaten zijn, en dat je pagina 1 bekijkt met 20 items.

Het aantal pagina’s berekenen

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

Volgende pagina laden

// Eenvoudige volgende pagina
currentPage++;
// Of bouw een paginerings-UI
for (let page = 1; page <= totalPages; page++) {
  // Maak een paginaknop
}

Paginaformaat optimaliseren

Kies het paginaformaat op basis van je use case:

Kleine pagina’s (10-20 items):

  • Snellere initiële laadtijd

  • Goed voor zoeken voor gebruikers

  • Er zijn meer API-aanvragen nodig

Grote pagina’s (50-100 items):

  • Minder API-aanvragen

  • Goed voor batchverwerking

  • Langzamere individuele aanvragen

  • Maximum is 100 items

Sorteeropties

Populair (standaard):

{
  "order": "popular"
}

Geeft de meest gedownloade bronnen eerst terug. Het beste voor het tonen van hoogwaardige, bewezen content.

Recent:

{
  "order": "recent"
}

Geeft de nieuwste uploads eerst terug. Goed om nieuwe content te ontdekken.

Voorbeeld van infinite scroll

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();
  
  // Voeg resultaten toe aan je UI
  appendResults(data.results);
  
  // Controleer of er nog meer pagina’s zijn
  const totalPages = Math.ceil(data.total / pageSize);
  hasMore = currentPage < totalPages;
  
  currentPage++;
  isLoading = false;
}
// Trigger bij scrollen
window.addEventListener('scroll', () => {
  if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {
    loadMore();
  }
});

Tips voor prestaties

  • Cache resultaten lokaal om onnodige aanvragen te vermijden

  • Gebruik passende paginaformaten voor je use case

  • Implementeer laadstatussen voor een betere gebruikerservaring

  • Overweeg virtualisatie voor erg grote lijsten

  • Haal niet alle pagina’s tegelijk op - laad op aanvraag

Voor meer details, zie de volledige documentatie op api.cathopic.com/docs.

Was dit artikel nuttig?