「WebAPI小議」我應該如何定義個人用戶訪問資源的WebAPI?

今天圍觀隔壁前後端對接調試接口,發現一個有趣的url接口定義,/users/getInfoByUserId,看url定義能夠理解是根據用戶id獲取用戶信息,然而小貓熊覺得還是有改進的地方。

標準restful的定義採用/users/{userid}的方式,但是一般對於外部用戶,應該採取token而不是在url中填入userid,否則不滿足安全設計,那麼自然會考慮採用動賓結構的形如getxxxbyxxx的方式。

然而,根據restful的風格約定,並不建議在url中出現動詞。其實我們知道,絕對的restful風格WebAPI接口是很難滿足實際業務需求的,比如同樣對於user資源,編輯基本信息和綁定手機號都是可以歸納到對user資源做patch操作,那麼這時候一個put接口是否就能滿足開發需求呢?是否應該針對各個接口涉及到字段域的修改,分別做if/else或者switch/case的分支處理呢?

往往會在url中增加動詞作爲折中處理,正如香農的信息論中所闡述的,信息量的增加是爲了消除不確定性,如果有限的名詞組合不能精確、無二義性的表述接口定義,那麼就會想到通過增加動詞去修飾接口。

其實,採用/users/me/info,然後配合token,可以以更簡明的方式,表達同樣的接口意義。

於是可以推導一下常規webapi的四種形式和定義模板。

第一,外部用戶,採用資源/me/子資源的方式,請求頭嵌入token,例如/users/me/info。

第二,內部用戶在用戶管理模塊中,採用資源/{userid}/info,請求頭嵌入token。

第三,開放平臺訪問資源,可以採用appid,appkey的方式生成token後訪問資源。

第四,匿名登錄。隨意,但要後臺處理同源接口限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章