[請益] RESTful API 身份設計問題
各位好,我正在設計公司的 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 來用,謝謝
--
有要開放查其他人的話3應該好一點吧
你要開放可以查其他人為什麼要選2只是為了jwt token
的便利性?
然後你自己想想你的忘記密碼舉例 到底是針對自己 還是
開給後台操作人員做的
2跟3其實可以不互斥 自己查自己的資訊內容跟
自己可以查別人的資訊內容肯定不一樣吧?
你好,2 跟 3 打架是指 route 的設計,teams/{team_id}/users/XXX/profile 雖然 XXX 有很多手腳可以動,譬如寫判斷 me 就是自己 me 以外是 uid 但我覺得變本末倒置
jwt是方便讓你知道執行者是誰,api多個me,有點多此一舉
對,但 users/profile 又有點奇怪...
我是給自己用就用1 畢竟表定是給自己 無需增加me
但是開放給其他人查就會用3
兩種並不互斥+1
這樣聽起來就是 for me: teams/{team_id}/users/profile for someone: teams/{team_id}/users/{user_id}/profile 這樣嗎
你的api其實沒考慮到是給'什麼權限'的人用,才會覺得好
像用法很奇怪
可以幫忙導正一下嗎 QQ
3
偷偷問 如果說表定API是給自己用 那1 的users/profile
這語法好像有點怪怪的?
(我是想users是複數 但指向自己 是複數嗎@@)
You got the point
選3 然後最後面’profile‘可以省略 另外有user_
id情況下前面多teams那一層的設計會變成階層關係
對未來擴充彈性(例如:user可加入多team、user尚
未加入任何team)的影響可能要考慮一下
把角色權限考慮進去 應該就會有不同的想法了
3 你可以去查 Laravel官方網站 裡面有寫
好的,謝謝
不懂3和失去比對jwt token 便利性有什麼關係
因為假設是查自己了,那 {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:081或3,你開的3感覺很充裕了,不要用me
/teams/{team_id}/me & teams/{team_id}/users/{id}
例如你的忘記密碼要用那個,指定user id的忘記密碼代表
你可以幫別人改資料 你覺得這是誰可以做的事情? 管理員
可以啊 所以你用管理員的思維跟自己可以改自己的,這兩
種路徑不就不會衝突,因為是給不同權限的人用的
Identify/forget-password & users/{his}/forget-passwo
rd
his->uid
其實我覺得2是最好的,me就是一個特殊userid啊,沒有跟3
打架的感覺
我意思是 users是user的複數 但是取自己的profile
應該是單數吧?!
不懂你的意思,/users/userid 一樣也是單一user
/users/userid/profile比較符合針對單一使用者的意思吧
/users/profile看起來就是要撈所有使用者的profile?
我問題是只針對原PO的1的狀況 就是P大所說的
看起來像是撈取所有使用者的profile
如果有開放查別人,3最好,不然還要多寫個api,如果沒
開放查別人只能拿到自己,那前面路徑應該要改一下
2
在 teams A 的 users A 和 teams B 的 users A 會是不同的 user 嗎? 如果不是的話要把 teams 前綴拿掉。 以目前設計到一半的 PTT API 為例, boards A 的 articles A 和 boards B 的 articles A 會是不同文章,因此要分開。 然後 me 的問題,我不建議使用 users/me 這樣的做法,假如有人的 ID 是 me 會很衰1
個人見解 1. 語義上拿不到特定的資源,所以不會使用這個。 2. 用 me 的機會通常是會將 me 放在最前面,因為 me 最大。另外依照前端畫面呈現來處理的話,如果 me 跟指定 userid 的畫面一樣的話,那用 me 的 shortcut 只是讓自己更困擾而已。 3. 偏好用這個,比較符合定義,但要注意一下有些開發者可能會把 profile 拿掉,我自己是覺得都可以。 jwt 這部分跟 auth 比較有關,除非你是用 me,要不然其實應該可以不用考量這個。
X
Re: [請益] 每日FBX之亂到此結束?低調回覆這篇, 小弟之前做投資網站時有寫爬蟲去抓每日FBX官網的報價, 然後有發現網站 雖然寫要看每日報價必須登入會員, 可是其實他技術上根本沒有阻擋, 就算沒有會員的 cookie, 打下面這個API就能拿到近一年的每日報價了... 拿到的json檔案想方便觀看可以用下面的網站解析json:50
[請益]接受php的工作還是繼續面試Java職缺前情提要 因為公司組織調整 予以資遣 所以只能做到月底 現職工作月薪 45000+1500(全勤) 年終大概一個月33
Re: [討論] API沒資料,回200還是404比較好嗯,我想兩位的建議可以寄信向 GitHub 和 Atlassian 這兩間公司說明一下,或許可以 幫他們團隊縮減人力。 當查詢資源不存在時返回 HTTP Code 404:32
[請益] 轉職前端方向見過各位年薪百萬前輩 第一次在此版po文 小弟背景 高職肄業私大文組大五岩壁 年近25 比應屆生還老了 過去就是鄉民口中的垃圾+926
[其他] 和泰未繳費補繳方式方法是使用Postman 戳圖上指定API 方法選擇POST 結尾Relation ID可以在個人資料內的訂單 按下F12後選取網路的標籤 之後點一下你要付款的訂單詳細資訊按鈕13
[心得] 為什麼要學 GraphQL?來聊個簡單的議題? 『為什麼要學 GraphQL?』 部落格好讀版: 身為網站工程師,您不能不知道什麼是 GraphQL,這是一個前端跟後端溝通的 API Query 語法,大幅改善了前後端的合作模式,這篇會跟大家介紹為什麼麼要學 GraphQL, 以及整理出三大 GraphQL 優勢,讓大家了解跟傳統 Restful API 有什麼不同。當然不是20
Re: 請益Request爬蟲手機打字不想打太多 一般瀏覽器打開頁面可以分成幾個步驟: 1. 請求 HTML 2. 解析 HTML 並下載 assets (img, css, js) 3. 執行 js3
[心得] HomeAssistant 透過REST API 控制裝置哈囉 iOS板友們 繼先前的Home Assistant(HA)建置教學後, 這次是使用網址API的方式,來達到不透過iOS App或是 網頁的方式來操控家中裝置。 以此連結做為參考