2016-09-23 38 views
4

这是一个分拆问题query with filters什么是使用逻辑操作查询的REST式方法?

假定我的应用程序正在管理名为工作负载的对象,并带有以下字段。我想公开一个REST接口供用户通过标签查询工作负载。

"Workload": {"id":"test1", "labels":["A", "B", "C"]} 
"Workload": {"id":"test2", "labels":["A", "C", "D"]} 
"Workload": {"id":"test3", "labels":["A", "B", "D"]} 

问题:如何设计REST端点,以便它支持基本的逻辑运算的查询工作?

示例查询2:我想所有标签“A”的工作负荷或“B”,但没有“C”

不知道如何做这样的REST API的所有,除请求用户分别用A,B,C查询,然后自己进行适当的设置操作? (多好的用户体验......)

A similar question here用布尔逻辑触及查询不同的过滤器,但它似乎不适用于重复过滤器。 (在这种情况下,标签,这似乎很奇怪做GET /workloads/labels:A/labels:B

回答

0

根据确切的要求,我可能会开始与“谷歌”的方法。只需提供一个查询表单,然后创建一些可能只是文本的原始查询语言(如果json足够简单,则不需要使用它)。

所以在搜索页面会是这个样子:

{ "searchForm": { 
    "target": "/workloads", 
    "method": "GET", 
    "components": [{ "name": "q" }] 
    } 
} 

media-type搜索页面将定义如何使用的形式,可能是它应该作出这样的请求:

GET /workloads?q=+A+B-C 

对于查询语言,我会尽量减少。也许只是“+”和“ - ”符号,就像谷歌一样。即使在需要更复杂的查询时,我仍然可以使用文本查询语言,只是为了便于手动读取/测试。

或者,如果您不想成为 RESTful,您可以将query-uri硬编码到应用程序中,这样您就不必创建其媒体类型的搜索页面。