Я хочу реализовать фильтрацию данных на моем сервере Dropwizard.Допустим, мы хотим искать памятники.Пользователь может использовать фильтры, такие как имя, город, категория для фильтрации из списка памятников.
URI будет выглядеть примерно так: /monuments?name="Eiffel"&city"Paris"&category="Engineering Marvel"
Мне не ясно, как реализовать API для этого, потому что некоторые пользователи могут остановиться после простого указания фильтра имен, в то время как другие могут использовать все3.
В таком случае, как мне реализовать код Java и запросы в моем DAO, чтобы изменить запрос на основе того, какие фильтры были переданы?
Что я подумал и попробовал:
1 (наихудший случай) - иметь список всех возможных комбинаций запросов для этих фильтров и использовать один в зависимости от того, какая комбинация аргументов была передана.
2 - Я думал, что JDBI автоматически удалит пустые параметры при вызове метода DAO, но это не так, по крайней мере с предложением ilike
(поскольку все вышеперечисленные параметры являются строками).
3 - Использовать Case в Postgres.Но это не масштабируется, так как у меня могут появиться другие параметры для поиска с течением времени по мере увеличения случаев использования.
4 - Использовать структуры данных Java вместе с DAO для внутренней фильтрации результатов, например сначала получить все памятники на основе (скажем, имени), а затем передать идентификаторы в SQL-запрос с предложением city, а затем с помощьюпункт категории.Но это займет много времени для обработки по мере увеличения данных.
Это кажется довольно распространенным сценарием, но я не могу найти хороших ответов на этот вопрос. Большинство говорят о URI и дизайне RESTful вместо реализации.детали.
Любое руководство будет полезно.
Спасибо