[請益] RESTful API 身份設計問題

看板Soft_Job (軟體人)作者 (ChaN)時間3年前 (2021/01/26 21:15), 3年前編輯推噓10(10034)
留言44則, 13人參與, 3年前最新討論串1/3 (看更多)
各位好,我正在設計公司的 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 來用,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.234.173 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1611666924.A.6AB.html ※ 編輯: chan15 (122.116.234.173 臺灣), 01/26/2021 21:15:40

01/26 21:36, 3年前 , 1F
有要開放查其他人的話3應該好一點吧
01/26 21:36, 1F

01/26 21:39, 3年前 , 2F
你要開放可以查其他人為什麼要選2只是為了jwt token
01/26 21:39, 2F

01/26 21:39, 3年前 , 3F
的便利性?
01/26 21:39, 3F

01/26 21:40, 3年前 , 4F
然後你自己想想你的忘記密碼舉例 到底是針對自己 還是
01/26 21:40, 4F

01/26 21:40, 3年前 , 5F
開給後台操作人員做的
01/26 21:40, 5F

01/26 21:42, 3年前 , 6F
2跟3其實可以不互斥 自己查自己的資訊內容跟
01/26 21:42, 6F

01/26 21:42, 3年前 , 7F
自己可以查別人的資訊內容肯定不一樣吧?
01/26 21:42, 7F
你好,2 跟 3 打架是指 route 的設計,teams/{team_id}/users/XXX/profile 雖然 XXX 有很多手腳可以動,譬如寫判斷 me 就是自己 me 以外是 uid 但我覺得變本末倒置

01/26 21:48, 3年前 , 8F
jwt是方便讓你知道執行者是誰,api多個me,有點多此一舉
01/26 21:48, 8F
對,但 users/profile 又有點奇怪...

01/26 22:06, 3年前 , 9F
我是給自己用就用1 畢竟表定是給自己 無需增加me
01/26 22:06, 9F

01/26 22:06, 3年前 , 10F
但是開放給其他人查就會用3
01/26 22:06, 10F

01/26 22:07, 3年前 , 11F
兩種並不互斥+1
01/26 22:07, 11F
這樣聽起來就是 for me: teams/{team_id}/users/profile for someone: teams/{team_id}/users/{user_id}/profile 這樣嗎

01/26 22:11, 3年前 , 12F
你的api其實沒考慮到是給'什麼權限'的人用,才會覺得好
01/26 22:11, 12F

01/26 22:11, 3年前 , 13F
像用法很奇怪
01/26 22:11, 13F
可以幫忙導正一下嗎 QQ

01/26 22:18, 3年前 , 14F
3
01/26 22:18, 14F

01/26 22:19, 3年前 , 15F
偷偷問 如果說表定API是給自己用 那1 的users/profile
01/26 22:19, 15F

01/26 22:20, 3年前 , 16F
這語法好像有點怪怪的?
01/26 22:20, 16F

01/26 22:20, 3年前 , 17F
(我是想users是複數 但指向自己 是複數嗎@@)
01/26 22:20, 17F
You got the point

01/26 22:41, 3年前 , 18F
選3 然後最後面’profile‘可以省略 另外有user_
01/26 22:41, 18F

01/26 22:41, 3年前 , 19F
id情況下前面多teams那一層的設計會變成階層關係
01/26 22:41, 19F

01/26 22:41, 3年前 , 20F
對未來擴充彈性(例如:user可加入多team、user尚
01/26 22:41, 20F

01/26 22:41, 3年前 , 21F
未加入任何team)的影響可能要考慮一下
01/26 22:41, 21F

01/26 22:42, 3年前 , 22F
把角色權限考慮進去 應該就會有不同的想法了
01/26 22:42, 22F

01/26 23:04, 3年前 , 23F
3 你可以去查 Laravel官方網站 裡面有寫
01/26 23:04, 23F
好的,謝謝

01/26 23:29, 3年前 , 24F
不懂3和失去比對jwt token 便利性有什麼關係
01/26 23:29, 24F
因為假設是查自己了,那 {user_id} 不需要存在,從 jwt token 就可以拿到 id 了 所以網路上的範例多半 api/v1/events 是指 jwt token user 的 personal event 那反過來講,我 api/v1/events 萬一是要給全部的人看不鎖登入的話該怎麼辦 我現在就是怎麼從網址就可以清楚表示這個 resource 是拿登入者自己還是全部的數據而困擾 ※ 編輯: chan15 (122.116.234.173 臺灣), 01/27/2021 00:47:08

01/27 01:09, 3年前 , 25F
1或3,你開的3感覺很充裕了,不要用me
01/27 01:09, 25F

01/27 03:07, 3年前 , 26F
/teams/{team_id}/me & teams/{team_id}/users/{id}
01/27 03:07, 26F

01/27 04:49, 3年前 , 27F
例如你的忘記密碼要用那個,指定user id的忘記密碼代表
01/27 04:49, 27F

01/27 04:49, 3年前 , 28F
你可以幫別人改資料 你覺得這是誰可以做的事情? 管理員
01/27 04:49, 28F

01/27 04:49, 3年前 , 29F
可以啊 所以你用管理員的思維跟自己可以改自己的,這兩
01/27 04:49, 29F

01/27 04:49, 3年前 , 30F
種路徑不就不會衝突,因為是給不同權限的人用的
01/27 04:49, 30F

01/27 04:52, 3年前 , 31F
Identify/forget-password & users/{his}/forget-passwo
01/27 04:52, 31F

01/27 04:52, 3年前 , 32F
rd
01/27 04:52, 32F

01/27 04:53, 3年前 , 33F
his->uid
01/27 04:53, 33F

01/27 05:36, 3年前 , 34F
其實我覺得2是最好的,me就是一個特殊userid啊,沒有跟3
01/27 05:36, 34F

01/27 05:36, 3年前 , 35F
打架的感覺
01/27 05:36, 35F

01/27 09:50, 3年前 , 36F
我意思是 users是user的複數 但是取自己的profile
01/27 09:50, 36F

01/27 09:50, 3年前 , 37F
應該是單數吧?!
01/27 09:50, 37F

01/27 12:01, 3年前 , 38F
不懂你的意思,/users/userid 一樣也是單一user
01/27 12:01, 38F

01/27 15:23, 3年前 , 39F
/users/userid/profile比較符合針對單一使用者的意思吧
01/27 15:23, 39F

01/27 15:23, 3年前 , 40F
/users/profile看起來就是要撈所有使用者的profile?
01/27 15:23, 40F

01/27 16:09, 3年前 , 41F
我問題是只針對原PO的1的狀況 就是P大所說的
01/27 16:09, 41F

01/27 16:10, 3年前 , 42F
看起來像是撈取所有使用者的profile
01/27 16:10, 42F

01/27 21:43, 3年前 , 43F
如果有開放查別人,3最好,不然還要多寫個api,如果沒
01/27 21:43, 43F

01/27 21:43, 3年前 , 44F
開放查別人只能拿到自己,那前面路徑應該要改一下
01/27 21:43, 44F
文章代碼(AID): #1W41NiQh (Soft_Job)
文章代碼(AID): #1W41NiQh (Soft_Job)