В настоящее время я создаю набор настраиваемых типов носителей для RESTful api (например, application/vnd.mycompany.foo + xml), и я пытаюсь определить плюсы и минусы двух разных способов разоблачения гипермедийных ссылок.
Если я сначала рассмотрю, какие другие типы медиа, вероятно, лучшее место для начала, это HTML. Html позволяет мне создавать такие ссылки, как:
<image src="http://example.com/image.gif"/>
<a href="#" onclick="location.href='http://example.com/page.html'; return false;"/>
<form action="http://example.com/page.html"/>
<link rel="stylesheet" type="text/css" href="theme.css" />
Интересно, что в некоторых случаях есть определенные теги, которые имеют атрибут url, а затем есть общий тег ссылки, который использует атрибут rel для определения отношения.
В AtomPub существует также несколько способов объединения ресурсов
<collection href="#" onclick="location.href='http://example.org/blog/main'; return false;" >
<atom:title>My Blog Entries</atom:title>
<categories href="#" onclick="location.href='http://example.com/cats/forMain.cats'; return false;" />
</collection>
<atom:category scheme="http://example.org/extra-cats/" term="joke" />
<atom:entry>
<link rel="edit" href="#" onclick="location.href='http://example.org/edit/first-post.atom'; return false;"/>
</atom:entry>
Вопрос, который я задаю, когда имеет смысл использовать элемент ссылки с отношением, и когда имеет смысл добавить атрибут к существующему элементу.
например. ссылки AtomPub могли быть выполнены
<collection>
<link rel="source" href="#" onclick="location.href='http://example.org/blog/main'; return false;"/>
<atom:title>My Blog Entries</atom:title>
<categories>
<link rel="source" href="#" onclick="location.href='http://example.com/cats/forMain.cats'; return false;"/>
</categories>
</collection>
<atom:category term="joke">
<link rel="scheme" href="#" onclick="location.href='http://example.org/extra-cats/'; return false;"/>
<atom:category>
<atom:entry edit="http://example.org/edit/first-post.atom"/>
Как это часто бывает, при написании этого вопроса ответ кажется теперь очевидным. Необходимые ссылки отображаются как атрибуты, а необязательные - как элементы. Тем не менее, мне было бы очень интересно услышать мнение других людей о том, как они думают, что ссылки должны быть представлены.