У нас есть 3 товара, из которых пользователь может заказать.
Например:
- музыка Itunes
- Книги Itunes
- AppleStore Apps
Дано:
3 микросервиса, которые дают 3 отдельных постраничных ответа для истории заказов на основе метки времени.
Требуется:
Чтобы отобразить историю заказов из всех 3 источников в порядке убывания метки времени и разбить их на страницы как пользовательские прокрутки. то есть сортировать и объединять ответы из 3 источников на основе отметки времени и отображения.
Возможно, пользователь приобрел:
- Из всех 3 услуг
- Из любых 2
- Из любого 1
- нет
Кроме того, сроки покупки также могут быть искажены.
например:
Пользователь приобрел 10 песен только на музыку Itunes.
Подходы, которые я могу придумать:
1. Тяжелый груз только на клиенте:
Будет вызывать все 3 API параллельно, дождаться ответа всех API.
Храните их локально.
Слияние и сортировка на основе отметки времени.
Обрезать верхние n элементов и отобразить на устройстве.
Как и когда пользователь выполняет прокрутку, он проверяет наличие локальных данных и, соответственно, вызывает API.
2. Только на стороне сервера:
Есть прокси, который будет общаться со всеми службами.
По получении запроса от клиента fetchData (noOfItems, fetchedUntilTimestamp)
,
прокси должен получать данные из разных источников, вызывая getData(noOfItems, fetchFromTimeStamp)
для каждого из них.
Каждый источник данных должен извлекать noOfItems, начиная с отметки времени fetchFromTimeStamp и ниже, и возвращает список данных.
Прокси должен:
- SORTED_LIST = сортировать список данных из нескольких источников на основе
Отметка времени
- RESULT_LIST = Первые noOfItems из SORTED_LIST
- fetchedUntilTimestamp = Отметка времени последнего элемента RESULT_LIST
Прокси должен возвращаться клиенту: RESULT_LIST + fetchedUntilTimeStamp
Клиент, начиная со следующего запроса, должен позвонить fetchData (noOfItems, fetchedUntilTimestamp)
с fetchedUntilTimeStamp
, полученным с сервера от предыдущего вызова
Какие из этих двух предпочтительнее? Есть ли лучший подход к решению этой проблемы?