假设有多个授权的用户拥有多个权限。
检索指定用户的所有授权(没有权限)可以是:
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的最佳方法是什么?
答案 0 :(得分:2)
有些情况下,必须返回授权以及该用户的相应权限。
GET users/{id}/authorizations/permissions
像这样嵌套集合资源不是一个好主意。这是否意味着"授予我用户id
"的所有授权的所有权限?目前还不清楚。 不要这样做。
GET users/{id}/authorizations?permissions=true
查询通常用于查询,搜索或过滤集合资源。此网址将返回id
为permissions
的用户true
的所有授权。但那个男人呢?目前还不清楚。 不要这样做。
GET users/{id}/authorizationswithpermissions
授权是授权。他们的表示不应该依赖于URI。 不要这样做。
您的问题的解决方案是使用内容协商。您只能使用一个网址:
GET users/{id}/authorizations
这意味着:向我提供用户id
的所有授权列表。
现在,如果您想要获取此列表而不具有权限,则可以使用HTTP标头
Accepts: application/vnd.mycompany.authorizations+xml
让我们消化它。
application
:普通MIME类型application/xml
vnd
:定义自己类型的前缀mycompany.authorizations
:您的类型xml
:application/xml
现在,如果您希望使用权限获取此列表,则可以使用HTTP标头
Accepts: application/vnd.mycompany.authorizations.permissions+xml
请注意,我现在使用vnd.mycompany.authorizations.permissions
。服务器应返回授权包括权限。只有表示不同,而不是资源。
答案 1 :(得分:0)
个人我最后两个建议都找不到任何问题:
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实体应该记录在您选择的任何表示法中。