为嵌套资源设计RESTURI的最佳方法是什么
假设有多个用户具有多个权限和多个授权 检索指定用户(无权限)的所有授权可以是:为嵌套资源设计RESTURI的最佳方法是什么,rest,nested,uri,Rest,Nested,Uri,假设有多个用户具有多个权限和多个授权 检索指定用户(无权限)的所有授权可以是: GET users/{id}/authorizations “正常”情况是,出于性能原因,不将权限嵌入到授权中 在某些情况下,必须返回授权及其对该用户的相应权限 建议的解决办法是: GET users/{id}/authorizations/permissions // does not seem clear GET users/{id}/authorizations?permissions=true
GET users/{id}/authorizations
“正常”情况是,出于性能原因,不将权限嵌入到授权中
在某些情况下,必须返回授权及其对该用户的相应权限
建议的解决办法是:
GET users/{id}/authorizations/permissions // does not seem clear
GET users/{id}/authorizations?permissions=true // with query string
GET users/{id}/authorizationswithpermissions // new resource
现在,在这种情况下,设计REST URI的最佳方法是什么?我个人认为最后两个建议都没有问题:
GET users/{id}/authorizations?permissions=true // with query string
GET users/{id}/authorizationswithpermissions // new resource
除非我将其更改为以下更相关的内容:
GET users/{id}/authorizations?withPermissions=true // with query string
GET users/{id}/authorizationsANDpermissions // new resource
第一个看起来很混乱,但是您的RESTful实体应该被记录在您选择的任何符号中 你的想法
在某些情况下,必须返回授权及其对该用户的相应权限
像这样嵌套集合资源不是一个好主意。这是否意味着“为我提供用户id
的所有授权的所有权限”?这还不清楚不要这样做
GET users/{id}/authorizations?permissions=true
GET users/{id}/authorizationswithpermissions
查询通常用于查询、搜索或筛选集合资源。此URL将返回用户id
的所有授权,其中权限为true
。但那个人是干什么的?这还不清楚不要这样做
GET users/{id}/authorizations?permissions=true
GET users/{id}/authorizationswithpermissions
授权就是授权。它们的表示不应依赖于URI不要这样做。
内容协商
解决问题的方法是使用内容协商。您只使用一个URL:
这意味着:给我一个用户id
的所有授权列表
现在,如果您想在没有权限的情况下获取此列表,可以使用HTTP头
Accepts: application/vnd.mycompany.authorizations+xml
Accepts: application/vnd.mycompany.authorizations.permissions+xml
让我们消化一下
application
:普通MIME类型的第一部分application/xml
vnd
:定义自己类型的前缀
mycompany.authorizations
:您的类型
xml
:应用程序/xml的第二部分
现在,如果您想获得具有权限的列表,可以使用HTTP头
Accepts: application/vnd.mycompany.authorizations+xml
Accepts: application/vnd.mycompany.authorizations.permissions+xml
请注意,我现在使用vnd.mycompany.authorizations.permissions
。服务器应返回包括权限在内的授权。只有表示不同,资源不同。查询参数通常用于筛选或搜索集合。因此,不建议使用authorizations?permissions=true
。绝对同意,但在某些情况下,过滤可被视为扩展结果。Personnaly我将在99%的情况下避免这种方法:)“在某些情况下,过滤可以被视为扩展结果。”我无法想象任何这样的情况。感谢您建议使用资源的替代表示形式。它符合我的需要,并保持着休息的精神。有太多的表现可能是一种过度的杀伤力。我会使用内容协商,但我建议使用媒体类型参数来声明请求的粒度,而不是发明新的表示。e、 g.接受:application/json;级别=1或应用程序/json;级别=权限等。