什么是超媒体,超媒体控件,超媒体格式
Posted
技术标签:
【中文标题】什么是超媒体,超媒体控件,超媒体格式【英文标题】:what is hypermedia , hypermedia controls, hypermedia formats 【发布时间】:2015-06-17 13:23:33 【问题描述】:我目前正在阅读“实践中的休息”一书。我无法理解以下术语超媒体、超媒体格式、超媒体控件、域应用程序协议。作者建议需要特定领域的超媒体格式。我几乎无法理解那些。我用谷歌搜索了这些术语,但找不到正确的答案。谁能解释这些术语以及为什么我们需要特定领域的超媒体格式而不是 application/xml ?
【问题讨论】:
【参考方案1】:对此有很多困惑,因为大多数自称为 REST 的应用程序不使用超媒体,而且根本不是 REST。
超媒体是对 html 以外内容的超文本的概括。你可以说超文本是超媒体的一个子集。超媒体可以是浏览器中的 HTML,包含所有链接、按钮和呈现的所有内容,以便您可以浏览网站,或者它可以是旨在由自动客户端解析的 XML 或 JSON 文档,该客户端还将跟踪链接和操作,例如人类会使用浏览器,点击呈现的链接和按钮。
HATEOAS 意味着客户端与 REST 应用程序的交互必须由超媒体驱动,或者简单地说,客户端应该通过以下表示中的链接获取它所需的每个资源的所有 URI资源本身,而不是像许多 API 那样依赖带外信息,例如文档中给出的 URI 模式。
这比听起来简单。它只是意味着客户端和 REST 应用程序之间的交互应该与人类浏览网站完全一样。以 Stack Overflow 本身为例。有用户,问题和答案。当您想查看您的问题列表时,您无需访问文档网站,获取用于列出您的问题的 URI 模板,用您的用户 ID 填充占位符并将其粘贴到您的浏览器上。您只需单击另一个文档的链接,该文档描述为问题列表,您甚至都不关心确切的 URI 是什么。这就是 HATEOAS 在实践中的含义。
超媒体格式t 定义客户端和服务器之间的合同。它是您用于超媒体应用程序中资源的特定表示的启用超链接的数据格式。例如,如果您有一个 User 资源,您必须记录客户对该资源表示的确切期望以及如何解析表示以提取信息。在与您的 API 交互之前,您的客户端需要实现解析器来提取信息,他们需要知道资源具有哪些属性以及它们的含义、他们应该期望的链接关系以及可用的状态转换等。
超媒体控件是一种超媒体格式的协议方法和链接关系的组合,它告诉客户端哪些状态转换可用以及如何执行它们。例如,一个问题可能有一个rel=post_answer
链接,该链接需要一个答案表示作为 POST 方法的有效负载,并将创建一个与之相关的新答案资源。
定义了一组超媒体格式后,您需要一个特定于域的媒体类型来准确确定用于特定交互的超媒体格式。像application/xml
这样的通用媒体类型只告诉客户端如何解析数据格式,它没有说明解析器提取的信息。例如,假设一个文档具有媒体类型application/vnd.mycompany.user.v1+xml
,客户端知道它是 XML 格式的用户资源的 1.0 版表示。如果您通过添加或删除属性、链接等来更改资源,您可以更改版本号并且客户端不会中断,因为他们可以使用 Accept
标头请求它们实现的版本。您还可以为同一资源提供多种格式,例如 XML 或 JSON,甚至是 HTML 中非常易于人类阅读的表示形式。
当您将所有内容包装在一起时——底层协议 HTTP;由超媒体格式和媒体类型定义的契约——您拥有自己的域应用程序协议,它是您的应用程序所宣传的一整套资源和可用状态转换。
不用说,您在互联网上发现的 99% 的所谓 REST API 都没有遵循所有这些。它们中的大多数只是遵循一些 REST 约束的 HTTP API,有时是因为它们并不真正需要所有这些约束,有时是因为开发人员认为 REST 就是这样。
【讨论】:
那么 application/vnd.mycompany.user.v1+xml 如何向用户传达需要解析的信息? 它没有。描述application/vnd.mycompany.user.v1+xml
的文档确实如此。
如果应用程序仅在响应的位置标头中提供指向由 POST 创建的资源的链接,是否是 HATEOAS?还是超媒体一词仅包括正文中包含的链接?
@Marv 这取决于创建资源的客户端以外的客户端在创建后如何检索它。如果没有人愿意,那很好。如果他们将使用保存在其他地方的位置 URI,那很好。如果他们自己构建 URI,那就不是 HATEOAS。
“你在互联网上发现的 99% 的所谓 REST API 都没有遵循所有这些” 你从哪里得到这个百分比?您能否提供出处,以便我在出版物中引用它?【参考方案2】:
超媒体=客户端和服务器以某种统一的表示形式进行交谈的事实,例如:超链接。
超媒体控制 = 需要对资源进行操作。例如,一个产品由超链接域/product/001 表示 然后可以通过超媒体控制域/product/001/edit和domain/product/001/delete对资源进行操作(编辑和删除)。
最大的区别在于方法。程序系统首先将操作编写为顺序代码(java 等)中的状态转换,然后将交互作为超链接制造以提供 HATEOAS。
但是作为交互的系统直接模拟交互,因此直接提供超链接。一个示例示例是http://www.masterkube.com/hateoas_technology.html 在这里。
希望这会有所帮助。
【讨论】:
以上是关于什么是超媒体,超媒体控件,超媒体格式的主要内容,如果未能解决你的问题,请参考以下文章
超媒体是什么?Hypermedia(一种采用非线性网状结构对块状多媒体信息(包括文本图像视频等)进行组织和管理的技术)