esquema de url amigável?
-
02-07-2019 - |
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
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: //
(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: //
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