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

问题描述

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

在这个结构中,我想从所有或几个父母那里获取所有子资源。我知道使用 URI 末尾的 queryParam 过滤数据,但似乎将父 ID 指定为数组更好。

举个例子,假设我的数据库中有公司,这些公司拥有路由器,这些公司为一定数量的设备委派流量。用于获取路由器所有设备的 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 数组,可以在服务器端解码为整数/字符串数组。这也释放了查询参数字符串以专注于按属性(年龄、价格、总流量、状态)过滤设备。

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

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

解决方法

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

TL;DR:是的,没关系。

您可能会看到类似使用级别 4 URI Template 描述的标识符,您的标识符列表通过 path segment expansion 进行编码。

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

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...