这是 query with filters 的一个衍生问题
假设我的应用程序正在管理称为工作负载的对象,其中包含以下字段。我想公开一个 REST 接口(interface)供用户按标签查询工作负载。
"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涉及在不同过滤器上使用 bool 逻辑进行查询,但它似乎不适用于重复过滤器。 (在这种情况下,标签。这样做似乎很奇怪
GET /workloads/labels:A/labels:B
)
最佳答案
根据确切的要求,我可能会从“谷歌”方法开始。只需呈现一个查询表单,并创建一些可能只是文本的原始查询语言(如果足够简单,则不必使用 json)。
所以搜索页面看起来像这样:
{ "searchForm": {
"target": "/workloads",
"method": "GET",
"components": [{ "name": "q" }]
}
}
media-type
对于搜索页面将定义如何使用表单,可能它应该发出如下请求:GET /workloads?q=+A+B-C
对于查询语言,我会选择绝对最小值。也许只是“+”和“-”符号,就像谷歌一样。即使需要更复杂的查询,我也可能会使用文本查询语言,只是为了便于手动阅读/测试。
或者,如果您不想成为那种 RESTful,您可以将 query-uri 硬编码到应用程序中,这样您就不必创建搜索页面的媒体类型。
关于rest - 什么是使用逻辑操作进行查询的 RESTful 方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39670733/