REST URI - 使用 ID 数组获取资源批次

REST URI - GET Resource batch using array of ID's

标题可能措辞不当,但我正在尝试使用 symfony 创建 REST api。我研究了一些 public api 来感受它,一个共同的原则似乎是一次处理一个资源路径。但是,我正在处理的数据有很多级别(7-8),并且每个级别只保证在其 parent 下是唯一的(整个路径构成一个复合键)。

在这个结构中,我想从所有或几个 parent 中获取所有 children 资源。我知道在 URI 末尾使用 queryParam 过滤数据,但似乎将 parent id(s) 指定为数组更好。

举个例子,假设我的数据库中有公司,它们拥有路由器,这些路由器为一些设备分配流量。获取路由器所有设备的 REST URI 可能如下所示:

/devices/company/:c_id/routers/:r_id/getdevices

但随后用户必须爬行所有 :r_id 才能获取公司的所有设备。我看到的一些建议都涉及将 :r_id 移出路径并在查询字符串中使用它:

/devices/company/:c_id/getdevices?router_id[]=1&router_id[]=2

我明白了,但我当时不想使用它。

相反,在功能上看起来更好,但在哲学上有问题的是这样做:

/devices/company/:c_id/routers/:[r_ids]/getdevices

其中 [r_ids] 是一个字符串化的 id 数组,可以解码为 integers/strings server-side 的数组。这也释放了 query-parameter 字符串以专注于按属性(年龄、价格、总流量、状态)过滤设备。

但是,我对这一切都不熟悉,很难找到什么是“标准”。这是一个合理的解决方案吗?

我要补充一点,我已经在 Symfony 中测试了数组字符串,效果很好。但我不知道它是否会成为恶意查询的工具,因为我打算使用 Doctrine 的 DBAL - 我也会在这方面采取技巧(尽管无论字符串 id 是什么,这似乎都是一个问题)

However, I am new to all of this and having trouble finding what is "standard". Is this a reasonable solution?

TL;DR: 是的,很好。

您可能会看到使用 4 级 URI Template, with your list of identifiers encoded via a path segment expansion 描述的标识符。

您的示例模板可能类似于:

/devices/company{/c_id}/routers{/r_ids}/devices

并且您需要与模板使用者沟通,c_id 是公司 ID,r_ids 是路由器标识符列表,或其他任何内容。

您已经在 Web 上看到了这个的简化版本:URI 模板是 Web 表单的概括,它从输入控件读取信息并将输入编码到查询字符串中。