Выбор ответа Middle REST и документация API обновлено

Баг пагинации через offset

Вопрос

Лента заказов отдаётся GET /orders?limit=20&offset=20. Пока пользователь листает, появляется новый заказ (сортировка по дате, новые сверху). Какой баг возможен на второй странице?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Заказ с конца первой страницы появится повторно. Новый заказ сдвигает всю выборку на одну позицию, и последний элемент первой страницы окажется первым на второй: дубль.

Варианты ответа

  1. Заказ с конца первой страницы появится повторноправильный ответ
  2. Вторая страница вернёт 404 из-за сдвига offset
  3. Заказы на второй странице перемешаются случайно
  4. Ничего: offset защищает от сдвигов при вставке

Разбор

Новый заказ сдвигает всю выборку на одну позицию, и последний элемент первой страницы окажется первым на второй: дубль. При удалении обратная ситуация: элемент пропадёт. Курсорная пагинация (?after=<id или дата>) этого лишена. Хороший тест: вставить или удалить запись между запросами страниц.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме