在创建自定义的媒体类型的超媒体链接(Creating hypermedia links in a c

2019-08-01 03:17发布

目前我正在创造一个RESTful API一组自定义的媒体类型(例如,应用/ vnd.mycompany.foo + XML),我试图找出的曝光超媒体链接的两种不同方式的利弊。

如果我先考虑一下其他的媒体类型可能做的,开始是HTML的最佳场所。 HTML允许我创建链接,如:

<image src="http://example.com/image.gif"/>
<a href="http://example.com/page.html"/>
<form action="http://example.com/page.html"/>
<link rel="stylesheet" type="text/css" href="theme.css" />

这里有趣的是,在某些情况下,有一个URL属性,再有就是通用的链接标签,使用rel属性来定义的关系,一些特定的标记。

在AtomPub的,也有资源链接在一起的几种方式

<collection href="http://example.org/blog/main" >
         <atom:title>My Blog Entries</atom:title>
         <categories href="http://example.com/cats/forMain.cats" />
</collection>

<atom:category scheme="http://example.org/extra-cats/" term="joke" />
<atom:entry>
   <link rel="edit" href="http://example.org/edit/first-post.atom"/>
</atom:entry>

那我问的问题是,当它让使用link元素有关系更有意义,并执行时,它更有意义的属性添加到现有元素。

例如,通过AtomPub链接可能已经完成

<collection>
      <link rel="source" href="http://example.org/blog/main"/>
         <atom:title>My Blog Entries</atom:title>
         <categories>
                <link rel="source" href="http://example.com/cats/forMain.cats"/>
         </categories>
</collection>

<atom:category term="joke">
     <link rel="scheme" href="http://example.org/extra-cats/"/>
<atom:category>
<atom:entry edit="http://example.org/edit/first-post.atom"/>

由于频繁的情况,以书面形式这个问题,答案现在似乎是显而易见的。 必需的链接被暴露为属性和可选的人的要素。 不过,我会在听到他们是怎么想的链接应该代表别人的意见很感兴趣。

Answer 1:

我喜欢关于XHTML 2的是, 每一个元素可以有一个链接 。

为什么不利用XLink的 ,能够同样funcitonality? 这样的话,没有必要选择。



Answer 2:

我相信,在语义上你的两个原子的例子是等价的。 有在Atom spec这里没有关系的链路被认为是默认链接少数地方(无论他们称之为是“自我”或“来源”我不记得了)。 我个人喜欢第二AtomPub的实例最好的,因为在一个Atom条目的链接元件(这是与原子通常处理时最常用的物体)定义与关系链接的元件,并且使用类别,收集,和工作区中的相同的模式元素意味着它更容易解析W / O需要知道很多特殊条件。

我有点忽略第一个HTML例子,因为原始的HTML从来没有真正用于机器通信的方式Atom是,并为此(IMO)语义理解HTML是比较困难和水域下降到了很多具体的规则来处理每一个不同类型的标签。



Answer 3:

那是一个有趣的问题。 从另一个角度来看它是区分链接到链接到相关资源的“信息”链接,客户端可能(也可能不会)要遵循以获得更多的信息(如<categories>中的AtomPub元素)。

在另一方面是“明确”协议的链接,即“指南”通过的状态变化的序列中的客户端(例如发布/编辑/删除AtomPub的,或订单/审查的情况下/支付购物系统)的资源组成的实际协议(像的<link rel="edit">

在星巴克的文章中,作者通过扩展定义的状态变化(假设)架构的整体思路。 他们使用的是<next rel="schema url" uri="uri for next resource state">而非Atom的<link rel="..." href="...">但总的想法是一样的。

当然,人们可以说,下面的任何链接代表了客户的状态变化。 但我认为这种区分是有意义的。



文章来源: Creating hypermedia links in a custom media-type