Pergunta

Atualmente, estou criando um conjunto de tipos de mídia personalizados para uma API RESTful (por exemplo, application / vnd.mycompany.foo + xml) e eu estou tentando identificar os prós e contras de duas maneiras diferentes de expor elos hipermídia.

Se eu considerar em primeiro lugar o que outros tipos de mídia fazer provavelmente o melhor lugar para começar é HTML. Html me permite criar ligações, tais 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 tenham um atributo url e, em seguida, há a tag link genérico que usando o atributo rel para definir a relação.

Em AtomPub, também existem algumas maneiras que os recursos são ligados entre si

<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 eu estou pedindo é quando faz mais sentido usar um elemento de ligação com um relacionamento, e quando é que faz mais sentido para adicionar um atributo para um elemento existente.

por exemplo. as ligações AtomPub poderia ter sido feito

<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, por escrito, a esta pergunta, a resposta parece agora ser óbvio. Os links necessários são expostos como atributos e os opcionais como elementos. No entanto, eu estaria muito interessado em ouvir opiniões de outras pessoas sobre como eles pensam ligações devem ser representados.

Foi útil?

Solução

O que eu gostei sobre XHTML 2 se que cada elemento pode ter um link .

Por que não alavancagem XLink para permitir que o mesmo funcitonality? Dessa forma, não há necessidade de escolher.

Outras dicas

Eu acredito semanticamente seus dois exemplos Atom são equivalentes. Existem alguns lugares na especificação Atom onde um link sem relação é considerado o link padrão (se chamam é "auto" ou "fonte" Eu não me lembro). Pessoalmente, como o segundo exemplo AtomPub o melhor, porque os elementos de ligação em uma entrada Atom (que é o objeto mais usado quando se lida com Atom em geral) define vincular elementos com relações, e usando o mesmo esquema na categoria, coleta e espaço de trabalho elementos significa que é mais fácil de analisar w / o a necessidade de saber um monte de condições especiais.

Eu meio que ignorar o primeiro exemplo HTML porque o HTML original nunca foi realmente destinado para a comunicação máquina na forma Atom é, e para esse fim (IMO) HTML semanticamente entendimento é mais difícil e águas para baixo para um monte de regras específicas para lidar com cada diferentes tipos de tag.

Isso é uma pergunta interessante. Uma maneira de olhar para ele seria ligações diferenciar em links "informativos" que apontam para recursos relacionados, que o cliente pode (ou não) quer seguir para obter mais informações (Como o elemento <categories> em AtomPub).

Por outro lado, são os links que "definem" o protocolo, isto é, que "guia" o cliente através da sequência de alterações de estado (Por exemplo, publicar / editar / excluir no caso de AtomPub, ou ordem / revisão / pay em um sistema de compras) de um recurso que compõem o protocolo real (como <link rel="edit">).

Na Starbucks artigo , os autores expandir toda a idéia por a definição de um esquema (hipotético) de mudanças de estado. Eles estão usando <next rel="schema url" uri="uri for next resource state"> vez de Atom <link rel="..." href="...">, mas a idéia geral é a mesma.

Claro, pode-se argumentar que, após qualquer link representa um estado mudar para o cliente. Mas eu acho que esta distinção faz sentido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top