Paginacja i wersja Notiondesk żądań API

Przejrzyj listy API Notiondesk za pomocą page_size i kursora, przypnij wersję za pomocą nagłówka nd-version i użyj nazw pól snake_case.

4 min czytania

Każda lista API Notiondesk korzysta z tej samej paginacji kursora, a każde żądanie może przypisać wersję API, dla której napisano integrację, za pomocą nagłówka nd-version. W tym artykule wyjaśniono, jak działa paginacja API Notiondesk, jak odczytać każdą stronę listy, jak działa wersjonowanie API oraz zasady nazewnictwa pól i parametrów.

Jak działa paginacja API Notiondesk

Każda trasa listy odpowiada tej samej kopercie:

{
  "object": "list",
  "data": [],
  "has_more": false,
  "next_cursor": null
}
Pole Oznaczający
objectZawsze list
dataElementy na tej stronie
has_moretrue gdy następuje kolejna strona
next_cursorWartość, którą należy przekazać jako cursor, aby przejść do następnej strony, lub null na ostatniej stronie

Kontroluj stronę za pomocą dwóch parametrów zapytania:

Parametr Typ Domyślny Notatki
page_sizeliczba całkowita od 1 do 10020
cursorsmyczkowy nic next_cursor z poprzedniej strony, przekazane bez zmian

Listy nie zawierają numerów stron ani łącznej liczby sztuk.

Przeczytaj każdą stronę listy

Powtórz żądanie z wartością cursor ustawioną na wartość next_cursor z poprzedniej odpowiedzi, aż wartość has_more będzie równa false.

Pierwsza strona:

Następna strona, na której NEXT_CURSOR zastąpiono zakodowanym w adresie URL next_cursor z pierwszej strony:

Ta sama pętla w JavaScript:

A w Pythonie:

Reguły kursora

curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles?page_size=100" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16"
curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles?page_size=100&cursor=NEXT_CURSOR" \
  -H "Authorization: Bearer $NOTIONDESK_API_KEY" \
  -H "nd-version: 2026-10-16"
async function listAll(path) {
  const items = [];
  let cursor = null;

  do {
    const url = new URL(`https://api.notiondesk.so${path}`);
    url.searchParams.set("page_size", "100");
    if (cursor) {
      url.searchParams.set("cursor", cursor);
    }

    const response = await fetch(url, {
      headers: {
        Authorization: `Bearer ${process.env.NOTIONDESK_API_KEY}`,
        "nd-version": "2026-10-16",
      },
    });
    const page = await response.json();

    items.push(...page.data);
    cursor = page.has_more ? page.next_cursor : null;
  } while (cursor);

  return items;
}

const articles = await listAll("/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles");
import os
import requests

def list_all(path):
    items, cursor = [], None
    while True:
        params = {"page_size": 100}
        if cursor:
            params["cursor"] = cursor
        page = requests.get(
            f"https://api.notiondesk.so{path}",
            params=params,
            headers={
                "Authorization": f"Bearer {os.environ['NOTIONDESK_API_KEY']}",
                "nd-version": "2026-10-16",
            },
        ).json()
        items.extend(page["data"])
        if not page["has_more"]:
            return items
        cursor = page["next_cursor"]
  • Kursor jest nieprzezroczysty. Nie analizuj go ani nie twórz samodzielnie. Przekaż go z powrotem dokładnie w takiej formie, w jakiej go otrzymałeś.
  • Możesz zmieniać page_size między stronami. Następna strona zaczyna się tam, gdzie kończyła się poprzednia.
  • Kursor zajmuje pozycję, a nie migawkę. Element dodany lub usunięty podczas przeglądania strony może przesuwać elementy po nim, dzięki czemu strona może powtarzać lub pomijać jeden element. Jeśli integracja usunie elementy podczas ich wyświetlania, zacznij od nowa od pierwszej strony.
  • Niektóre listy kończą się przedwcześnie. Lista zmian obejmuje maksymalnie 1000 najnowszych wpisów. Przekierowania stron i informacje zwrotne obejmują maksymalnie 10 000 najnowszych wpisów. Powyżej tego limitu has_more to false.
  • Niektóre listy nigdy nie są stronicowane. Motywy i integracje zawsze zwracają wszystko w jednej odpowiedzi, z has_more: false.

Nieprawidłowo sformatowany kursor lub taki, który wskazuje poza koniec listy, odpowiada 400 validation_error.

Wersja integracji API Notiondesk

Wyślij opcjonalny nagłówek nd-version, aby przypiąć wersję kontraktu, dla której została napisana Twoja integracja:

nd-version: 2026-10-16
Wersja Status
2026-10-16Aktualny
  • Bez nagłówka żądanie używa wersji bieżącej.
  • W nagłówku nd-version każdej odpowiedzi podana jest wersja odpowiedzi.
  • Nieznana wartość odpowiada 400 invalid_version.

Nowe trasy, nowe parametry opcjonalne i nowe pola odpowiedzi są dostarczane bez nowej wersji. Twoja integracja musi ignorować pola, których nie rozpoznaje, więc nowe pole nigdy jej nie zepsuje.

Uwaga: Przypnij w kodzie produkcyjnym. Twoja integracja zachowa wówczas zachowanie, które zostało przetestowane, gdy przyszła wersja zmieni odpowiedź.nd-version

Zasady nazewnictwa

  • Nazwy pól w żądaniach i odpowiedziach są zapisane w formacie snake_case : page_size, next_cursor, default_locale.
  • Parametry zapytania mają jedną pisownię. ?page_size=10 działa. ?pageSize=10 jest odrzucany jako nieznany parametr z 400 validation_error.
  • Nieznane parametry i pola treści są odrzucane kodem 400 validation_error, więc literówka nigdy nie zostanie pominięta.
  • API używa własnych rzeczowników. Centrum pomocy to site, a kolekcja to category. Ścieżki wyglądają tak: /sites/{site_id}/categories.
  • Daty są w formacie ISO 8601 , na przykład 2026-10-18T14:39:03+00:00.

Często zadawane pytania

Jak uzyskać łączną liczbę artykułów?

Listy nie zawierają całkowitej liczby. Przejrzyj listę i policz elementy lub wywołaj raport analityczny quick, który zwróci liczbę artykułów w Centrum pomocy. Zobacz Uzyskiwanie analiz Centrum pomocy za pomocą interfejsu API Notiondesk .

Jaki jest maksymalny rozmiar strony?

100 pozycji. Wartość domyślna to 20. Wartość spoza zakresu 1–100 odpowiada 400 validation_error.

Czy muszę wysłać nagłówek nd-version?

Nie. Bez niego żądanie używa aktualnej wersji. Zaleca się jego wysłanie w przypadku integracji produkcyjnych, aby ich działanie pozostało niezmienne.

Czy nowe pole odpowiedzi przerwie moją integrację?

Nie, jeśli kod ignoruje pola, których nie rozpoznaje. Notiondesk dodaje pola odpowiedzi bez nowej wersji.

Co dalej?

Powiązane artykuły

Czy ta strona była pomocna?

Still need help? Ask us