HATEOAS书签URL访问

set*_*thu 6 hateoas

我想试试HATEOAS.

让我们通过一个例子来解决.客户端将浏览器加载到getemails.com.为简单起见,我们假设调用getemails.com,点击服务器并返回电子邮件列表.每封电子邮件都有一个链接,允许用户获取更多详细信息.像这样的东西:

{[
    {
        "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"
        ]
    }
]}
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*our 3

你的问题是你没有真正做到休息。暴露内部工作原理(例如 id 字段)是您应该避免的陷阱。该 ID 仅在您的服务内部有意义,不应该像您所做的那样在服务外部传播。

相反,使用指向每个资源的自链接,因此当您请求“电子邮件”关系时,您应该会得到一个电子邮件资源(大概)

{
  "subject" : "subject something",
  "text" : "yadda yadda yadda...",
   "from" : "here@there.com",
   _links:{
       "self":"http://getemails.com/emaildetail/1"
   }
}
Run Code Online (Sandbox Code Playgroud)

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