2017-09-15 64 views
1

我想知道在認證過程後加載RESTful對象的最佳做法是什麼。認證後加載RESTful對象

例如,我有一個應用程序,登錄後需要檢索人員,地點和其他與帳戶相關的信息列表。以下哪一項是最佳實踐?

A。應用程序調用後POST/API/V1 /登錄應該交回:

{ 
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz", 
    "persons": [ 
     {"id": 1, "name": "John"}, 
     {"id": 2, "name": "Paul"}, 
     {"id": 3, "name": "George"}, 
     {"id": 3, "name": "Ringo"} 
    ], 
    "places": [ 
     {"id": 1, "name": "London"}, 
     {"id": 2, "name": "New York"}, 
    ], 
    "lastLogin": "2017-09-10 13:00:00" 
} 

這種方法似乎更容易的應用程序開發人員,因爲他們沒有撥打電話,以獲得獨立。但是,它似乎緊密結合在一起。

B。還是應該只返回

{ 
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz" 
} 

和應用程序應該使用例如分別加載其他數據,

GET /api/v1/persons 
GET /api/v1/places 
GET /api/v1/lastlogin 

這種方法似乎是清潔的,但它可能是爲應用程序開發者更難。而且會有一些額外的請求開銷,特別是如果你加載了很多不同的模型。

C。或者,我是否應該只需要一個名爲/api/v1/loginWithData的電話,該電話將帶有數據的令牌和單獨的返回令牌的單獨一個/api/v1/login?這種方法有兩個最好的,但它似乎混亂的API名稱空間。

我真的很感激它,如果你可以發送鏈接,將解釋,所以我可以向他們學習。

回答

1

請注意,如果我們正在討論第三方應用程序,那麼他們不應該擁有用戶憑證和身份驗證令牌。他們只是從用戶那裏獲得一個訪問密鑰,當他們給他們一些特權或更多受限制的API時,每個請求都由用戶簽名。如果你在談論會話而不是無狀態令牌,那麼你應該檢查OAuth和Fielding論文來學習基礎知識。

如果您開發的是實際的客戶端,因此它不是第三方應用程序,那麼令牌必須在授權標頭或Cookie中傳輸,而不是在主體中。我將使用POST /api/v1/auth鏈接,該鏈接爲您提供鏈接到您的數據源的GET /api/v1/user/136。或者,如果您使用自定義MIME類型,則返回一個空的主體。

+0

我傾向於同意你的看法。但是,這是普遍的做法還是僅僅是爲了簡單? –

+0

@aljof哪部分? – inf3rno

+0

你在哪裏提到過:「我將使用POST/api/v1/auth鏈接,它提供了GET/api/v1/user/136」。我想我問的是爲什麼不讓POST的響應包含我的應用將使用的數據,而是讓應用使用另一個請求,獲取數據? –