Pagination
Endpoint daftar (mis. kontak, percakapan, pesan) mengembalikan hasil per-halaman menggunakan pagination berbasis kursor. Kursor lebih stabil daripada offset saat data berubah selama Anda menelusuri.
Parameter
| Parameter | Lokasi | Arti |
|---|---|---|
limit | query | Jumlah item per halaman (ada nilai default & maksimum per endpoint). |
cursor | query | Penanda halaman berikutnya, dari respons sebelumnya. |
Bentuk respons
Respans daftar membawa data dan kursor untuk halaman selanjutnya:
json
{
"data": [
{ "id": "c_01", "name": "Budi" },
{ "id": "c_02", "name": "Sari" }
],
"pageInfo": {
"hasNextPage": true,
"nextCursor": "eyJpZCI6ImNfMDIifQ"
}
}Bentuk pasti dapat berbeda per-endpoint
Nama field (pageInfo/nextCursor/meta) dan amplop respons bisa bervariasi. Selalu cek bentuk persisnya di Referensi API interaktif.
Menelusuri semua halaman
Lanjutkan selama hasNextPage true, teruskan nextCursor ke permintaan berikutnya:
ts
async function* listAll(path: string) {
let cursor: string | undefined
do {
const url = new URL(`https://api.volara.chat/api/v1/${path}`)
url.searchParams.set('limit', '100')
if (cursor) url.searchParams.set('cursor', cursor)
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.VOLARA_API_KEY}` },
})
const body = await res.json()
for (const item of body.data) yield item
cursor = body.pageInfo?.hasNextPage ? body.pageInfo.nextCursor : undefined
} while (cursor)
}
for await (const contact of listAll('contacts')) {
console.log(contact.id)
}Praktik baik
- Pakai
limitsebesar mungkin yang diizinkan untuk mengurangi jumlah permintaan, tetapi tetap hormati Rate Limits. - Perlakukan
cursorsebagai token buram (opaque) — jangan parse atau ubah. - Untuk sinkronisasi real-time, gabungkan dengan Webhooks alih-alih polling berulang.
Langkah selanjutnya
- Rate Limits agar penelusuran besar tetap aman.
- Errors untuk menangani kegagalan di tengah halaman.