Stránkování + idempotence
Kurzorové stránkování na každém endpointu pro výpis; Idempotency-Key na každém endpointu měnícím stav. Dva vzory, které si jednou osvojíte; každý endpoint je dodržuje.
Kurzorové stránkování
Všechny endpointy pro výpis (GET /api/v1/public/sessions, /evidence, /whiteboards atd.) vracejí obálku:
{
"data": [
{ /* resource */ },
{ /* resource */ }
],
"has_more": true,
"next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0yMVQxNDoyMSswMDowMCJ9"
} Jak stránkovat
- Odešlete první požadavek bez parametru
cursor. - Pokud je
has_moretrue, předejtenext_cursordoslovně jako query parametrcursorv dalším požadavku. - Opakujte, dokud není
has_morefalse.
curl "https://app.nexbasira.com/api/v1/public/sessions?limit=25" \
-H "Authorization: Bearer nb_sec_..."
# response includes next_cursor: "eyJjcmVhdGVkX2F0Ijo..."
curl "https://app.nexbasira.com/api/v1/public/sessions?limit=25&cursor=eyJjcmVhdGVkX2F0Ijo..." \
-H "Authorization: Bearer nb_sec_..." Limity
| Parametr | Výchozí | Max |
|---|---|---|
limit | 25 | 100 |
Vyšší hodnoty limit snižují počet round-tripů, ale zvyšují velikost payloadu na odpověď + čas serializace. Výchozí hodnota 25 je vhodná pro použití v UI; noční dávkové úlohy typicky předávají 100.
Tvar kurzoru
Kurzor je pro klienty neprůhledný — je to JSON blob zakódovaný v base64, který kóduje pozici v podkladovém querysetu. Nerozebírejte ani nekonstruujte kurzory; jen je předávejte doslovně. Tvar není stabilní napříč verzemi API.
Řazení
Výchozí řazení je created_at DESC (nejnovější první) pro každý endpoint pro výpis. To je také pořadí, ve kterém kurzor postupuje — při stránkování budete procházet od nejnovějšího k nejstaršímu.
Pomocníci SDK
Obě SDK dodávají transparentní async iterátor, který za vás stránkuje:
// @nexbasira/node
for await (const session of nb.sessions.list({ limit: 100 })) {
// ...
}
// nexbasira (Python)
for session in nb.sessions.iter(limit=100):
... Idempotence
Každý endpoint měnící stav přijímá hlavičku Idempotency-Key. Předejte jedinečný klíč (typicky UUID) na logickou operaci; opakování se stejným klíčem vrátí odpověď z mezipaměti bez opětovného vytvoření zdroje.
curl -X POST https://app.nexbasira.com/api/v1/public/sessions \
-H "Authorization: Bearer nb_sec_..." \
-H "Idempotency-Key: 01HGAB7T8X3PVT3HKEXAMPLE" \
-H "Content-Type: application/json" \
-d '{"notes": "Vehicle damage CL-2026-0042"}' Okno mezipaměti
Odpovědi v mezipaměti žijí 24 hodin. Přehrání po 24 h se stejným klíčem vytvoří nový zdroj — považujte klíč za platný pouze po dobu vaší smyčky opakování.
Rozsah
Klíče jsou omezeny na (credential, endpoint, method):
- Opakování ze stejných přihlašovacích údajů na stejný endpoint se stejným klíčem vrátí odpověď z mezipaměti.
- Jiné přihlašovací údaje používající stejný klíč vytvoří nový zdroj (zachází s ním jako s novým voláním).
- Stejný klíč na jiném endpointu vytvoří nový zdroj (samostatný slot mezipaměti).
Co se ukládá do mezipaměti
Pouze úspěšné odpovědi (2xx). Neúspěšný požadavek mezipaměť neotráví — vaše další opakování se stejným klíčem dostane nový pokus.
Odezva hlavičky
Úspěšné idempotentní odpovědi vracejí klíč zpět v odpovědní hlavičce Idempotency-Key — užitečné pro logování / korelaci.
Generování klíčů
Použijte cokoli, co je globálně jedinečné pro každou logickou operaci:
crypto.randomUUID()v Node 19+uuid.uuid4()v Pythonu- ID vašeho obchodního procesu (např. číslo pojistné události + časové razítko), pokud chcete v logech čitelné stopy
Pomocníci SDK
// @nexbasira/node — pass via second arg
await nb.sessions.create(
{ notes: "..." },
{ idempotencyKey: crypto.randomUUID() },
);
// nexbasira (Python)
nb.sessions.create(notes="...", idempotency_key=str(uuid.uuid4())) Co dál
- Chyby + omezení počtu požadavků — co se stane, když stránkování nebo smyčky opakování selžou
- API relací — první endpoint, na který lze aplikovat oba vzory