为嵌套资源设计REST URI的最佳方法是什么

时间:2014-04-16 09:02:13

标签: rest nested uri

假设有多个授权的用户拥有多个权限。

检索指定用户的所有授权(没有权限)可以是:

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的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您的想法

  

有些情况下,必须返回授权以及该用户的相应权限。

GET users/{id}/authorizations/permissions

像这样嵌套集合资源不是一个好主意。这是否意味着"授予我用户id"的所有授权的所有权限?目前还不清楚。 不要这样做

GET users/{id}/authorizations?permissions=true

查询通常用于查询,搜索或过滤集合资源。此网址将返回idpermissions的用户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:您的类型
  • xmlapplication/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实体应该记录在您选择的任何表示法中。