2016-03-01 34 views
4

我已經看到了神奇的支持IDS用於身份驗證的用戶像下面的URI:正在使用魔術(me/self)資源標識符違反REST原則嗎?

GET /user/me - list my profile 
GET /user/me/photos - list my photos 

,其中低於那些使用實際用戶ID

GET /user/742924 
GET /user/742924/photos 

我看到的問題是,同樣的資源ID根據經過身份驗證的用戶指向不同的資源。

這是否違反任何REST原則?

回答

6

使用/me命名對應於認證用戶資源從靜止的角度完美的罰款。據羅伊·托馬斯Fielding的論文,可以命名爲任何信息,可以是資源

5.2.1.1 Resources and Resource Identifiers

的REST信息的關鍵的抽象是資源。任何可以命名的信息都可以是資源:文檔或圖像,時間服務(例如「今日洛杉磯的天氣」),其他資源的集合,非虛擬對象(例如人)等等。換句話說,任何可能成爲作者超文本引用目標的概念都必須符合資源的定義。資源是對一組實體的概念映射,而不是與任何特定時間點的映射對應的實體。 [...]

使用/me,您對身份驗證的用戶定位器,它會始終識別身份驗證的用戶概念,不管是哪個用戶進行身份驗證。

0

這很好。

無論是數據庫中的同一實體是無關緊要的,更正確的描述是每個概念需要一個URI。 「當前用戶」的概念不同於「用戶742924」,所以沒關係。

甚至可能比「當前用戶」,「上次登錄的用戶」,「名稱以A開頭的用戶」,「最早的用戶」等更糟。所有這些可以不同資源,即使他們可能指向同一個「用戶」。