And*_*ist 22 api rest web-services access-rights restful-architecture
我想根据访问权限为不同的用户提供相同问题的不同答案.我读了这个问题:
但我不接受的答案,其中指出,应同时提供一致/people.xml和/unauthenticated/people.xml,因为我的REST的理解是,特定资源应该生活在一个特定的位置,而不是几个要看你如何其信息多有兴趣在.
我正在设计的系统比那个系统复杂得多.假设用户创建了许多朋友圈,并为他们分配了不同的访问权限.例如,我的"熟人"圈可能可以访问我的生日,而我的"专业"圈子可能可以访问我的工作经历,但不是相反.为了从我所提到的问题,适用的答案,我需要让所有的用户的圈子(我可能要保持出于安全原因的秘密)的一种方式,然后经过/circles/a/users/42,/circles/b/users/42,/circles/c/users/42等等,然后合并结果以显示可用的最大信息量.显然,没有一个圆圈可以获得任何其他圈子获得的所有信息.我认为这很棘手(请注意,我可能需要使用几种对象来执行此操作,未来版本可能需要不同的过程),但如果我想对特定用户施加安全限制,尽管他也是在我的一些圈子里?这个问题甚至可以解决吗?即使我拒绝回复上述任何一个问题并提出一个可以给我答案的新查询,它仍然会揭示这样一个事实,即由于个人访问限制,这个特定用户的处理方式不同.
我在这里错过了什么?我甚至可以开发RESTful Web服务吗?
如果结论是行为不是RESTful,那么这仍然会构成违反REST合同在道德上可行的情况吗?如果是这样,有什么负面影响?例如,我是否存在代理缓存问题的风险?
tue*_*tre 27
根据菲尔丁的论文(这真是一篇很棒的写作):
资源是到一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体.
换句话说,如果您有一个被定义为"请求用户的已分配项目"的资源及其URI可访问的表示/projects,则不会通过为用户返回一个项目列表(即表示)来违反REST的任何约束.用户B获取相同URI时的A和另一个(表示).这样,界面是统一/一致的.
除此之外,REST仅规定响应中包含显式缓存指令,无论是"长时间缓存"还是"根本不缓存":
高速缓存约束要求将对请求的响应中的数据隐式或显式标记为可高速缓存或不可高速缓存.
您如何选择管理由您决定.
记住这一点,
只要您没有违反统一接口的约束,您应该放心返回根据请求表示特定资源的用户而变化的资源表示 - 不要使用单个资源标识符来返回表示不同的资源.
如果它有帮助,请考虑服务器响应资源的不同表示 - XML或JSON,法语或英语等.与请求一起发送的凭证只是服务器能够用来确定哪个表示的另一个因素发送回应.这就是标题部分的用途.
我同意其他解决方案似乎不正确。它使得URL结构变得复杂并且更难找到资源。但是,如果您正确执行了 REST,那么资源的 URL 是什么并不重要,因为服务器控制着它(并且可以根据需要自由地重新定位它)。如果您的客户端确实是“REST”,它会通过事先与服务器协商来发现所需的资源。因此,路径对客户端来说确实并不重要。我不喜欢它是因为它使用起来很混乱——而不是因为违反了 REST 原则。
但这可能无法回答您的问题 - 您没有提到的是您的安全设置 - 大概您正在传递带有请求的会话令牌作为请求标头的一部分。因此,您的后端处理应该能够将其与特定的安全约束集联系起来。从那里,您可以使用所需的任何业务逻辑形成列表,并根据与会话相关的用户安全性返回有限的资源。
对于算法本身,通常会实现一种限制最少或限制最多的类型算法,将允许的数据合并到响应中(非常类似于 java 领域或 Microsoft 的用户安全模型)。
如果受限/非受限情况下的数据结构不同,您可以创建两种不同的数据表示形式,并返回用户有权查看的任一表示形式。无论如何,客户端应该询问接受的 mime 响应类型,并且它只会根据请求标头中的会话安全性提供不同的答案。或者,您可以提供带有表示的可选元素,并根据授权填写适当的元素(尽管在我看来这有点黑客行为)。
| 归档时间: |
|
| 查看次数: |
5457 次 |
| 最近记录: |