Passa al contenuto principale

Paginazione REST

Le API REST di Riseact utilizzano la paginazione offset-based tramite i parametri limit e offset. Questo è il comportamento standard di Django Ninja.

Parametri

ParametroTipoDefaultDescrizione
limitint100Numero massimo di elementi da restituire
offsetint0Numero di elementi da saltare dall'inizio

Struttura della risposta

Le liste paginate restituiscono un oggetto con i seguenti campi:

{
"items": [...],
"count": 1250
}
  • items — array degli elementi nella pagina corrente
  • count — numero totale di risultati (ignorando limit/offset), utile per calcolare il numero di pagine

Esempio

Prima pagina (20 elementi):

curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://core.riseact.org/api/v1/supporters/?limit=20&offset=0"

Seconda pagina:

curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://core.riseact.org/api/v1/supporters/?limit=20&offset=20"

Risposta:

{
"items": [
{
"id": 1,
"first_name": "Mario",
"last_name": "Rossi",
"email": "mario@example.com"
}
],
"count": 1250
}

Calcolare il numero di pagine

const totalPages = Math.ceil(response.count / limit);

Recuperare tutti gli elementi

async function fetchAll(endpoint, token) {
const limit = 100;
let offset = 0;
const results = [];

while (true) {
const res = await fetch(
`https://core.riseact.org/api/v1/${endpoint}/?limit=${limit}&offset=${offset}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
const { items, count } = await res.json();

results.push(...items);
offset += limit;

if (offset >= count) break;
}

return results;
}

Ordinamento

Ogni endpoint REST accetta un parametro order per specificare il campo di ordinamento. Il prefisso - indica l'ordine discendente.

# Donazioni ordinate per data crescente
GET /api/v1/donations/?order=create_date

# Donazioni ordinate per data decrescente (default)
GET /api/v1/donations/?order=-create_date

Il default di tutti gli endpoint è -create_date (più recenti prima).

Endpoint che supportano la paginazione

EndpointMetodo
/api/v1/supporters/GET
/api/v1/donations/GET
/api/v1/payments/GET
/api/v1/campaigns/GET
/api/v1/checkouts/GET