2017-04-24 85 views
1

這是我第一次接觸HATEOS。我製作了一個前端客戶端應用程序,它必須使用這種格式與服務器連接。我看到一個帶有所有超鏈接的JSON模式引用了相關的對象。HATEOS由服務器或客戶端提供?

我的問題是我應該從客戶端應用程序創建這些超鏈接還是這是服務器的任務?

回答

2

鏈接在服務器端生成。

您必須區分應用程序狀態和服務器上資源的狀態。客戶端處理應用程序狀態。服務器處理資源狀態。

應用程序狀態決定客戶端在完成任務過程中的「哪裏」,即:它在哪裏與服務器進行交互。

資源狀態是服務器存儲的持久性數據的種類,持續時間超過單個會話的持續時間。

除了資源本身的表示外,還有一些元數據(JSON表示中的「鏈接」部分)告訴客戶端可以使用該資源進行下一步工作。要真正改變資源狀態,客戶端必須遵循由服務器生成的其中一個提供的鏈接。

讓我們舉一個具體的例子來說明這些概念。

如果您瀏覽縮略圖庫並且服務器剛剛發送了縮略圖23號,則您的客戶端不能簡單地對服務器說「下一個」,因爲這意味着服務器必須記住您的客戶端應用程序有之前詢問了23號。而且它必須爲每個連接的客戶端保留這個「上下文」。相反,如果客戶明確要求縮略圖號24在圖庫中前進,服務器就免除了這種負擔:在兩次連續的縮略圖服務調用之間,服務器不記得任何東西。 「上下文」(即應用程序狀態的相關部分)保留在客戶端上並顯式傳遞給服務器。

好處是,您不必知道您是否正在查看上次調用中的特定縮略圖。因爲,隨着此圖像的表示,服務器可以向您發送標有「上一個」和「下一個」的鏈接,以指向相應的縮略圖。在服務器生成縮略圖23的表示時,服務器擁有與您的請求相關的所有信息。它知道你要求的縮略圖,以及之前和之後的縮略圖。因此它可以在HATEOAS表示中生成相應的鏈接。

+0

非常感謝你的幫助。我沒有料到這個全面的答案。 我還有一個問題。比方說,我有兩個代表兩種東西的JSON對象(例如用戶帳戶和事件)。當用戶在他的客戶端確認他在該事件中的存在時,我想添加這兩者之間的關係。我如何從客戶端寫下這個關係然後發送給服務器? – andrzej541