Дублирование содержимого страницы REST

При создании REST-приложения, которое будет возвращать набор элементов (тема с набором сообщений) с сортировкой от новых к старым.

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

Нет проблем с получением данных со следующей страницы, но если кто-то добавил контент, пока клиент читает текущую страницу, данные будут отправлены в начале сбора, а последний элемент текущей страницы будет перемещен на следующую страницу.

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

Каковы лучшие практики для этого?


person Anton Komarev    schedule 02.03.2015    source источник
comment
Лучшее решение, которое я нашел до сих пор: Пример разбиения на страницы на основе курсора   -  person Anton Komarev    schedule 02.03.2015
comment
Я думаю, что упомянутая вами статья является очень хорошим примером работы с динамическими данными в упорядоченных коллекциях. Я предпочитаю использовать параметры «с/до», как описано. Насколько я помню, я думаю, что Facebook делает это и для своей ленты.   -  person Cleric    schedule 20.03.2015


Ответы (1)


Не использовать индексы смещений, а вместо этого пропускать токены, указывающие, что первое значение не следует включать (или первое значение, которое следует включать), является хорошим методом при условии, что значение может быть уникальным для каждого элемента в вашем наборе результатов и является упорядоченным полем на основе текущего Сортировать. Но это не безупречно. Обычно это просто не имеет значения.

Если это действительно имеет значение, вы должны указать идентификаторы всего, что находится на первой странице, в вызове второй страницы, и снова и снова. HATEOAS помогает вам делать такие вещи... но это может стать очень запутанным, и все равно что-то может появиться на странице 1, учитывая текущую сортировку, когда вы делаете запрос на страницу 5... что вы делаете с этим?

Еще одна уловка, позволяющая избежать дублирования в пользовательском интерфейсе, заключается в использовании самостоятельных или канонических отношений ссылок для уникальной идентификации ресурсов на странице и сравнения их с существующими ресурсами в пользовательском интерфейсе. Обновление пользовательского интерфейса последними соответствующими ресурсами обычно является простой задачей. Это, конечно, накладывает некоторую нагрузку на клиента.

Не существует универсального решения этой проблемы. Вы должны разработать дизайн для UX, который вы собираетесь реализовать.

person Chris DaMour    schedule 20.03.2015