我想弄清楚"对"具有多租户支持和共享资源的应用程序的url结构的实现。
资源:用户,项目
网址架构是
host/api/tenant_id/resource[/id][/subresource][/id]
用户A(宽度id = 1)获取他的项目集合
GET http://example.com/api/1/projects/
用户A创建一个可由
读取的新项目GET http://example.com/api/1/projects/2
现在,用户A为项目2提供了另一个用户B(id = 2)访问权限。 用户B希望通过以下方式查看与其帐户相关的所有项目的集合:
GET http://example.com/api/2/projects/
共享项目(id = 2)是否应该在此集合中,除了那些,用户B自己创建?或者是否有更好的共享资源命名结构?
答案 0 :(得分:4)
专注于URL结构的设计实际上是RESTful架构的禁忌。罗伊菲尔丁:
REST API不能定义固定资源名称或层次结构(客户端和服务器的明显耦合)。
另见this answer。
对于您的具体问题,我会返回一个(基本上是任意的)超文本链接列表,该链接指向用户有权访问的项目。链接将包含明确的属性,用户是否“拥有”或“可访问”项目。为了提高可读性,您可以将资源URL设计为
http://example.com/user/{user id}
http://example.com/project/{project id}
GET http://example.com/user/2之后的用户表示将包含
等链接列表<a href="http://example.com/project/1" class="owned"/>
<a href="http://example.com/project/2" class="access-permitted"/>
HATEOAS原则是REST固有的,并且最常见的是»我如何设计我的URI«问题已过时:
原则是客户端完全通过应用服务器动态提供的超媒体与网络应用程序进行交互。除了对超媒体的一般理解之外,REST客户端不需要有关如何与任何特定应用程序或服务器交互的先验知识。
答案 1 :(得分:0)
也许一个优点是可以在路径中使用租户信息。以这种方式,我们可以容易地获得例如对象列表。 在get / tenant-id / projects上查询uri 我们可以列出每个入境租户的项目清单。 如何在没有租户信息的情况下进入网址?
我的2美分