vis*_*hnu 32 rest controls hateoas hypermedia
我现在正在阅读"实践中的休息"一书.我无法理解以下术语超媒体,超媒体格式,超媒体控件,域应用程序协议.作者建议需要特定于域的超媒体格式.我很难理解那些.我搜索了这些条款,但无法找到正确的答案.任何人都可以解释这些术语以及为什么我们需要特定于域的超媒体格式而不是application/xml?
Ped*_*eck 74
对此有很多困惑,因为大多数自称为REST的应用程序不使用超媒体而根本不是REST.
超媒体是除HTML以外的内容的超文本概括.你可以说超文本是超媒体的一个子集.超媒体可以是浏览器中的HTML,包含所有链接,按钮和呈现的所有内容,以便您可以浏览网站,或者它可以是XML或JSON文档,旨在由自动化客户端进行解析,该客户端也将遵循链接和操作,如人类会使用浏览器,点击渲染的链接和按钮.
HATEOAS意味着客户端与REST应用程序的交互必须由超媒体驱动,或者简单地说,客户端应该通过跟踪资源本身表示中的链接来获取所需的每个资源的所有URI,而不是依赖于 -像许多API那样,带内信息,如文档中给出的URI模式.
这比听起来简单.它只是意味着客户端和REST应用程序之间的交互应该与浏览网站的人类完全相同.以Stack Overflow为例.有用户,问题和答案.当您想要查看问题列表时,不要访问文档网站,获取用于列出问题的URI模板,使用您的用户ID填充占位符并将其粘贴到您的棕色搜索器上.您只需单击指向问题列表的另一个文档的链接,您甚至不关心确切的URI是什么.这就是HATEOAS在实践中的意义.
一个超媒体备考 T定义客户端和服务器之间的契约.它是用于超媒体应用程序中资源的特定表示的启用超链接的数据格式.例如,如果您有用户资源,则必须记录客户端应该从该资源的表示中获得什么,以及如何解析表示以提取信息.在与API交互之前,您的客户需要实现解析器来提取信息,他们需要知道资源具有哪些属性以及它们的含义,它们应该期望的链接关系以及可用的状态转换等.
超媒体控件是超媒体格式中的协议方法和链接关系的组合,告诉客户端哪些状态转换可用以及如何执行它们.例如,一个Question可能有一个rel=post_answer
链接,要求Answer表示作为POST方法的有效负载,并将创建一个与之相关的新Answer节点资源.
一旦定义了一组超媒体格式,您就需要特定于域的媒体类型来确定用于特定交互的超媒体格式.像通用媒体类型application/xml
只告诉客户端如何解析数据格式,它没有说明解析器提取的信息.例如,假设文档具有媒体类型application/vnd.mycompany.user.v1+xml
,客户端知道它是XML格式的用户资源的1.0版表示.如果通过添加或删除属性,链接等来更改资源,则可以更改版本号,并且客户端不会中断,因为他们可以使用Accept
标头请求实现它们的版本.您还可以为同一资源(如XML或JSON)提供多种格式,甚至可以在HTML中提供相当人类可读的表示形式.
将所有内容组合在一起时 - 底层协议HTTP; 由超媒体格式和媒体类型定义的合同 - 您拥有域应用程序协议,它是应用程序通告的整组资源和可用状态转换.
毋庸置疑,在互联网上找到的99%的所谓REST API并不能完全遵循这一切.其中大多数只是遵循一些REST约束的HTTP API,有时因为它们并不真正需要所有这些,有时因为这是开发人员认为REST的真正含义.
小智 5
超媒体 = 客户端和服务器以某种统一的表示形式进行对话的事实,例如:超链接。
超媒体控制 = 需要对资源进行操作。例如,产品由超链接域/产品/001 表示,然后可以通过超媒体控制域/产品/001/编辑和域/产品/001/删除来操作(编辑和删除)资源。
最大的区别在于方法。程序系统首先将操作编写为顺序代码(java 等)中的状态转换,然后将交互制作为超链接以传递 HATEOAS。
但是作为交互的系统直接对交互进行建模,因此直接提供超链接。一个示例是http://www.masterkube.com/hateoas_technology.html在这里。
希望这可以帮助。
归档时间: |
|
查看次数: |
15615 次 |
最近记录: |