Сначала определите, какой результат нужен: каталог на одну согласованную границу или последовательность актуальных изменений. Это разные задачи. Если бизнесу нужна воспроизводимая выгрузка, у неё должны быть понятны состав, завершение и условия возобновления.
Когда страницы меняются во время чтения
Учебный каталог содержит товары A, B, C и D, отсортированные по названию. Получатель читает первые два, затем источник удаляет A. В новом списке B, C, D третьим становится D. Если продолжить с прежним числовым смещением, C может не попасть в выгрузку. Вставка перед прочитанной границей, наоборот, может привести к повтору уже полученной записи.
Проблема не ограничивается удалением. При сортировке по изменяемой цене запись способна перейти с ещё не прочитанной страницы на уже прочитанную. Устойчивый идентификатор помогает отличить повтор, но не возвращает пропущенную строку. Поэтому правило сортировки, граница выборки и поведение при изменениях обсуждаются вместе.
Нужно решить и состав набора: включаются ли скрытые товары, варианты и архивные записи. Получатель не сможет проверить полноту, если источник считает одним каталогом активные товары, а потребитель ожидает ещё и снятые с продажи позиции.
Курсор и граница снимка
Курсор — указатель для продолжения чтения. Само наличие такого указателя не гарантирует неизменного снимка. Он может означать только место в текущем списке. В контракте необходимо объяснить, сохраняется ли состав выборки и какие изменения видит следующий запрос.
Для учебной выгрузки выбираем снимок catalog-S7, содержащий A–D на момент начала. Добавленный позже E относится к следующей выгрузке. Возможность хранить такой снимок и срок его доступности должны быть подтверждены реализацией, а не названием параметра.
| Вариант | Что получает потребитель | Что нужно согласовать |
|---|---|---|
| Смещение в текущем списке | Страницы меняющегося набора | Допустимость пропусков и способ последующей сверки |
| Продолжение по устойчивому ключу | Записи после заданной границы | Сортировку, обновления уже прочитанных записей |
| Снимок на фиксированную границу | Один воспроизводимый состав | Хранение снимка, срок действия и признаки полноты |
| Поток изменений | Изменения после сохранённой точки | Начальное состояние, удаление и завершение интервала |
Это таблица выбора, а не утверждение о возможностях определённого API. Результат выбора включают в согласованный контракт, чтобы обе стороны одинаково понимали слово «полностью».
Возобновление с сохранённой точки
В контрольную точку входят не только курсор, но и параметры выборки, идентификатор снимка, последняя подтверждённая часть и состояние записи на стороне получателя. Если источник прислал страницу, а потребитель не успел её сохранить, продолжение с нового курсора потеряет данные.
В примере после сохранения A и B получатель фиксирует точку для следующей страницы catalog-S7. После сбоя он продолжает тот же снимок с теми же фильтрами. Повторная запись ранее сохранённой части должна иметь определённое поведение: заменить данные согласованной версии или распознать уже выполненное сохранение. Способ выбирают по модели данных.
Истёкший курсор требует отдельного решения. Нельзя незаметно перейти к свежему каталогу и объявить старую выгрузку законченной. Иногда безопаснее собрать новую версию целиком в отдельное место и заменить используемый каталог после сверки. До окончания этой процедуры частичный набор не должен восприниматься как полный.
Проверка добавления и удаления записей
Контрольный набор должен содержать изменения во время чтения. Для catalog-S7 ожидаются ровно A–D, даже если текущий каталог уже другой. Если выбран другой вариант из таблицы, ожидаемый состав формулируют по его правилам.
| Учебное действие между страницами | Вопрос к результату |
|---|---|
| Добавить E | В какой версии он должен появиться? |
| Удалить A | Останется ли A в начатом снимке? |
| Изменить название C | Может ли сортировка скрыть запись? |
| Повторно получить вторую страницу | Не появятся ли две копии одного товара? |
| Прервать сохранение страницы | Можно ли безопасно возобновить запись? |
Одного совпадения количества недостаточно: пропущенный C и повторный B могут дать прежний итог. Сверяйте идентификаторы и согласованные версии записей. Полезный итог проверки — таблица выбранного режима, ожидаемого состава, сохранённой точки и фактических расхождений. Она задаёт конкретный предмет для проектирования обмена.

