【问题标题】:Is there a generic REST query language for JPA, spring-data, spring-data-rest是否有适用于 JPA、spring-data、spring-data-rest 的通用 REST 查询语言
【发布时间】:2018-10-20 18:16:36
【问题描述】:

要求

  • 通用查询语言,可用于 GET 请求以收集 REST api 中的资源以过滤返回的资源集
  • 通过“标准”查询语言传入并通过 HTTP 作为请求参数发送的查询 - 例如 /someresource?query=...... 或 /someresource?a.b.c=2
  • 在服务器上运行时构造的 SQL 查询
  • 与 jpa、spring-data、spring-data-rest 紧密集成 - 代码越少越好。
  • 可用于查询的嵌套资源和属性路径
  • 支持复杂的操作数 - EQUALS、GREATER_THAN、LESS_THAN、NEGATION、LIKE、AND、OR、NOT、IN

例如 resourceA.attribute1 = "CAT" AND resourceA.subResourceB.attribute2 >= 42 AND resourceA.attribute3 IN ("WHIZ","BANG")

我研究了四种解决方案,每一种都更接近目标。是否有其他一些我还没有找到的解决方案,或者没有开箱即用的完整解决方案 - 是建立在下面概述的“使用 RSQL 的 REST 查询语言”之上的答案吗?

1) spring-data-rest 查询

spring data 中有很多支持在代码中开发复杂查询,但这需要开发人员事先了解查询的结构并相应地构造代码。 https://docs.spring.io/spring-data/rest/docs/current/reference/html/#repository-resources.query-method-resource

2) spring-data、spring-data-rest、query-dsl

http://www.baeldung.com/rest-api-search-querydsl-web-in-spring-data-jpa

+ve 非常适合 - 功能强大的解决方案,开箱即用几乎为零编码

+ve 可以构建深度嵌套的查询,服务器即时生成正确的 SQL。

-ve 唯一的运算符是 EQUALS '=' 为了应用额外的运算符,您需要实现 QuerydslBinderCustomizer 实例,这再次要求服务器代码提前了解查询的复杂性。

https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/querydsl/binding/QuerydslBinderCustomizer.html

3) Baeldung - “构建一个休息查询语言”

http://www.baeldung.com/spring-rest-api-query-search-language-tutorial

+ve - 更接近通用查询语言

-ve - 感觉就像一个演示/POC

4) 带有 RSQL 的 REST 查询语言

http://www.baeldung.com/rest-api-search-language-rsql-fiql

+ve - 感觉像是一个更完整的查询语言和相关的解析器

-ve - 不确定 spring 集成

【问题讨论】:

    标签: spring spring-data spring-data-rest querydsl


    【解决方案1】:

    JPA 没有通用的 REST 查询语言。您所确定的似乎就是那里的东西,但是 querydsl 和 rsql 上最近的活动很少表明您在采用它们时应该小心。您很可能必须自己通过分叉项目来支持其他更改,尤其是在 5 年后,作者肯定会转向其他事情。

    其他一些有趣的链接:

    5) 使用注解动态构建查询

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2013-09-17
      • 2014-06-21
      • 2016-10-26
      • 2016-02-27
      • 2012-06-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多