#api #rest #pagination #api-design #api-platform.com
Вопрос:
Я хочу выполнить простой текстовый поисковый запрос по нескольким агрегированным сущностям. Например, конечный пользователь будет искать «пляж» и получать соответствующие рейсы, отели и экскурсии, возвращенные в одном результирующем наборе, упорядоченном по метрике популярности, которая есть у всех типов.
У каждой сущности есть своя конечная точка REST API, и я могу фильтровать их метаданные, чтобы получать результаты с разбивкой по страницам из API.
Я могу реализовать простой порядок популярности для каждой сущности на конце API. Это разваливается, когда вводится разбиение на страницы, если у меня нет конечной точки «все» с пользовательским контроллером в API, который может упорядочивать (не кажется спокойным и кажется беспорядочным) или запрашивать все результаты для каждой сущности и заказывать их на стороне сервера (медленно, не разбиение на страницы подходит для этого требования поиска).
Мой текущий компромисс заключается в том, чтобы запросить 2 типа каждого типа из API, разбитого на страницы для запрошенного номера страницы, и сортировать только результаты на стороне сервера. Таким образом, страница 3 попытается выбрать 2 рейса, 2 отеля, 2 экскурсии, а затем заказать то, что было возвращено популярностью. Это означает, что на некоторых страницах меньше 6 результатов, когда любые запросы возвращают меньше максимального значения (включая пустые вызовы результатов), и очень популярные результаты будут скрыты ниже на страницах только потому, что есть много популярных типов.
Я чувствую, что все сделал неправильно, но я не знаю, как подойти к этой проблеме.