Criando links hipermídia em um tipo de mídia personalizado
Atualmente, estou criando um conjunto de tipos de mídia personalizados para uma API RESTful (por exemplo, application / vnd.mycompany.foo + xml) e estou tentando identificar os prós e contras de duas maneiras diferentes de expor links hipermídia.
Se eu considerar primeiro o que outros tipos de mídia provavelmente fazem, o melhor lugar para começar é o HTML. Html me permite criar links como:
<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" />
O interessante aqui é que, em alguns casos, há algumas tags específicas que possuem um atributo url e, em seguida, há a tag de link genérico que usa o atributo rel para definir o relacionamento.
No AtomPub, há também algumas maneiras pelas quais os recursos são vinculados
<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>
A pergunta que estou fazendo é quando faz mais sentido usar um elemento de link com um relacionamento e quando faz mais sentido adicionar um atributo a um elemento existente.
por exemplo. os links AtomPub poderiam ter sido feitos
<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"/>
Como é frequentemente o caso, ao escrever esta pergunta, a resposta parece agora óbvia. Os links necessários são expostos como atributos e os opcionais como elementos. No entanto, eu estaria muito interessado em ouvir as opiniões de outras pessoas sobre como eles acham que os links devem ser representados.