我想试试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?
你的问题是你没有真正做到休息。暴露内部工作原理(例如 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 编码)添加书签时,您的应用程序将知道要检索和呈现哪些资源。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |