【问题标题】:What's a RESTful way to query with logic operation?什么是使用逻辑操作进行查询的 RESTful 方式?
【发布时间】:2016-09-23 23:03:42
【问题描述】:

这是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”的所有工作负载

根本不知道如何做这种rest api,除了要求用户分别通过A,B,C查询然后自己进行适当的集合操作? (多么棒的用户体验……)

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

【问题讨论】:

    标签: rest restful-url api-design


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-08
      • 2015-03-06
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多