Пагинация
Три вида списков используют три стиля пагинации. Выбирайте эндпоинт по задаче, а не только по набору фильтров.
| Номера страниц | Scroll-курсор | Курсор по ID | |
|---|---|---|---|
| Эндпоинты | /search, /car-options | /cars | /countries, /locations |
| Запрос | page, perPage | Переход по next_url | after_id, per_page |
| Размер страницы | 2–50, по умолчанию 50 | 1–500, по умолчанию 500 | 1–1,000, по умолчанию 100 |
| Лимит глубины | page × perPage ≤ 10,000 | Нет, курсор живёт 1–15 мин | Нет |
| Когда остановиться | links.next равен null | scroll_id равен null | meta.has_more равен false |
| Для чего | Пользовательский поиск | Синхронизация всего каталога | Синхронизация справочников |
Две особенности /search, которые нужно учесть в коде. data может содержать на один автомобиль больше, чем perPage (мы видели 3 автомобиля при perPage=2), поэтому обрезайте список на клиенте, если нужен точный размер. А meta.total ограничен 10,000: считайте это значение как «10,000 или больше» и вызывайте /search/count с теми же фильтрами, чтобы получить точное число.
Справочники автомобилей и мотоциклов
Без vehicle_type возвращаются автомобили; motorcycle / 2 выбирает мотоциклы. Сохраняйте тип на каждом шаге.
per_page — 1–100, по умолчанию 100. Используйте page или after_id, но не оба. Для страниц: page × per_page ≤ 10000. Для полной выгрузки передавайте next_after_id как after_id без page до has_more=false. Тогда total считает оставшиеся совпадения.
Без пагинации /brands и /models сохраняют прежние массивы и лимиты. Передайте per_page=100 для {data,meta}. Вложенные generations сохраняют {name,from,to}; ID поколений берите из /generations/{model_id}.
{
"links": {
"first": "https://api.carstat.dev/search?perPage=2&page=1",
"last": "https://api.carstat.dev/search?perPage=2&page=5000",
"prev": null,
"next": "https://api.carstat.dev/search?perPage=2&page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5000,
"path": "https://api.carstat.dev/search",
"per_page": 2,
"to": 3,
"total": 10000
}
}{
"data": [
"…3 countries…"
],
"meta": {
"per_page": 3,
"has_more": true,
"next_after_id": 3
}
}Получите доступ к API
Подключите ключ, чтобы выполнять любой запрос с этих страниц на своих данных. Ключа ещё нет? Попросите у нас демо-ключ: тот же JSON, что и в платных тарифах.