// Document 1: fetch first page and extract cursor
localhost:50051
api.ItemService/ListItems
{
"category": "electronics",
"limit": 10
}
{
"cursor": "eyJvZmZzZXQiOjEwfQ==",
"has_more": true,
"items": [
{
"id": "item-1",
"name": "Laptop"
},
{
"id": "item-2",
"name": "Phone"
}
],
"total": 42
}
item_count == 2
has_more == true
// Document 2: fetch second page using cursor
api.ItemService/ListItems
{
"category": "electronics",
"cursor": "{{next_cursor}}",
"limit": 10
}
{
"cursor": "eyJvZmZzZXQiOjIwfQ==",
"has_more": true,
"items": [
{
"id": "item-3",
"name": "Tablet"
},
{
"id": "item-4",
"name": "Monitor"
}
],
"total": 42
}
page2_count == 2
next_cursor != "{{next_cursor}}"
// Document 3: fetch remaining items (last page)
api.ItemService/ListItems
{
"category": "electronics",
"cursor": "{{next_cursor}}",
"limit": 10
}
{
"cursor": "",
"has_more": false,
"items": [],
"total": 42
}
@len(.items) == 0
.has_more == false