我目前正在设计服务。 它是一种多层服务,使用REST接口存储来自多个客户端的数据。
我不清楚如何在URI中接受资源ID。
让我们说用户001
创建一个资源,第一个为他,但是系统的第100个。
当用户001向/resource/1
(/resource/{id}
)进行GET时,我应该返回什么。我应该显示他的记录,从而使URI相对于执行请求的用户?或者我应该为系统返回1st(拒绝它,因为它缺少查看它的权限)?
我不想深入了解授权内容,但我想知道如何应对这种情况。如果我更喜欢后者,那么如何让用户说'好吧,给我第一个我创建的资源"或者"给我第二个......","给我最后一个......","给我我创建的第100个资源"?
答案 0 :(得分:0)
我不认为自己是REST的专家,但这是我可能会做的。
在您的域模型中,如果资源在没有用户的情况下不能存在,那么完全可以建模URL调用,例如
GET /user/{userId}/resource //Gets all resources of a user
另一方面,如果没有用户可以存在资源,那么stackoverflow上的这个链接提供了一种很好的方法来建模这样的调用。
RESTful Many-to-Many possible?
我们为其中一个项目做的另一件事是,我们有链接表(UserResource表(id,userId,resourceId),我们有一个唯一的ID,有类似的东西
GET /userResource/{userResourceId}
GET /userResource //Retrieve all the resources user has access to
如果您担心安全问题,StackOverflow上有关于如何将安全性与Rest调用集成的链接。理想情况下,应在服务器端处理此类逻辑。您通常不希望将该逻辑放入REST URL中。
例如,如果您接到
的电话GET /resource //Get all resources
根据用户的身份,您只返回他有权访问的资源子集。
底线:不要围绕权限构建资源。
同样,我不是专家。只是我的拙见。 : - )