我们正在开发一种REST服务,该服务提供对类似于文件系统的资源的访问,即它们以树状层次结构排列,没有固定的深度或命名约定。访问资源看起来像
GET /repository/path/to/resource
即。 /repository
之后的路径部分是资源的唯一标识符。现在出现了问题:每个资源还具有权限等属性。查询权限的自然方式是
GET /repository/path/to/resource/permissions
但是,如果有一个名为/path/to/resource/permissions
的资源怎么办?我猜你看到了问题。我想到的唯一解决方案是将资源属性放在一个单独的层次结构中,例如
GET /permissions/path/to/resource
但这看起来并不正确。有任何想法如何处理这个问题?
答案 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