是否存在用于JPA,spring-data,spring-data-rest的通用REST查询语言

时间:2018-05-10 12:59:44

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

要求

  • 通用查询语言,可用于对REST API中的集合资源的GET请求,以过滤返回的资源集
  • 通过"标准传递的查询"查询语言并通过HTTP作为请求参数发送 - .e.g / 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

E.g。 resourceA.attribute1 =" CAT" AND resourceA.subResourceB.attribute2> = 42 AND resourceA.attribute3 IN(" WHIZ"," BANG")

我调查了四个解决方案 - 每个解决方案都越来越接近目标了。是否有其他解决方案我还没有找到或者没有开箱即用的完整解决方案 - 是使用RSQL" REST查询语言构建的答案。概述如下?

1)spring-data-rest queries

Spring数据中有很多支持在代码中开发复杂查询,但是这需要开发人员事先知道查询的结构并相应地构造代码。 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非常适合 - 完全有能力的解决方案,几乎零编码开箱即用

可以构建深层嵌套查询,服务器可以动态生成正确的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 - 不确定弹簧整合

1 个答案:

答案 0 :(得分:0)

JPA没有通用的REST查询语言。您确定的内容似乎已经存在,但是对querydsl和rsql的近期活动较少,建议您在采用它们时应格外小心。您很可能需要通过分叉项目来自己支持其他更改,尤其是从现在开始的5年之内,当确定作者已转而从事其他工作时。

其他一些有趣的链接:

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