Pergunta

Qual é o benefício de conexão, conforme definido pela Oriented Architecture recursos (ROA)? A maneira que eu entendo, o ponto crucial de conexão é a capacidade de rastrear todo o estado de aplicação usando apenas os URIs de raiz.

Mas quão útil é que realmente?

Por exemplo, imagine que HTTP GET http://example.com/users/joe retornos um link para http://examples.com/uses/joe/bookmarks .

A menos que você está escrevendo um rastreador web mudo (e mesmo assim eu me pergunto), você ainda precisa ensinar ao cliente o que cada meio de ligação em tempo de compilação. Ou seja, o cliente precisa saber que o "bookmarks URI" retorna um URI aos recursos marcador e, em seguida, passar o controle sobre a especiais algoritmos Bookmark-manipulação. Você não pode simplesmente passar ligações cegamente a algum método cliente geral. Desde que você precisa esta lógica de qualquer maneira:

  1. Qual é a diferença entre o cliente descobrir o URI em tempo de execução contra a fornecê-las em tempo de compilação (fazendo http://example.com/users/bookmarks uma raiz URI)?

  2. Por que está ligando usando http://example.com/users/joe/bookmarks/2 preferiu id="2"?

A única vantagem que posso pensar é a capacidade de alterar o caminho de URIs não raiz ao longo do tempo, mas esta quebra em cache ligações por isso não é realmente de qualquer maneira desejável. O que eu estou ausente?

Foi útil?

Solução

Você está certo que a mudança de Uris não é desejável, mas acontece e usando Uris completas em vez de construí-los torna a mudança mais fácil de lidar.

Um outro benefício é que seu aplicativo cliente pode facilmente recuperar os recursos a partir de múltiplos hosts. Se você permitiu que seu cliente para construir o URI o cliente precisa saber em qual host certos recursos residem. Este não é um grande negócio quando todos os recursos vivem em um único host, mas torna-se mais complicado quando você está agregando dados de múltiplos hosts.

Meu último pensamento é que talvez você está simplificando a noção de conexão, olhando para ela como uma rede estática de links. Claro que as necessidades do cliente para saber sobre a possível existência de certas ligações dentro de um recurso, mas ele não necessariamente precisa saber exatamente quais são as consequências de seguir o link.

Deixe-me tentar um dar um exemplo: um usuário é colocar uma ordem para alguns itens e eles estão prontos para apresentar o seu carrinho. O link para enviar podem realmente ir para dois lugares diferentes dependendo se o pedido será entregue localmente ou internacionalmente. Talvez encomendas superiores a uma certa necessidade valor de passar por uma etapa extra. O cliente só sabe que tem que seguir o link enviar, mas não ter compilado no conhecimento de onde ir em seguida. Claro que você poderia construir um comum tipo "próximo passo" de recursos para que o cliente poderia ter esse conhecimento de forma explícita, mas por ter o servidor entregar o link dinamicamente você introduzir um acoplamento muito menos cliente-servidor.

Eu acho que um dos links em recursos como espaços reservados para o que o usuário pode optar por fazer. Quem vai fazer o trabalho e como isso será feito é determinado pelo que uri os adidos de servidores para essa ligação.

Outras dicas

É mais fácil para estender, e você pode escrever pequenas aplicações e scripts para o trabalho, juntamente com a aplicação do núcleo com bastante facilidade.

Adicionado: Bem o ponto inteiro começa com a idéia de que você não especificar em tempo de compilação como converter URIs para uids de uma forma codificada, em vez disso você pode usar dicionários ou analisar para fazer isso, dando-lhe um muito mais sistema flexível.

Depois, mais tarde dizer que alguém decide mudar a sintaxe URI, essa pessoa poderia escrever um pequeno script que traduz URIs sem nunca tocar o seu núcleo de Aplicação. Outro benefício é se seus URIs são lógicas outros usuários, mesmo dentro de um cenário corporativo, pode facilmente escrever Mash-ups de fazer uso de seu sistema, sem tocar em seu App original ou mesmo recompilar-lo.

Claro que lado do balcão para todo o argumento é que ele vai demorar mais tempo para implementar um sistema baseado URI ao longo de um sistema de UID simples. Mas se o seu aplicativo será usado por outras pessoas de uma forma regular, que o investimento de tempo inicial será muito retorno (que poderia ser dito para ter uma boa extensibilidade ROI base).

Adicionado: E outro ponto que é um mater de gostos, até certo ponto é o próprio URI será um nome melhor, porque transmite uma lógica e definido o que significa

Vou acrescentar a minha própria resposta:

  1. É muito mais fácil de seguir URIs fornecido pelo servidor do que construí-las sozinho. Isto é especialmente verdadeiro como as relações de recursos tornar-se demasiado complexo para ser expressa em regras simples. É mais fácil de codificar a lógica uma vez no servidor de re-implementá-lo em numerosos clientes.
  2. A relação entre os recursos podem mudar mesmo se URIs de recursos individuais permanecem inalterados. Por exemplo, imagine Google Maps índices seus mosaicos de mapas de 0 a 100, contando a partir do canto superior esquerdo para o canto inferior direito da tela. Se o Google Maps foram para alterar a escala de suas telhas, clientes que calculam índices de azulejos relativos iria quebrar.
  3. IDs personalizados identificar um recurso. URIs ir um passo além, identificando como recuperar a representação de recursos. Isto simplifica a lógica de clientes somente leitura, tais como web-crawlers ou clientes que baixar opaca recursos tais como arquivos de vídeo ou áudio.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top