Kanorio

API 레퍼런스

페이지네이션

모든 Kanorio API의 목록 엔드포인트는 limit와 cursor를 사용하여 데이터를 가져오며 hasMore와 nextCursor를 반환합니다.

Management API, Content Delivery API, Customer API의 모든 목록 엔드포인트는 동일한 방식으로 페이지네이션을 처리합니다.

요청

매개변수유형기본값참고 사항
limit정수201부터 100까지입니다. 일부 엔드포인트는 더 낮은 최댓값을 명시합니다.
cursor문자열없음이전 페이지의 nextCursor입니다. 첫 페이지에서는 생략하십시오.

응답

{
  "data": [{ "id": "post_example01" }, { "id": "post_example02" }],
  "hasMore": true,
  "nextCursor": "eyJvIjoyMCwicyI6ImFiYzEyMyJ9"
}
필드유형참고 사항
data배열엔드포인트 순서에 따른 해당 페이지의 항목입니다.
hasMore불리언다음 페이지가 존재할 경우 true입니다.
nextCursor문자열 또는 null다음 페이지를 가져오려면 cursor로 전달하십시오. 마지막 페이지에서는 null입니다.

일부 엔드포인트는 여기에 추가 필드를 포함합니다. 예를 들어, 컬렉션 아이템 엔드포인트는 페이지에서 참조하는 모든 이미지와 파일을 맵 형태로 담은 assets 필드를 추가합니다.

규칙

  • 커서는 불투명한 값입니다. 커서를 파싱하거나, 직접 생성하거나, 장기간 저장하지 마십시오. 커서 형식은 예고 없이 변경될 수 있습니다.
  • 다른 매개변수를 유지하십시오. 커서는 해당 커서가 발행될 때 사용된 필터, 정렬, 제한 설정에 종속됩니다. 다른 필터와 함께 커서를 보내면 400 INVALID_CURSOR 오류가 발생합니다. 필터를 변경할 때는 커서 없이 처음부터 다시 시작하십시오.
  • 페이지 번호나 오프셋을 사용하지 않습니다. API는 page, pageSize, offset 매개변수를 허용하지 않습니다.
  • 기본적으로 전체 개수를 반환하지 않습니다. 모든 일치 항목을 계산하는 것은 비용이 많이 들기 때문에 목록은 전체 개수를 반환하지 않습니다. Content Delivery API에서는 컬렉션 아이템과 검색 두 엔드포인트가 total=true를 전달하면 total 값을 반환합니다(검색의 전체 개수는 결과와 같은 쿼리에서 계산됩니다).
  • 짧은 목록도 엔벨로프를 사용합니다. Webhook 엔드포인트나 리다이렉트와 같이 고정된 작은 제한이 있는 목록도 hasMore: false와 함께 한 페이지에 모든 결과를 반환합니다. 자세한 내용은 각 참조 페이지를 확인하십시오.

모든 페이지 읽기

curl "https://app.kanorio.com/api/v1/sites/ws_example123/posts?limit=50" \
  -H "Authorization: Bearer $KANORIO_TOKEN"

# then, while hasMore is true
curl "https://app.kanorio.com/api/v1/sites/ws_example123/posts?limit=50&cursor=eyJvIjo1MH0" \
  -H "Authorization: Bearer $KANORIO_TOKEN"

SDK의 paginate는 nextCursor를 자동으로 추적하며 모든 목록 엔드포인트에서 작동합니다.

import { createManagementClient, paginate } from "@kanorio/sdk";

const client = createManagementClient({ token: process.env.KANORIO_TOKEN! });

for await (const post of paginate((cursor) =>
  client.get("/sites/{id}/posts", { params: { id: "ws_example123" }, query: { limit: 50, cursor } })
)) {
  console.log(post.slug);
}

전체 목록을 배열로 가져오려면 paginate 대신 listAll을 사용하십시오.