【问题标题】:Spring MVC REST API to Filter/Search from CollectionSpring MVC REST API 从集合中过滤/搜索
【发布时间】:2016-10-12 06:06:55
【问题描述】:

我有一个 REST 服务 /accounts,它返回所有帐户数据(编号、名称)。

要求: 应该使用“And”或“OR”的任意组合来支持以下搜索/过滤模式,而不是重新搜索整个集合。

  • 开始于
  • 结束
  • 包含

问题 1:这些 API 设计是否正确(RESTful)或任何更好的方法来做同样的事情 例如 -

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

(^"==> 开头,"~"==> 结尾)

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

(^"==> 开始于 "~"==> 结束)

/accounts?name$ACC123   

($ ==>账号集合包含ACC123)

弹簧控制器:

计划将这些过滤器(查询参数)模式获取为@RequestParam,并使用正则表达式来解析模式,然后应用并从数据存储中检索它。缺点是任何新的过滤器模式都需要在 Controller 类中进行更改。

问题 2: Spring 3 中是否有任何开箱即用的功能可用于从集合中进行搜索/过滤?

谢谢!

【问题讨论】:

标签: spring rest spring-mvc restful-url


【解决方案1】:

从设计的角度来看,使用查询参数来指定搜索/过滤参数是可以的。但是,对于像您这样更复杂的情况,我通常会定义一个新的端点,它只处理搜索。

例如,如果我的搜索逻辑是严格的“或”和“包含”,我会这样定义图书搜索:

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

在这里,我的 API 将严格搜索作者姓名中包含“john”且内容中出现“如何使用 spring”字样的书籍。 Search 逻辑保持一致,客户端没有灵活性。

在您的情况下,如果客户能够指定自己的搜索条件,您需要构建一个新的端点,例如:

POST /books/search

在请求正文中,发布您自己的搜索条件 DSL,例如 name^My Account 123**and**number~ACC1234

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2017-09-04
    • 2015-11-30
    • 2020-01-03
    • 2019-07-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多