2017-04-24 87 views
1

这是我第一次接触HATEOS。我制作了一个前端客户端应用程序,它必须使用这种格式与服务器连接。我看到一个带有所有超链接的JSON模式引用了相关的对象。HATEOS由服务器或客户端提供?

我的问题是我应该从客户端应用程序创建这些超链接还是这是服务器的任务?

回答

2

链接在服务器端生成。

您必须区分应用程序状态和服务器上资源的状态。客户端处理应用程序状态。服务器处理资源状态。

应用程序状态决定客户端在完成任务过程中的“哪里”,即:它在哪里与服务器进行交互。

资源状态是服务器存储的持久性数据的种类,持续时间超过单个会话的持续时间。

除了资源本身的表示外,还有一些元数据(JSON表示中的“链接”部分)告诉客户端可以使用该资源进行下一步工作。要真正改变资源状态,客户端必须遵循由服务器生成的其中一个提供的链接。

让我们举一个具体的例子来说明这些概念。

如果您浏览缩略图库并且服务器刚刚发送了缩略图23号,则您的客户端不能简单地对服务器说“下一个”,因为这意味着服务器必须记住您的客户端应用程序有之前询问了23号。而且它必须为每个连接的客户端保留这个“上下文”。相反,如果客户明确要求缩略图号24在图库中前进,服务器就免除了这种负担:在两次连续的缩略图服务调用之间,服务器不记得任何东西。 “上下文”(即应用程序状态的相关部分)保留在客户端上并显式传递给服务器。

好处是,您不必知道您是否正在查看上次调用中的特定缩略图。因为,随着此图像的表示,服务器可以向您发送标有“上一个”和“下一个”的链接,以指向相应的缩略图。在服务器生成缩略图23的表示时,服务器拥有与您的请求相关的所有信息。它知道你要求的缩略图,以及之前和之后的缩略图。因此它可以在HATEOAS表示中生成相应的链接。

+0

非常感谢你的帮助。我没有料到这个全面的答案。 我还有一个问题。比方说,我有两个代表两种东西的JSON对象(例如用户帐户和事件)。当用户在他的客户端确认他在该事件中的存在时,我想添加这两者之间的关系。我如何从客户端写下这个关系然后发送给服务器? – andrzej541