当前位置: 首页 > 知识库问答 >
问题:

REST超媒体API-从无状态客户端导航

毛峻
2023-03-14
[ { "name": "Apple", "url": ".../fruits/15" } ]
<a href="?">Apple</a>

那么问题是,在加载水果详细信息页面时,没有当前上下文的客户机如何决定要获取的API URL?

/my/frontend/stuff/fruits/{?}

现在怎么办:不?

首先想到的一个解决方案是在集合响应中有一个'item'URL模板,并使用其中的命名参数来构造页面URL。然后,详细信息页面将查询API以恢复相同的“Item”URL,并植入它传递的参数。这似乎并不理想,但它确实实现了期望的解耦。

提前谢了。

共有1个答案

魏君博
2023-03-14

web浏览器是许多用户最熟悉的无状态客户端。您所要求的被称为URI模板,并由各种超媒体格式支持。例如,在HTML中:

<form action="/api/fruits" method="GET">
  <input type="number" name="id" value="1" min="1">
  <button type="submit">Get Fruit</button>
<form>

当然,提交时将生成对URI/api/fruits?id=1的GET请求。

其他超媒体格式(如HAL)允许在URI中的任何地方进行模板化,并且比HTML更适合于web应用程序。您需要研究您首选的超媒体表示格式所支持的模板机制,或者切换到支持您所需要的格式。

<a href="/api/fruits/1/">Apple</a>
<a href="/api/fruits/2/">Banana</a>
<a href="/api/fruits/3/">Citrus</a>
...
<a href="/api/fruits/?page=2" rel="next">Page 2</a>
 类似资料:
  • rest客户端从不超时。在多个请求之后,quarkus停止服务新的请求。也尝试了.../mp-rest/connecttimeout=5000.../mp-rest/readtimeout=5000但没有成功。 界面看起来像

  • 我有一个带有ui路由器的AngularJS应用程序,它使用带有超媒体的REST API。一般的想法是让API为其各种调用生成URL,并防止客户机自己构造URL。 还有别的想法吗? 除非我在这方面非常错误,否则我不是在寻找模板化的解决方案,即API返回一个url模板的解决方案,该url模板需要客户机注入参数。关键在于url已经填充了数据,因为有些url比上面提供的示例要复杂得多。

  • 我正在尝试为超媒体API实现一个spring android客户端,并以HAL格式响应。Spring HATEOAS参考文档描述了客户端服务遍历的实现,其灵感来自Traverson JavaScript库。我这样做: 但我在创建新的Traverson对象时遇到以下错误: 有人知道怎么修吗? 是否有其他/更好的方式支持android中的HAL响应?

  • 我现在正在读《实践中的Rest》一书。我无法理解以下术语超媒体,超媒体格式,超媒体控件,域应用协议。作者建议需要特定领域的超媒体格式。我很难理解这些。我在谷歌上搜索了这些术语,但没有找到正确的答案。谁能解释一下这些术语,以及为什么我们需要特定于领域的超媒体格式而不是应用程序/XML?

  • 有时你可能需要引导客户端 Channel 从另一个 Channel。这可能发生,如果您正在编写一个代理或从其他系统需要检索数据。后一种情况是常见的,因为许多 Netty 的应用程序集成现有系统,例如 web 服务或数据库。 你当然可以创建一个新的 Bootstrap 并使用它如9.2.1节所述,这个解决方案不一定有效。至少,你需要创建另一个 EventLoop 给新客户端 Channel 的,并且