Выбор ответа Middle Проектирование API обновлено
Дубли при offset-пагинации
Вопрос
Лента новостей отдаётся через ?limit=20&offset=N, сортировка от новых к старым. Пользователь листает, и иногда видит одну и ту же новость на двух страницах подряд. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Между запросами появились новые записи, и строки на границе страниц сдвинулись. Offset считает позицию от начала выборки.
Варианты ответа
- Между запросами появились новые записи, и строки на границе страниц сдвинулисьправильный ответ
- База данных не гарантирует уникальность строк при сортировке по дате создания
- Браузер закешировал предыдущую страницу и подставил её кусок в новый ответ
- Для пагинации нужно было использовать PUT вместо GET, чтобы сервер держал позицию
Разбор
Offset считает позицию от начала выборки. Новая запись в начале сдвигает всё, и последний элемент страницы 1 становится первым на странице 2. Cursor-пагинация отсчитывает от конкретного элемента и этого избегает. Уникальность строк тут ни при чём. Кеш вернул бы ту же страницу целиком, а не одну повторившуюся запись. Метод на это не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.