【发布时间】:2016-09-23 21:54:39
【问题描述】:
假设我的应用程序正在管理称为工作负载的对象,其中包含以下字段。我想公开一个 REST 接口供用户按标签查询工作负载。
"Workload": {"id":"test1", "labels":["A", "B", "C"]}
"Workload": {"id":"test2", "labels":["A", "C", "D"]}
"Workload": {"id":"test3", "labels":["A", "B", "D"]}
问题:如何设计 REST 端点,以便通过 多个 标签作为过滤器支持查询工作负载?
示例查询 1:我想 GET 带有“A”和“B”的所有工作负载。
我想GET 作为动词,workloads 作为端点,然后使用{"labels": ["A", "B"]} 作为请求正文。但这似乎不像 RESTful 做事的方式
或者,我可以使用GET /labels/{label-id}/workloads,但这每次只能使用一个标签。
示例查询 2:我想 GET 标签为“A”或“B”但没有“C”的所有工作负载
根本不知道如何做这种rest api,除了要求用户分别按A,B,C查询然后自己进行适当的集合操作?
【问题讨论】:
-
我不认为查询参数有什么问题。你有什么理由想避开它们吗?
-
我怀疑我是否想要/可以重复查询参数。当我在
golang中编写我的应用程序时,我正在使用third party libraryhttprouter来帮助我自动解析参数,该参数目前仅支持单个查询参数......诸如workload/:workload_id/labels/:label_id
标签: rest api-design