Node.js RESTAPI URI是否应该基于参数而不仅仅是资源进行授权?
我正在尝试为我的web应用程序创建后端。该应用程序应该有能够创建关于不同事物的帖子并编辑这些帖子(如果需要)的用户,以及能够编辑甚至删除不同用户的帖子(如果他们认为这些帖子不好)的管理员。我在管理用户权限和授权方面遇到困难,特别是关于允许用户访问的资源,但我找到了两种可能的解决方案,我不确定哪一种是最好的Node.js RESTAPI URI是否应该基于参数而不仅仅是资源进行授权?,node.js,rest,express,design-patterns,architecture,Node.js,Rest,Express,Design Patterns,Architecture,我正在尝试为我的web应用程序创建后端。该应用程序应该有能够创建关于不同事物的帖子并编辑这些帖子(如果需要)的用户,以及能够编辑甚至删除不同用户的帖子(如果他们认为这些帖子不好)的管理员。我在管理用户权限和授权方面遇到困难,特别是关于允许用户访问的资源,但我找到了两种可能的解决方案,我不确定哪一种是最好的 使用特定的路由(如/users/me),允许用户修改自己的数据,并将/users/{id}资源留给管理员使用 根据给定id是否与身份验证中的用户匹配来处理授权(/users/{id}仅允许您删
我提到我的后端使用node.js和express,它们通过Mongoose与MongoDB数据库交互,我在您的第二个模型中做了大量工作,表单的端点中有很多逻辑“这个用户可以在某个对象上执行该操作吗” 如果这些条件成立的话,我会推荐你的第一款
- 可测试性。最终用户处理自己数据的一组简单的API操作可以进行测试和回归测试,比依赖于更复杂的特权内容的一组更复杂的API更便宜
- 可伸缩性。如果你的应用扩展,你可以将你的管理web端点移动到他们自己的一台或多台服务器上,并将更简单但流量更大的用户端点留在另一批服务器上。要使最后一批服务器起作用,你不需要像
和/users/me/where
,而是/users/{id}这样的端点/无论什么
和/me/whatever
。不要给/users/{id}/whatever
端点任何方式,让用户(可能是恶意网络爬虫)指定当前用户会话令牌或凭据以外的用户/me
- 安全性。性能较差的端点集比性能较好的端点集更容易保护。接受较少数据项的端点本质上更安全。(当然,您仍然需要保护管理端点。)
/users/me
这样的URL意味着一个全局唯一的资源,事实证明并非如此
另一种选择是更好地与REST保持一致。像/users/1234
这样的URL表示与/users/5678
不同的资源。据我所知,这实际上也是您所追求的行为
从代码可维护性的角度来看,将模型与所需的行为对齐通常是值得的
这使您能够