假设我的应用程序正在管理名为工作负载的对象,并带有以下字段。我想公开一个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
)
答案 0 :(得分:0)
根据具体要求,我可能会从“google”方法开始。只需提出一个查询表单,并创建一些原始查询语言,这可能只是文本(如果它足够简单就没有必要使用json)。
所以搜索页面看起来像这样:
{ "searchForm": {
"target": "/workloads",
"method": "GET",
"components": [{ "name": "q" }]
}
}
搜索页面的media-type
将定义如何使用表单,可能是它应该发出如下请求:
GET /workloads?q=+A+B-C
对于查询语言,我会选择绝对最小值。也许只是“+”和“ - ”标志,就像谷歌一样。即使需要更复杂的查询,我也可能会使用文本查询语言,只是为了便于手动阅读/测试。
或者,如果您不想那个 RESTful,您可以将查询uri硬编码到应用程序中,这样您就不必创建搜索页面的媒体类型