Я пишу API для веб-приложения. Я хотел бы разбить результаты на страницы, если строка в таблице превышает какое-либо значение. Однако я также хотел бы разрешить клиентам фильтровать и сортировать результаты.
Я знаю, как правильно разбивать данные на страницы, используя нумерацию клавиш. Однако, как мне кажется, разбиение на страницы набора ключей нарушается после сортировки результатов, поскольку теперь индексы не в порядке. Я не хочу использовать нумерацию смещения пределов.
Я прочитал, что способ добиться того, чего я хочу, это использовать курсоры базы данных. Однако мне нужно, чтобы сессия была липкой для этого.
Я также думал о сохранении результата во временной таблице и присвоении ей уникального имени, если пользователь вместо этого отправляет данные запроса с тем же именем обратно из этой таблицы. Проблема с этим заключается в том, что мне пришлось бы использовать некоторое время ожидания для удаления таблицы, что может привести к 404 секундам, если клиент запрашивает следующую страницу после времени ожидания (может быть плохо для UX клиента).
Итак, вопрос в следующем:
Есть ли общепринятый способ добиться этого, который также не имеет гражданства? Если не существует способа без сохранения состояния, каков наиболее масштабируемый способ достижения этого? и желательно, чтобы это тоже не было так грязно.
Если это поможет, я использую Swift, Vapor 3 (без Fluent ORM) и PostgreSQL.
И, наконец, я что-то упускаю из виду?