[請益] 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