Создание гиперссылок в пользовательском медиа-типе
В настоящее время я создаю набор пользовательских типов мультимедиа для API RESTful (например, application / 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, а затем есть общий тег link, который использует атрибут 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"/>
Как это часто бывает, при написании этого вопроса ответ кажется очевидным. Обязательные ссылки отображаются как атрибуты, а необязательные - как элементы. Однако мне было бы очень интересно услышать мнение других людей о том, как, по их мнению, должны быть представлены ссылки.