类似于文件系统的资源的REST URI

时间:2015-04-16 20:10:23

标签: rest

我们正在开发一种REST服务,该服务提供对类似于文件系统的资源的访问,即它们以树状层次结构排列,没有固定的深度或命名约定。访问资源看起来像

GET /repository/path/to/resource

即。 /repository之后的路径部分是资源的唯一标识符。现在出现了问题:每个资源还具有权限等属性。查询权限的自然方式是

GET /repository/path/to/resource/permissions

但是,如果有一个名为/path/to/resource/permissions的资源怎么办?我猜你看到了问题。我想到的唯一解决方案是将资源属性放在一个单独的层次结构中,例如

GET /permissions/path/to/resource

但这看起来并不正确。有任何想法如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

问题是你依靠URI语义来确定某些东西。在REST中不应该是一个问题,因为您的客户应该将负责该权限的资源的位置作为其他地方的链接。当您关注链接时,资源所在的位置并不重要。它甚至可能在另一个系统中或使用其他协议。

选项GET /permissions/path/to/resource没有任何问题,只要GET /repository/path/to/resource的表示说明了权限所在的位置。

如果您不使用HATEOAS并且不想使用它,那么使用查询参数可能是最简单的选项。

答案 1 :(得分:1)

您可以使用查询参数:

GET /repository/path/to/resource?properties=permissions

如果还有其他属性,您可以像这样查询它们:

GET /repository/path/to/resource?properties=permissions,size