HATEOAS 书签 URL 访问

HATEOAS bookmarked URL access

我正在努力了解 HATEOAS。

让我们来看一个例子。客户端将浏览器加载到 getemails.com。为简单起见,我们假设对 getemails.com 的调用命中服务器并且它 returns 返回一个电子邮件列表。每封电子邮件都有一个 link,允许用户获取更多详细信息。像这样:

{[
    {
        "id": "1",
        "subject" : "subject something",
        _links:[
            "email":"http://getemails.com/emaildetail/1"
        ]
    }
    {
        "id": "2",
        "subject" : "subject something else",
        _links:[
            "email":"http://getemails.com/emaildetail/2"
        ]
    }
]}

这在 table 上显示给用户。然后用户单击一行,客户端代码将从所选行的 _link 下获取电子邮件 url 并调用服务器。然后它将使用电子邮件详细信息更新页面(假设 SPA)。它还会将地址更新为 getemails.com/#email/1

现在如果用户将 getemails.com/#email/1 位置加入书签怎么办?由于客户端应用程序尚未加载电子邮件列表,它如何知道调用服务器以获取更多信息的 url 是 emaildetail/1?

你的问题是你不是真正的 RESTful。像 id 字段一样公开内部工作是你应该避免的陷阱。该 ID 仅在您的服务内部有意义,不应像您所做的那样在服务外部传播。

而是对您的每个资源使用自我 link,因此当您请求 "email" 关系时,您应该取回电子邮件资源(大概)

{
  "subject" : "subject something",
  "text" : "yadda yadda yadda...",
   "from" : "here@there.com",
   _links:{
       "self":"http://getemails.com/emaildetail/1"
   }
}

在您的 SPA 片段标识符中使用该自身 url。现在,当用户将完整的 url getemails.com/#http://getemails.com/emaildetail/1(使用一些 URL 编码)作为书签时,您的应用程序将知道要检索和呈现什么资源。