RESTful API 对于同一实体,如何定义管理员和用户的路径?

2018-08-23 22:55:28 +08:00
 kuretru

API 同时为用户及后台管理员提供接口,2 种用户都需要访问某一资源,如何优雅的定义路径,区分 2 种权限?管理员调用时字段肯定比用户调用时较多。
例如GET /api/items获取所有物品列表,管理员可以额外获取到库存字段。

8223 次点击
所在节点    程序员
41 条回复
wizardoz
2018-08-24 10:16:55 +08:00
分不同 URL 比较合理,权限只鉴定单个资源的访问权限
iyangyuan
2018-08-24 10:26:19 +08:00
不分 url 这个会很混乱吧,首先就违反了单一职责原则
zilan
2018-08-24 13:59:02 +08:00
鉴权服务确认
leafiy
2018-08-24 14:37:14 +08:00
1.路由鉴权,不推荐
2.header/token,不建议
3.区分 url,推荐
zifangsky
2018-08-24 14:54:27 +08:00
后台根据请求的 token 对应的用户是什么角色,来返回不同的内容。
luozic
2018-08-24 16:02:11 +08:00
这只是一个映射,具体数据内容,你可以根据账户绑定啊?
kuretru
2018-08-24 19:27:46 +08:00
@DavidNineRoc @leafiy 感谢,最后使用了 2 个路径解决
hantsy
2018-08-24 19:49:01 +08:00
权限和路径有什么关系???
搞不懂这么多人支持这种脑残设计(完全不符合 REST ),专门针对不同角色定义路由 URI,如果系统有多个不同角色,要定义多个不同的 URI 吗?如果以后系统还要添加 ROLE 呢?

@lscho @hsluoyz @zifangsky @learnshare @hlwjia @zhzer @mec 看来也有人做得不错。
secretman
2018-08-24 20:26:44 +08:00
为什么不检验 token 或者 auth 这类的来判断,加在 header 里面
DavidNineRoc
2018-08-24 20:59:22 +08:00
@hantsy 首先楼主说的我不确定是不是这样子。
角色和 url 无关,而楼主说的是已经不是这样子了。用户指的是前台用户,管理员是后台管理员。他们极有可能不是同一张表,你觉得他该用同一套接口,
那么大家的后台登录为什么和前台登录不放在一起呢?
learnshare
2018-08-24 21:03:13 +08:00
@DavidNineRoc 后台、前台甚至 App 都可以共享同一套 API,这就是前后端分离的方便之处
lscho
2018-08-24 21:13:12 +08:00
@DavidNineRoc 不是同一张表什么鬼?前台的商品和后台的商品不是同一个资源?前台登录能和后台登录相比?一个是会员,一个是管理员,不同的资源啊。
kuretru
2018-08-24 21:25:38 +08:00
@DavidNineRoc #30 详细情况是这样的,后端 API 要同时为微信小程序和后台管理页面提供接口,信息位于同一表上,但是小程序和管理界面的请求参数、以及响应字段都不同。
feiyuanqiu
2018-08-24 21:39:30 +08:00
@secretman 权限不是这么用的。
现在权限管理一般采用 role based access control 这套方案设计,将权限管理与具体的资源、接口解耦。不同角色拥有不同的资源权限,而不是同一个资源对不同角色单独维护一套逻辑。这样满足了单一职责、开放封闭原则,对后期维护有很大好处
newtype0092
2018-08-24 21:41:56 +08:00
@hantsy 按 REST 风格,哪怕是同样的数据表,后台管理信息和用户展示信息根本就是两个东西,也就是两个资源,用同一个 API 访问两个资源才不符合 REST 好吧。。。
hlwjia
2018-08-24 22:07:58 +08:00
最理想的是,甚至做到提供给第三方使用的 API 都是相同的一套

但本人没实践过那么大型的系统 yet, 所以不知道有没有什么坑。
secretman
2018-08-24 22:16:49 +08:00
@feiyuanqiu 学习了
DavidNineRoc
2018-08-25 12:17:06 +08:00
@learnshare 享用同一套 api 是有前提的。
@lscho 楼主说用户管理员,没解释之前,我当然可以认为是两张表,完全不同的概念,就为了省事,加个判断返回数据,我觉得不可靠。
@kuretru 后台也是前后端分离,直接加前缀 admin/,小程序也是后台?如果只是展示用的,我建议分开。
jasperjia
2018-08-25 23:43:04 +08:00
@newtype0092 你有点混淆了概念。不同资源确实应该不同 API。但是这里面还有权限的需求。你不能通过 URL 就判断该用户具有相关权限。所以还是需要 token 验证用户。当然你也可以用两个 API 承载各自业务,但是 token 或者其他验证用户身份和权限这一层必不可少。
sanyuedev
2020-10-21 10:03:23 +08:00
我也有这样的疑问,很纠结

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/482682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX