什么是超媒体、超媒体控件、超媒体格式

what is hypermedia , hypermedia controls, hypermedia formats

我正在阅读 "Rest in practice" 本书。我无法理解以下术语 Hypermedia 、超媒体格式、超媒体控件、域应用程序协议。作者建议需要特定领域的超媒体格式。我很难理解那些。我用谷歌搜索了这些条款,但找不到正确的答案。谁能解释这些术语以及为什么我们需要特定领域的超媒体格式而不是 application/xml?

对此有很多困惑,因为大多数自称为 REST 的应用程序不使用超媒体,根本就不是 REST。

超媒体 是HTML 以外内容的超文本的概括。你可以说超文本是超媒体的一个子集。超媒体可以是浏览器中的 HTML,包含所有 link、按钮和呈现的所有内容,以便您可以浏览网站,也可以是 XML 或 JSON 文档旨在由自动客户端解析,该客户端也将遵循 links 和操作,就像人类在浏览器中所做的那样,单击呈现的 links 和按钮。

HATEOAS意味着客户端与REST应用程序的交互必须由超媒体驱动,或者简单地说,客户端应该获取它需要的每个资源的所有URI在资源本身的表示中遵循 link,而不是像许多 API 那样依赖 out-of-band 信息,例如文档中给出的 URI 模式。

这比听起来简单。它只是意味着客户端和 REST 应用程序之间的交互应该完全像人类浏览网站一样。以 Stack Overflow 本身为例。有用户、问题和答案。当您想查看您的问题列表时,您不需要访问文档网站,获取用于列出您的问题的 URI 模板,用您的用户 ID 填充占位符并将其粘贴到浏览器上。您只需单击一个 link 到另一个描述为问题列表的文档,您甚至不关心确切的 URI 是什么。这就是 HATEOAS 在实践中的意思。

超媒体格式t 定义了客户端和服务器之间的契约。它是您在超媒体应用程序中用于特定资源表示的 hyperlink-enabled 数据格式。例如,如果您有一个用户资源,您必须记录客户应该从该资源的表示中得到什么,以及如何解析该表示以提取信息。在与您的 API 交互之前,您的客户需要实施一个解析器来提取信息,他们需要知道资源具有哪些属性及其含义,他们应该期望什么 link 关系以及什么状态转换可用等

超媒体控件 是超媒体格式中协议方法和link 关系的组合,它告诉客户端哪些状态转换可用以及如何执行它们。例如,一个问题可能有一个 rel=post_answer link,它期望一个答案表示作为 POST 方法的有效负载,并将创建一个与之相关的新答案资源。

定义了一组超媒体格式后,您需要一个特定领域media-type来确定特定交互所使用的超媒体格式。像 application/xml 这样的通用 media-type 只告诉客户端如何解析数据格式,它没有说明解析器提取的信息。例如,假设一个文档具有 media-type application/vnd.mycompany.user.v1+xml,客户端知道它是 XML 格式的用户资源的 1.0 版表示。如果您通过添加或删除属性、links 等更改资源,您可以更改版本号并且客户端不会中断,因为他们可以使用 Accept header。您还可以为同一资源提供多种格式,例如 XML 或 JSON,甚至 HTML.

中的漂亮 human-readable 表示

当您将所有内容打包在一起时——底层协议 HTTP;由超媒体格式和媒体类型定义的契约——你有你的域应用协议,它是你的应用程序通告的整套资源和可用状态转换。

不用说,您在 Internet 上找到的 so-called REST API 中有 99% 并不遵循所有这些。它们中的大多数只是遵循一些 REST 约束的 HTTP APIs,有时是因为它们并不真正需要所有这些,有时是因为开发人员认为 REST 就是这样。

超媒体 = 客户端和服务器以某种统一表示形式进行交流的事实,例如:超链接。


HyperMedia Control = 需要对其进行操作的资源。例如,产品由超链接 domain/product/001 表示 然后可以通过超媒体控件domain/product/001/edit 和domain/product/001/delete 对资源进行操作(编辑和删除)。


最大的区别在于方法。程序系统首先将操作编写为顺序代码(java 等)中的状态转换,然后将交互制造为超链接以交付 HATEOAS。

但是作为交互的系统直接对交互进行建模,因此直接提供超链接。示例示例 http://www.masterkube.com/hateoas_technology.html 在这里。

希望这对您有所帮助。