Некоторые методы возвращают множество объектов (диалоги, пользователи, события и т.д.). Мы предоставляем удобный способ получить весь набор данных за несколько последовательных запросов. Используется cursor-based пагинация.
В зависимости от запроса, ключом пагинации может выступать разные параметры данных:
Применяется, если вы используете API без версии или с версией больше 2
(включительно).
Подробнее про версионирование.
GET
методов):paginate_position
- JSON-массив элементов. Содержит текущую позицию курсора пагинации.
Содержимое массива может отличаться в зависимости от запроса. Наиболее распространены:
Для некоторых запросов доступны не все направления пагинации. Об этом будет написано в описании конкретного запроса.
paginate_count
- Целое число от 1 до 50. Количество записей для выборки. Если указан paginate_position=around
,
то с каждой стороны получится до paginate_position / 2
элементов. По умолчанию: 20.
paginate_direction
- [after
, before
, around
]. Направление пагинации относительно paginate_position
:
after
означает, что пагинация вернет значения с ключом большим, чем paginate_position
.before
(по умолчанию) означает, что пагинация вернет значения с ключом меньшим, чем paginate_position
.around
попытается выбрать заданное количество элементов вокруг paginate_position
.paginate_including
- [true
| false
]. Включать ли элемент, указанный в paginate_position
. По умолчанию false
.
paginate_page_order
- [asc
, desc
]. Порядок сортировки получившейся страницы. По умолчанию desc
.Ответ запрос с пагинацией будет содержать в поле meta
комбинацию из 2 полей:
next_before_position
- при пагинации before
и around
указывает следующую позицию курсора
paginate_position
c paginate_direction=before
next_after_position
- при пагинации after
и around
указывает следующую позицию курсора
paginate_position
c paginate_direction=after
Если какое-то из полей содержит null
, значит больше страниц для пагинации в данном направлении нет.
Пример:
GET https://api.carrotquest.io/apps/{ID}/conversations
По умолчанию используется paginate_position=before
.
{
"meta": {
"next_before_position": [
1684739969.358085,
1160406004324630614
],
"status": 200
},
"data": [
... // Objects here
]
}
Следующий запрос будет выглядеть так:
GET https://api.carrotquest.io/apps/{ID}/conversations?paginate_position=[1684739969.358085, 1160406004324630614]
Применяется, если вы используете API с мажорной версией 1
.
Подробнее про версионирование.
Note Для обратной совместимости параметр называется after
,
хотя фактически он соответствует paginate_position=before
в версии 2.
Важно! В 1 версии пагинации по дате есть логическая ошибка, в результате которой при одинаковых timestamp у большого числа записей часть данных может быть пропущена. Это очень редкая, но возможная ситуация.
GET
методов):after
- Содержит текущую позицию курсора пагинации.
Значением является ID, timestamp или null (см. типы данных).
Как и в случае с пагинацией версии 2, это число может интерпретироваться по-разному (timestamp, первичный ключ и др.)
count
- задает максимальное количество объектов, которые будут возвращены в вызове
(от 1 до 50). По умолчанию: 20.
including
- [true
| false
]. включать ли элемент, указанный в after
page_order
- [asc
, desc
]. Порядок сортировки получившейся страницы.Ответ запрос с пагинацией будет содержать в поле meta
поле next_after
:
null
, если следующей страницы нет.Пример:
GET https://api.carrotquest.io/apps/{ID}/conversations
{
"meta": {
"next_after": 1684740107.380634,
"status": 200
},
"data": [
... // Objects here
]
}
Следующий запрос будет выглядеть так:
GET https://api.carrotquest.io/apps/{ID}/conversations?after=1684740107.380634