对 REST 中嵌套资源的权限 API
Permissions to a nested resource in REST API
背景
考虑拥有 3 个资源:reports
、comments
和 attachments
。 report
可以有多个comments
,comment
可以有多个attachments
.
此外,附加到特定 report
的 attachments
(在报告 -> 评论 -> 附件树中)只能由有权访问特定 [=14] 的用户访问=].
问题
现在,我在设计 REST API 时喜欢扁平 URL 结构,但在上述情况下,我不知道如何在不创建非常长的资源的情况下做到这一点,例如:
/reports/:id/comments/:id/attachments/:id
有什么方法可以满足这些要求(权限)并能够从像 /attachments/:id
这样的 URL 公寓到达 attachment
?
或者我可能在夸大其词,拥有这种长资源完全没问题 URLs?
免责声明:我创建了一个 attachments
资源(而不是 report-attachments
),因为还有其他资源也需要 attachments
- 我没有'要复制结构。
it's totally ok to have these kinds of long resource URLs?
拥有任何类型的资源URL都是完全可以的。 REST 不关心您如何拼写资源标识符——这就是重点。所以如果你需要一个日志URL因为服务器需要把很多信息编码进去,那很好。
如果您担心长度,可以去掉语义提示
/reports/:id/comments/:id/attachments/:id
/reports/:id/c/:id/a/:id
/reports/:id/:id/:id
/:id/:id/:id
其中一些拼写对于您在服务器上使用的路由框架来说会更容易,但这是您控制的实现细节。
没有规定必须将信息直接编码到标识符中; URL 缩短器 有效 .
在HTML中,我们还可以通过表单从客户提供的信息中构造(某些)标识符。这是因为 HTML 媒体类型的定义包含处理规则,这些规则描述了如何将表单数据组装成包含在查询部分中的 application/x-www-form-urlencoded
表示形式。
所以你可以在你自己的媒体类型中引入类似的机制。
还有 RFC 6570,它描述了 URI 模板。这为您提供了另一种与客户沟通的方式,即如何将信息编码为 URL.
Is there any way to meet these requirements (permissions) and be able to reach the attachment from a flat URL like /attachments/:id?
当然可以。您只需要能够使用 :id
查找/计算正确的权限集,然后检查请求以查看是否满足权限。
背景
考虑拥有 3 个资源:reports
、comments
和 attachments
。 report
可以有多个comments
,comment
可以有多个attachments
.
此外,附加到特定 report
的 attachments
(在报告 -> 评论 -> 附件树中)只能由有权访问特定 [=14] 的用户访问=].
问题
现在,我在设计 REST API 时喜欢扁平 URL 结构,但在上述情况下,我不知道如何在不创建非常长的资源的情况下做到这一点,例如:
/reports/:id/comments/:id/attachments/:id
有什么方法可以满足这些要求(权限)并能够从像 /attachments/:id
这样的 URL 公寓到达 attachment
?
或者我可能在夸大其词,拥有这种长资源完全没问题 URLs?
免责声明:我创建了一个 attachments
资源(而不是 report-attachments
),因为还有其他资源也需要 attachments
- 我没有'要复制结构。
it's totally ok to have these kinds of long resource URLs?
拥有任何类型的资源URL都是完全可以的。 REST 不关心您如何拼写资源标识符——这就是重点。所以如果你需要一个日志URL因为服务器需要把很多信息编码进去,那很好。
如果您担心长度,可以去掉语义提示
/reports/:id/comments/:id/attachments/:id
/reports/:id/c/:id/a/:id
/reports/:id/:id/:id
/:id/:id/:id
其中一些拼写对于您在服务器上使用的路由框架来说会更容易,但这是您控制的实现细节。
没有规定必须将信息直接编码到标识符中; URL 缩短器 有效 .
在HTML中,我们还可以通过表单从客户提供的信息中构造(某些)标识符。这是因为 HTML 媒体类型的定义包含处理规则,这些规则描述了如何将表单数据组装成包含在查询部分中的 application/x-www-form-urlencoded
表示形式。
所以你可以在你自己的媒体类型中引入类似的机制。
还有 RFC 6570,它描述了 URI 模板。这为您提供了另一种与客户沟通的方式,即如何将信息编码为 URL.
Is there any way to meet these requirements (permissions) and be able to reach the attachment from a flat URL like /attachments/:id?
当然可以。您只需要能够使用 :id
查找/计算正确的权限集,然后检查请求以查看是否满足权限。