【问题标题】:Is there any REST API query standard / DSL to express complex filters in GET URL?是否有任何 REST API 查询标准/DSL 来表达 GET URL 中的复杂过滤器?
【发布时间】:2015-04-21 13:30:52
【问题描述】:

我目前正在研究一种优雅的方式,用于我正在开发的 REST API,以表达 GET 请求返回集合的过滤器。我想将查询表示为“http://[...]?filter=expressions”,我将在其中评估表达式部分。我有一种感觉,灵活的方法会触发对简单查询 DSL 的需求?到目前为止,我发现的最接近一个好的正式规范是

http://www.juniper.net/techpubs/en_US/junos-space-sdk/13.1/apiref/com.juniper.junos_space.sdk.help/html/reference/Commonbehav.html#step8

我想知道,如果 ANTLR 是要查看的工具吗?但既然这应该是一种常见的必需品,我想知道,是否有一些可用的 REST API 查询标准 DSL 东西?

有点困惑的问候和感谢您的输入:)

【问题讨论】:

  • 阿法克。目前还没有标准解决方案。
  • 如果你不想用元数据向客户描述如何构建查询结构,那么你可以使用 URI 模板和 Gil 提到的类似的东西。这是简单但不那么普遍的方法。我们在这里与其他人讨论过这个问题:lists.w3.org/Archives/Public/public-hydra/2014Sep/…
  • 我今天需要的是一个 ODATA 到 QueryDSL 谓词转换器类。有趣的是,在 2013 年,我需要类似的 .net stackoverflow.com/q/15154469/413032 :D

标签: api rest filtering antlr4 querydsl


【解决方案1】:

OData 4 (http://www.odata.org/) 具有非常完整的查询语法,并支持带有导航、过滤、表达式等的 E-R 数据模型。MSFT Azure AD Graph API 基于 OData。唯一的缺点是完整的规范很深。有一些开源实现,Apache Olingo (http://olingo.apache.org/) 是支持 Java 客户端和服务器的一种。还有其他的。

【讨论】:

  • 忘了说,OData 是 OASIS 标准 (oasis-open.org),最近提交了 ISO/IEC JTC1。
【解决方案2】:

我偶然发现了QueryDSL,它为查询多种后端技术提供了流畅的构建器。

我不确定我是否喜欢将流畅的构建器直接映射到查询参数的想法,但这种方法在QueryDSL site 引用的两个blog posts 中进行了讨论。

【讨论】:

  • 你好克里斯托弗,谢谢你的回复。我们最终决定将 QueryDSL 与自定义语法结合起来,并使用 ANTLR4 生成的解析器进行评估。该模块正在进行中,一旦达到质量标准,我们将把它作为开源项目发布:)。有趣的是,我们最终也使用了 MVEL,但让它在解析结果上工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2021-02-04
  • 2018-05-08
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多