Spring MVC REST API для фильтрации/поиска из коллекции

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

Требование: Должен поддерживать приведенный ниже шаблон поиска/фильтрации с любой комбинацией "И" или "ИЛИ", а не повторно запускать всю коллекцию.

  • начинается с
  • заканчивается с
  • Содержит

Вопрос 1. Являются ли приведенные ниже API правильными (RESTful) или есть лучший способ сделать то же самое, например:

/accounts?name^My Account 123**or**number~ACC1234 

(^"==> Начинается с , "~"==> заканчивается на)

/accounts?name^My Account 123**and**number~ACC1234 

(^"==> Начинается с "~"==> заканчивается на)

/accounts?name$ACC123   

(коллекция учетных записей $ ==> содержит ACC123)

Контроллер Spring:

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

Вопрос 2. Существуют ли какие-либо стандартные функции, доступные в Spring 3 для поиска/фильтрации в коллекции?

Спасибо!


person Sum    schedule 12.10.2016    source источник
comment
почему бы не использовать apache solr, который доступен в виде модуля весной, в качестве весеннего solr данных для справки docs.spring.io/spring-data/solr/docs/2.0.4.RELEASE/reference/   -  person Manoj Ramanan    schedule 12.10.2016
comment
Есть ли причина, по которой вы не используете параметры запроса?   -  person Eric Stein    schedule 12.10.2016


Ответы (1)


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

Например, если моя логика поиска строго «или» и «содержит», я бы определил поиск книг как таковой:

GET /books/?author=john&keywords=how%20to%20use%20spring

Здесь мой API будет строго искать книги, в которых имя автора содержит «джон», а в содержании встречаются слова «как использовать пружину». Логика поиска остается неизменной, и у клиента нет гибкости.

В вашем случае, если у клиента есть возможность указать свои собственные критерии поиска, вам необходимо создать новую конечную точку, например:

POST /books/search

И в теле запроса опубликуйте свой собственный критерий поиска DSL, например name^My Account 123**and**number~ACC1234

person Akshay    schedule 12.10.2016