如何从前端处理 Hateoas?
how should Hateoas be handled from frontend?
这个问题一直在我脑海中盘旋。假设我们已经在不同的层上构建了后端和前端的项目。因此,我们希望从前端获得一个客户,其格式为 hal+json
:
GET /customers/1 HTTP/1.1
Accept: application/hal+json
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} {
"rel": "transactions",
"href": "http://localhost:8080/customer/1/transactions"
}]
}
然后,我想从前端获取所有客户交易。我的问题是:我应该如何获得 url?应该来自回应吗?还是我应该在内部构建它?
如果我们选择第一个选项,我认为在我们得到我们想要的那个之前迭代所有 link 可能不会很优雅。此外,可能会出现我们没有我们想要执行的请求的 link 的情况。
如果我们选择第二个选项,如果我们实际上没有 ID,我不明白如何构建 url。如果 hateoas 将 id 替换为 links 而我在正文中不再有对象引用,我该如何创建新的客户交易?
我认为也许服务应该同时支持 application/hal+json
(面向用户)和 application/json
(面向客户),但我不认为这通常是如何完成的。
你怎么看?
HATEOAS(超媒体作为应用程序状态引擎)是 REST 应用程序架构的约束。例如,您可以查看 Spring HATEOAS 文档:
https://spring.io/understanding/HATEOAS
关于使用 Spring 和 AngularJS 的另一个 link 可以在这里找到:
AngularJS and Spring HATEOAS tutorial
这个似乎足够好,可以处理您的用例。
此致,安德烈
绝对是第一个选项。即,由于 HATEOAS 是 Richardson Maturity Model 的最后阶段,客户应遵循提供的链接,而不是自己构建 URL:
The point of hypermedia controls is that they tell us what we can do
next, and the URI of the resource we need to manipulate to do it.
Rather than us having to know where to post our appointment request,
the hypermedia controls in the response tell us how to do it.
这有什么好处?我至少能想到两个:
- REST 的简单升级API - 服务器端开发人员可以更改资源的 URI,而不会破坏客户端代码,因为客户端只需点击提供的链接;此外,服务器端开发人员可以轻松添加新链接
- 健壮性 - 通过跟踪链接,客户端代码永远不会尝试访问损坏的链接、拼写错误的链接等。
Q: Also, there could happen the situation where we don't have the link of the request we want to do?
由 API 设计者负责确保提供所有必需的链接。前端开发人员不必为此担心。
另请参阅:
这个问题一直在我脑海中盘旋。假设我们已经在不同的层上构建了后端和前端的项目。因此,我们希望从前端获得一个客户,其格式为 hal+json
:
GET /customers/1 HTTP/1.1
Accept: application/hal+json
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} {
"rel": "transactions",
"href": "http://localhost:8080/customer/1/transactions"
}]
}
然后,我想从前端获取所有客户交易。我的问题是:我应该如何获得 url?应该来自回应吗?还是我应该在内部构建它?
如果我们选择第一个选项,我认为在我们得到我们想要的那个之前迭代所有 link 可能不会很优雅。此外,可能会出现我们没有我们想要执行的请求的 link 的情况。
如果我们选择第二个选项,如果我们实际上没有 ID,我不明白如何构建 url。如果 hateoas 将 id 替换为 links 而我在正文中不再有对象引用,我该如何创建新的客户交易?
我认为也许服务应该同时支持 application/hal+json
(面向用户)和 application/json
(面向客户),但我不认为这通常是如何完成的。
你怎么看?
HATEOAS(超媒体作为应用程序状态引擎)是 REST 应用程序架构的约束。例如,您可以查看 Spring HATEOAS 文档:
https://spring.io/understanding/HATEOAS
关于使用 Spring 和 AngularJS 的另一个 link 可以在这里找到:
AngularJS and Spring HATEOAS tutorial
这个似乎足够好,可以处理您的用例。
此致,安德烈
绝对是第一个选项。即,由于 HATEOAS 是 Richardson Maturity Model 的最后阶段,客户应遵循提供的链接,而不是自己构建 URL:
The point of hypermedia controls is that they tell us what we can do next, and the URI of the resource we need to manipulate to do it. Rather than us having to know where to post our appointment request, the hypermedia controls in the response tell us how to do it.
这有什么好处?我至少能想到两个:
- REST 的简单升级API - 服务器端开发人员可以更改资源的 URI,而不会破坏客户端代码,因为客户端只需点击提供的链接;此外,服务器端开发人员可以轻松添加新链接
- 健壮性 - 通过跟踪链接,客户端代码永远不会尝试访问损坏的链接、拼写错误的链接等。
Q: Also, there could happen the situation where we don't have the link of the request we want to do?
由 API 设计者负责确保提供所有必需的链接。前端开发人员不必为此担心。
另请参阅: