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 编码)作为书签时,您的应用程序将知道要检索和呈现什么资源。
我正在努力了解 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 编码)作为书签时,您的应用程序将知道要检索和呈现什么资源。