カスタムメディア型でハイパーメディアリンクの作成
-
13-09-2019 - |
質問
私は現在、RESTfulなAPIのカスタムメディアタイプのセットを作成しています(例:アプリケーション/ vnd.mycompany.foo + XML)と私は、ハイパーメディアリンクを暴露する2つの異なる方法の長所と短所を特定しようとしています。
私が最初に他のメディアタイプを開始するために、おそらく最高の場所を何考える場合は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>
私が求めています質問は、それが関係してリンク要素を使用する方が理にかなってない、とするとき、それは既存の要素に属性を追加する方が理にかなってないときである。
例えば。 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"/>
しばしばそうであるように、この質問を書くことで、答えは明白であることを今ようです。必要なリンクは要素などの属性とオプションのものとして公開されています。しかし、私は彼らがリンクが表現されるべきだと思うかについて、他の人の意見を聞くことに非常に興味があると思います。
他のヒント
私は、意味的にあなたの2つのアトムの例は同等であると信じています。関係ないとのリンクがデフォルトのリンク(彼らが呼ぶかどうかは、「自己」または「ソース」私は覚えていないです)と考えられているAtomの仕様では、いくつかの場所があります。 (一般的にはアトムを扱うときに最も使用されるオブジェクトである)Atomエントリ内のリンク要素はリンク関係を持つ要素、およびカテゴリで同じスキーマを使用して、収集、およびワークスペースを画定するため、個人的に私は、第二のAtomPub例に最高のが好き要素は、W / O特殊な条件の多くを知る必要の解析が容易になります意味します。
元のHTMLが実際にアトムがある方法で、マシン通信のために意図されていませんでしたので、私は初めてのHTMLの例を無視し、そのための(IMO)意味的に理解HTMLは、すべてを処理するために特定のルールの多くまでより困難と海域でありますタグの異なる種類ます。
興味深い質問厥。それを見する一つの方法は、になります
関連リソースへのリンクを「情報」のリンクへのリンクを区別、
クライアントは(またはしない場合があります)より多くの情報を取得するためにフォローしたいこと
(AtomPubの中<categories>
要素等)。
一方は、プロトコルを「定義」リンクであります
すなわち、状態変化のシーケンスを介してクライアントを「導く」こと
(例えばのAtomPubの場合は/編集/削除を公開、または注文/レビュー/ショッピングシステムで支払う)実際のプロトコル(などを構成するリソースの
<link rel="edit">
)。
スターバックスの記事のでは、著者がで全体的なアイデアを拡張します
状態の変化のために(仮想的)スキーマを定義します。彼らは、アトムの<next
rel="schema url" uri="uri for next resource state">
の代わりを使用しています
<link rel="..." href="...">
が、一般的な考え方は同じです。
もちろん、一つはのいずれかののリンクをたどることは状態を表していると主張している可能性があり クライアントのために変更します。しかし、私はこの区別が理にかなっていると考えています。