rest - 什么是使用逻辑操作进行查询的 RESTful 方式?

标签 rest restful-url api-design

这是 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/

相关文章:

osgi - API 包的语义版本控制

python - 为什么 Python 函数调用中的参数太多/太少时会出现 TypeError

javascript - AngularJS 的 REST 服务缓存策略

友谊系统的 RESTful URL 设计

php - PHP 中的 Rest 调用

java - Spring REST 重用嵌套请求映射

.net - WCF和可选参数

jquery - 通过json进行REST api认证

java.lang.ClassNotFoundException : org. glassfish.jersey.servlet.ServletContainer 异常

html - 站点地图/子菜单中的深度嵌套 html 链接(SEO,语义 Restful)