Pergunta

Uma das muitas coisas que foram falta do meu raspador serviço que eu criadas na semana passada são URLs bonitas. Neste momento, o parâmetro do usuário está sendo passado para o script com ? U = , que é um sintoma de um hack preguiçoso (que o script é reconhecidamente). No entanto, eu estive pensando sobre refazê-lo e eu gostaria de obter algum feedback sobre as opções disponíveis. Neste momento, existem duas páginas, atualização e gráfico, que fornecem informações para o usuário. Aqui estão as duas possibilidades que eu vim acima com. "1234" é o número de identificação do usuário. Por razões técnicas o nome de usuário, infelizmente, não pode ser usado:

  • http: // / update / 1234
  • http: // / gráfico / 1234

ou

  • http: // / 1234 / update
  • http: // / 1234 / gráfico

Opção # 1, conceitualmente, está chamando update com o ID do usuário. Opção # 2 está fornecendo um verbo para operar em um ID de usuário.

Do ponto de vista de consistência, o que faz mais sentido?


Outra opção mencionada é

  • http: // / user / 1234 / update
  • http: // / user / 1234 / gráfico

Isso proporciona espaço para páginas não relacionadas a um usuário específico. i.

  • http: // / estatísticas
Foi útil?

Solução

Eu estaria levemente inclinado para líder com o ID de usuário - opção # 2 - uma vez que (o que existe de) a estrutura de diretórios é duas funções diferentes ao longo de dados de um usuário. É prontuário do usuário, e atualização do usuário.

É um ponto menor bonita, porém, sem saber se há planos para expansão significativa da funcionalidade desta coisa.

  • Está tudo daqui para frente vai ser funções adicionais foo e bar e baz para usuários individuais? Se assim for, a opção # 2 fica mais atraente para a razão acima -. ID do usuário são os dados fundamentais, meio que faz sentido começar com ele semanticamente
  • Você vai adicionar funcionalidade não-orientado para o utilizador? Liderando com um diretório de cabeçalho pode fazer sentido, então -. / User / 1234 / atualização, / user / 1234 / gráfico, / pergunta / 45678 / atividade, / pergunta / 45678 / estatísticas, etc

Outras dicas

Se você vai com este esquema torna-se simples de stop (bem-comportado) robots de spidering seu site:

 http://< tld >/update/1234
 http://< tld >/chart/1234

Isso é porque você pode configurar um arquivo /robots.txt para conter:

 Disallow /update/
 Disallow /chart/

Para mim, isso é um bônus agradável que é muitas vezes esquecido.

Opção # 1 corresponde ao exemplos comuns ASP.NET MVC. Alguns dos exemplos em Model View Controller modelo tem a forma {controlador} / {ação} / {id}. O .NET 3,5 início rápido no encaminhamento tem uma tabela que mostra alguns padrões de rota válida:

definição de rota - Exemplo de correspondência de URL

{controlador} / {ação} / {id} - / Produtos / show / bebidas

{table} /Details.aspx - /Products/Details.aspx

blog / {ação} / {entrada} - / blog / show / 123

{ReportType} / {ano} / {mês} / {dia} - / vendas / 2008/1/5

{locale} / {ação}
- / en-US / show

{language} - {country} / {ação}
- / en-US / show

Eu pessoalmente gosto deste estilo, porque mantém o usuário o mesmo, mas dá-lhe uma visão específica para eles.

  • http: // / 1234 / update
  • http: // / 1234 / gráfico

Se você foi para o outro lado eu poderia esperar para ser capaz de ver tudo sob / update / ou gráfico e, em seguida, reduzir em pelo usuário.

Vá com o último; URLs são destinadas a ser hierárquica (ou, pelo menos, os usuários lê-los dessa forma, por analogia, caminhos de diretório locais). O foco aqui é sobre diferentes pontos de vista de um usuário específico, por isso "usuário" é o conceito mais geral e deve aparecer em primeiro lugar.

Eu apenas respondeu à pergunta "Como você estrutura o seu URL rotas? " com minhas opiniões sobre tornando URLs RESTful, hackable e amigável. Eu acho que seria melhor ligação do que escrever algo similar nesta questão, daí o link.

Eu concordo do ponto de vista contexto, a aplicação seguido pelos parâmetros muito mais sentido para mim do que a chave substituta para um item seguido pelo contexto do que é o item. Em última análise, eu sugiro que cada vez é mais natural para você programa.

Convenção diz objeto / verb / ID, por isso deve ser:

http: // / user / update / 1234

(Eu notei que corresponde ao seu questão atualização:)

Então, sim, # 3 é a melhor escolha.

Este suportes não-usuário operações como você menciona (estatísticas /), bem como operações multi-usuário:

http: // / user / list /

Se há uma maneira dos usuários listagem eu introduzir um segmento de usuários:

http://< tld >/users/ <--- user list
http://< tld >/users/1234/ <--- user profile, use overloaded POST on this to update.
http://< tld >/users/1234/chart/ <--- user chart

Se você só pode ver seus próprios detalhes, ou seja, os usuários são invisíveis para o outro, você não precisa a identificação do usuário desde que você pode inferir que a partir da sessão, caso em que:

http://< tld >/user/ <--- user profile, use overloaded POST on this to update.
http://< tld >/user/chart/ <--- user chart
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top