Я пытаюсь поддерживать произвольные фильтры для REST API, который извлекает список документов из MongoDB. НапримерScala Play ReactiveMongo - произвольный список параметров запроса
- //example.com/users < - список всех
- //example.com/users?age=30 < - все пользователи, которые 30
- //example.com/ ? пользователей возраст = 30 & имя = John < - все пользователи, которые 30 и называются Джон
- ...
Я использую Play-ReactiveMongo и дело с объектами JSONCollection о олько.
Так что в моих маршрутов я поставил
GET /users controllers.Users.list(id: Option[String], name: Option[String], age: Option[Int])
Но есть две проблемы с этим, сначала я должен иметь довольно длинный список дополнительных параметров, а затем в мой контроллер нужно использовать шаблон сопоставляя их все, чтобы проверить, являются ли они пустыми или нет, а также создайте селектор, который я использую для фильтрации моей коллекции.
var filters = JsObject(Nil)
name match {
case Some(x) => filters += ("name" -> JsString(x))
case None => None
}
я понял, что я могу получить полную строку запроса из объекта запроса, который является карта [String, Seq [String]]. Но тогда я не знаю, как хорошо проверить, являются ли значения String или что-то еще.
Есть ли другой лучший и идиоматический способ сделать то, что я хочу?