Reddit App API
RU

Reddit App API · 04 / 08

«Показать ещё» должно означать одну осознанно выбранную страницу

Корректно используйте границы страниц, дополнительную проверочную запись и поля общего количества. Дайте пользователю управлять переходом без обещания полного экспорта или стабильного снимка.

Сделайте следующее действие небольшим

Предположим, иллюстративное туристическое приложение ищет offline maps в hiking с limit=3 и page=1. Читатель открывает полученные материалы и решает, полезна ли ещё одна группа. «Показать ещё» должно запрашивать следующую страницу того же вопроса, а не незаметно обходить все страницы или менять запрос, оставляя на экране старые результаты.

Визуальная подсказка — элемент «Показать ещё», возникающий, когда ответ допускает следующую страницу. Пока действие выполняется, отключайте повторное нажатие и оставляйте показанные материалы доступными. Каждый успешный запрос страницы расходует один кредит, включая пустую страницу. Отказавшись от следующей страницы, читатель избегает будущего запроса; уход с экрана не гарантирует отмены или возврата за уже отправленный.

Храните состояние запроса вместе

При увеличении page сохраняйте q, subreddit, другие выбранные фильтры и limit. Если читатель меняет фразу или диапазон дат, начните новую последовательность с page=1. Вторая страница другого вопроса, добавленная в старый список, искажает историю чтения, даже если оба запроса успешны.

Архив использует порядок _doc. Это не порядок по времени, релевантности или оценке; min_score — фильтр, а не команда сортировки. Полученные записи можно переупорядочить для показа, но это не выделяет самые новые или лучшие совпадения во всём архиве. Повторные запросы страниц не сопровождаются гарантией стабильного снимка.

Используйте ответ, а не поиск пустой страницы в цикле

pagination.has_more опирается на дополнительную проверочную запись, когда окно запроса позволяет её получить. Предлагайте следующее действие только при has_more=true и номере страницы меньше 100. Не продолжайте загрузки до появления пустой страницы: сервис уже сообщает о продолжении, а лишние успешные запросы расходуют кредиты.

Читайте pagination.total вместе с pagination.relation. eq означает точное количество в рамках правил подсчёта этого ответа; gte — нижнюю границу, а не статистическую оценку; unknown не даёт надёжного итога и может сопровождаться null. В гипотетическом первом ответе с тремя видимыми записями, total=4 и relation=gte можно написать, что указано не менее четырёх совпадений. Нельзя утверждать, что их ровно четыре.

Распознавайте ограниченное окно

Границы — 100 записей на запрос и 100 страниц. На странице 100 с limit=100 полная последняя страница не оставляет места для дополнительной проверочной записи. Поэтому pagination.window_exhausted может быть true одновременно с has_more=false и relation=gte. На этой границе false у has_more не доказывает отсутствие дальнейших совпадений в архиве.

Пустая страница после page=1 также не устанавливает глобальный итог; для такого случая шлюз помечает общее количество как unknown. Объясняйте читателю фактическую границу, например «Достигнута граница этого поискового окна», а не «Загружены все обсуждения». Сужение запроса помогает организовать дальнейшую работу, но не превращает ограниченные запросы в исчерпывающий экспорт.

Объединяйте аккуратно и позволяйте продолжить после ошибки

Если фактический идентификатор записи присутствует, приложение может не показывать одну запись дважды в накапливаемом списке. Выбирайте правила идентичности по действительно полученным полям; не выдумывайте отсутствующий ID и не объединяйте разные записи лишь из-за похожего текста. Локальное устранение повторов не доказывает полноту оставшегося списка.

При неудачном запросе следующей страницы оставьте прежние записи и вопрос нетронутыми и предложите явный повтор. Храните номер ожидаемой страницы отдельно, пока исход не известен, и обрабатывайте нарушенный порядок ответов в логике приложения. API не предоставляет курсорного эндпоинта и не управляет этим состоянием интерфейса. В /ru/#field-notes есть примеры отдельных состояний загрузки и бюджета запросов.