什么是用逻辑运算查询的RESTful方式?

时间:2016-09-23 23:03:42

标签: rest restful-url api-design

这是query with filters

的衍生问题

假设我的应用程序正在管理名为工作负载的对象,并带有以下字段。我想公开一个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"

除了要求用户分别通过A,B,C查询然后自己进行适当的设置操作之外,根本不知道怎么做这种休息api? (多么棒的用户体验......)

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

似乎很奇怪

1 个答案:

答案 0 :(得分:0)

根据具体要求,我可能会从“google”方法开始。只需提出一个查询表单,并创建一些原始查询语言,这可能只是文本(如果它足够简单就没有必要使用json)。

所以搜索页面看起来像这样:

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

搜索页面的media-type将定义如何使用表单,可能是它应该发出如下请求:

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

对于查询语言,我会选择绝对最小值。也许只是“+”和“ - ”标志,就像谷歌一样。即使需要更复杂的查询,我也可能会使用文本查询语言,只是为了便于手动阅读/测试。

或者,如果您不想那个 RESTful,您可以将查询uri硬编码到应用程序中,这样您就不必创建搜索页面的媒体类型