如何(甚至想要)在需要提供应用程序状态链接的地方使用 HATEOAS?

How to (is it even practical to want to) use HATEOAS where you need to provide links to application state?

我很高兴第一次尝试 HATEOAS,使用非常适合的 Web 应用程序,因为用户可以在 "nodes" 的树中导航。

每次用户点击 link 一个节点,服务器 returns 那个节点的数据和 server URL 获取相关注释的数据。

HATEOAS 响应正文:

    {"description":"A good node!",
     "category":"IDEAL",
     "placement":"Q16","
     "_links":{"self":{"href":"http://localhost:8081/position?id=393"}},
     "_embedded":{
       "parent":
       {"placement":"root","category":"IDEAL","_links":{"self":{"href":"http://localhost:8081/position?id=384"}}},
      "next_nodes":[
           {"placement":"Q13","category":"GOOD","_links":{"self":{"href":"http://localhost:8081/position?id=362"}}}
           {"placement":"J10","category":"BAD","_links":{"self":{"href":"http://localhost:8081/position?id=365"}}}
       ]}}

当单页web客户端显示该节点的数据及其与其他节点的关系时,用户点击表示遍历到一个新节点,web客户端从接下来提供的HATEOAS中获取数据服务器 URL.

这实现了 HATEOAS 的承诺 - 状态在响应主​​体中,下一个状态的服务器 URLs 也是如此,因此 Web 应用程序客户端永远不需要知道第一个根以外的任何内容URL.

然而,当(显然)用户说 "I want a URL (a client URL) for this node, so I can return to it".

时,这(显然)就会崩溃

对于使用 HATEOAS 的 Web 应用程序客户端,"current node" 唯一可用的表示是“_self”link。这实际上是不透明的。

那么如何将其嵌入网络客户端 route/link 以便用户保存和 return 到?

在我上图的应用程序中,我发现自己也被迫与 Web 客户端共享位置 ID,然后 Web 客户端被迫为 那个位置 [=33= 重建服务器 URL ].

这是HATEOAS的预期效果吗?从表面上看似乎几乎完全打破了它,但我肯定缺少一些基本的东西?

我过去使用 url 解决了这个问题,例如:

https://webapplication.example.org/#http://api.example.org/some/resource