[请益] RESTful API 身份设计问题

楼主: chan15 (ChaN)   2021-01-26 21:15:22
各位好,我正在设计公司的 RESTful api,遇到一个身份判定的问题有点卡住,想请教一下各位
假设我今天要拿到一个 team 里面我这个 user 的 profile,该怎么下比较好
1. teams/{team_id}/users/profile
2. teams/{team_id}/users/me/profile
3. teams/{team_id}/users/{user_id}/profile
会有这个问题是因为,一般 RESTful 都是表定是 me 了,登入后用在 header 的 token 拿取属于你的资料
这个定义的情况下 1 感觉是最接近的,但 users 下没有指定对象又感觉很怪,毕竟 users 是复数
假设 2 成立,那我 teams 想要一支 api 也透过 user_id 找其他人 profile 的话 3 跟 2 route 会打架
3 如果带上自己 user_id 可以解决全部问题,但又失去了直接比对 jwt token 的便利性
for me: teams/{team_id}/me/profile
for someone: teams/{team_id}/users/{user_id}/profile
如果上述成立,另一个模组是 users,专门处理 user 的内容,以忘记密码举例
for me: users/me/forgot-password
for someone: users/{user_id}/forgot-password
这 route 又打架了 XD,不确定表达的好不好,目前就是卡在该怎么在如何在 url 上可以明确看出这只 api
对到的是你或者是某个指定对象,route 不冲突但也可以兼顾直接拿 jwt token 来用,谢谢
作者: MOONY135 (谈无欲)   2021-01-26 21:36:00
有要开放查其他人的话3应该好一点吧你要开放可以查其他人为什么要选2只是为了jwt token的便利性?然后你自己想想你的忘记密码举例 到底是针对自己 还是开给后台操作人员做的2跟3其实可以不互斥 自己查自己的资讯内容跟自己可以查别人的资讯内容肯定不一样吧?
作者: jinmin88 (昼伏夜出)   2021-01-26 21:48:00
jwt是方便让你知道执行者是谁,api多个me,有点多此一举
作者: bill0205 (善良的小孩没人爱)   2021-01-26 22:06:00
我是给自己用就用1 毕竟表定是给自己 无需增加me但是开放给其他人查就会用3两种并不互斥+1
作者: MOONY135 (谈无欲)   2021-01-26 22:11:00
你的api其实没考虑到是给'什么权限'的人用,才会觉得好像用法很奇怪
作者: longlyeagle (长鹰宝宝实验室)   2021-01-26 22:18:00
3
作者: bill0205 (善良的小孩没人爱)   2021-01-26 22:19:00
偷偷问 如果说表定API是给自己用 那1 的users/profile这语法好像有点怪怪的?(我是想users是复数 但指向自己 是复数吗@@)
作者: SHANGOYANYI (彦一)   2021-01-26 22:41:00
选3 然后最后面’profile‘可以省略 另外有user_id情况下前面多teams那一层的设计会变成阶层关系对未来扩充弹性(例如:user可加入多team、user尚未加入任何team)的影响可能要考虑一下
作者: Dommgifer (Dommgifer)   2021-01-26 22:42:00
把角色权限考虑进去 应该就会有不同的想法了
作者: online135 (98分美元宇宙星尘)   2021-01-26 23:04:00
3 你可以去查 Laravel官方网站 里面有写
作者: rounivin (单单)   2021-01-26 23:29:00
不懂3和失去比对jwt token 便利性有什么关系
作者: TheWhack (我是德华)   2021-01-27 01:09:00
1或3,你开的3感觉很充裕了,不要用me
作者: l7th (1931)   2021-01-27 03:07:00
/teams/{team_id}/me & teams/{team_id}/users/{id}
作者: MOONY135 (谈无欲)   2021-01-27 04:49:00
例如你的忘记密码要用那个,指定user id的忘记密码代表你可以帮别人改资料 你觉得这是谁可以做的事情? 管理员可以啊 所以你用管理员的思维跟自己可以改自己的,这两种路径不就不会冲突,因为是给不同权限的人用的Identify/forget-password & users/{his}/forget-passwordhis->uid
作者: superpai (超级白)   2021-01-27 05:36:00
其实我觉得2是最好的,me就是一个特殊userid啊,没有跟3打架的感觉
作者: bill0205 (善良的小孩没人爱)   2021-01-27 09:50:00
我意思是 users是user的复数 但是取自己的profile应该是单数吧?!
作者: superpai (超级白)   2021-01-27 12:01:00
不懂你的意思,/users/userid 一样也是单一user
作者: petercoin (彼得币)   2021-01-27 15:23:00
/users/userid/profile比较符合针对单一使用者的意思吧/users/profile看起来就是要捞所有使用者的profile?
作者: bill0205 (善良的小孩没人爱)   2021-01-27 16:09:00
我问题是只针对原PO的1的状况 就是P大所说的看起来像是捞取所有使用者的profile
作者: doranako (真爱无限)   2021-01-27 21:43:00
如果有开放查别人,3最好,不然还要多写个api,如果没开放查别人只能拿到自己,那前面路径应该要改一下

Links booklink

Contact Us: admin [ a t ] ucptt.com