是否有适用于JPA、spring-data和spring-data-rest的通用REST查询语言?

17

需求

  • 通用查询语言,可在REST API的GET请求中用于过滤返回的资源集合
  • 通过“标准”查询语言传递查询,并作为请求参数通过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")

我调查了四种解决方案-每个方案都更接近目标。是否有其他解决方案我没有找到,或者没有这样完整的开箱即用的解决方案-答案是基于下面概述的“REST查询语言与RSQL”构建吗?

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 - "构建一个REST查询语言"

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 Integration

1个回答

1
没有适用于JPA的通用REST查询语言。你所发现的似乎是已有的,但是querydsl和rsql的最近活动很少表明在采用它们时应该谨慎。特别是5年后,当作者肯定已经转向其他事物时,您很可能必须自己支持其他更改,通过fork项目。

一些其他有趣的链接:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接