Nous avons une base de données de ressources, que ce soit des produits, des articles de blog ou quelque chose du genre. Nous devons concevoir un schéma d'URL pour les résoudre, pour le site Web public.
Voici deux exemples liés à l'ID de base de données:
Voici un exemple convivial:
(Un petit aperçu de ma vie de navigation là-bas)
J'aime les URL conviviales car vous avez une idée de ce qui se trouve à la fin de l'URL lorsque vous survolez ou voyez-le dans un e-mail ou un document. C'est mieux pour le SEO, ou c'était le cas auparavant.
Que se passe-t-il lorsque le document ou le produit est renommé? Soit parce qu'il a changé (le wiki peut ne pas changer mais nos ressources le pourraient) soit à cause d'une faute de frappe, non? Nos ressources sont très techniques, longues et sujettes aux erreurs.
De plus, nous avons un ID de base de données, qui est un nombre. Regardons une idée pour une adresse d'une vidéo en utilisant un magasin de location de simulation:
L'ID est évident et est utilisé dans la recherche de base de données. Bien.
Le bit de portes coulissantes n'est pas unique et vient d'être généré à partir du titre de la vidéo, il pourrait être vérifié sur GET, donc si les portes coulissantes ont été entrées et ne correspondent pas à ce qui est vraiment dans le document 287171, il répond 404.
Ou peut-être que cela pourrait être ignoré, permettant aux humains de coller ce qu'ils veulent là-dedans, si quelqu'un s'en souciait. Cette URL fonctionnerait donc également:
Le problème avec la vérification de la partie conviviale est, comme mentionné, le problème du renommage ou de la correction de faute de frappe. Si le nom a changé, et dans notre domaine cela se produit, nous ne voulons pas casser les URL qui existent, alors devrions-nous:
Il suffit de ne pas vérifier la partie amicale.
Vérifiez, mais ajoutez un «historique» des parties conviviales à l'enregistrement de la base de données pour que tous les ID conviviaux précédents fonctionnent toujours!
Vos pensées et idées sont les bienvenues.
Luc
http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids
(en utilisant une version non vérifiée à la lumière des changements de titre, le lien de partage plus court n'est que l'identifiant:http://programmers.stackexchange.com/q/255684/25768
(et l'identifiant utilisateur pour le suivi des badges)Réponses:
Conserver l'ID dans l'URL est la méthode la plus évolutive et, comme vous l'avez démontré, les URL peuvent toujours être relativement bonnes.
Une autre option utilisée par plusieurs projets consiste à conserver un historique des limaces précédemment utilisées. Lorsque le titre change, vous mettez à jour le slug et si quelqu'un essaie de rechercher un slug obsolète, recherchez dans la liste des anciens slugs. De cette façon, les anciens slugs peuvent être réutilisés pour du nouveau contenu (ou non selon votre implémentation).
Wordpress l'a fait, tout comme le joyau friendly_id, qui est probablement le joyau le plus utilisé pour gérer les identifiants conviviaux pour Rails.
De plus, même si j'aime les URL de bonne apparence, je pense qu'il est important de se rappeler qu'il s'agit très probablement d'une fonctionnalité utilisée par les utilisateurs plus avertis en technologie. Certains navigateurs commencent même à masquer des URL (ou une partie de celles-ci).
la source
J'ai utilisé deux scénarios différents dans le passé.
/id/some-slug
où leid
est utilisé pour rechercher , pas la limace. Ainsi, la limace peut être n'importe quoi . Mais, lorsque le slug ne correspond pas au slug réel, l'utilisateur est redirigé vers la version actuelle./permalink
pour les cas où nous ne voulions pas d'un identifiant dans l'url ou où l'url ne devrait jamais changer, même si un identifiant est disponible (voir [1] et [2] ). Bien sûr, dans ce cas, lepermalink
est utilisé pour la recherche . Le slug actuel et le permalien (le premier slug) sont stockés dans la base de données.Dans aucune de ces façons, vous devez conserver un historique des limaces dans votre base de données, ce qui pourrait devenir problématique très bientôt.
ps: Dans le deuxième cas, vous aurez besoin d'un routage très spécifique pour conserver les crédits sociaux:
Voir à nouveau [1] et [2] .
la source
La réponse HTTP 301 (déplacée) a été conçue à cet effet. Si un client accède à l'ancien URI, il vous suffit de lui envoyer le nouvel URI et il peut le rediriger.
Si je suis bien, c'est du travail en double, vous avez à la fois un identifiant de nom pour la ressource et un identifiant dans le même URI. Cela ne sert à rien.
Si vous craignez que plusieurs films aient le même nom, vous pouvez ajouter des informations supplémentaires sur le film dans l'URL
ou
Cela dit, il n'y a rien de mal à utiliser des identifiants si cela a du sens pour votre modèle de données, en particulier si la seule chose que vous regroupez est qu'ils sont des vidéos.
Le client, que ce soit un ordinateur ou un utilisateur humain, ne doit pas trop dépendre de la structure URI en premier lieu, il doit regarder le contenu que vous avez renvoyé pour déterminer quelle ressource trouver.
Il n'y a rien de mal à avoir un système d'URI sensible qui permet à quelqu'un de deviner simplement l'emplacement d'une ressource ou de naviguer dans la structure en fonction des propriétés partagées (c'est-à-dire tous les films en 2004), mais votre système ne doit pas compter à ce sujet et aucun client ne devrait casser si vous modifiez vos URI
Ou, pour le dire autrement, vous devriez pouvoir changer la nuit de
à
et aucun client ne doit s'arrêter car les clients doivent regarder le contenu et non les URL.
la source
La BBC utilise des slugs qui sont:
par exemple http://www.bbc.co.uk/programmes/b006mk7h
Chaque programme public a à la fois un identifiant et un slug. Les ID peuvent alors être des incréments à incrémentation automatique comme d'habitude, et les lacunes ne sont pas exposées.
la source
Du point de vue RESTful, les URI doivent suivre une structure hiérarchique prévisible et peut-être pour améliorer la convivialité.
Cela les rendra plus faciles à utiliser par les consommateurs. Si vos données ont des relations, une sorte de hiérarchie serait nécessaire.
Il semble que le schéma soit:
\video\[name]\[id]
Si le nom n'est pas utilisé pour une autre classification, il pourrait être supprimé en faveur de
\video\[id].
Cependant, si vous souhaitez classer les vidéos, le nom est peut-être utile.
Exemples:
C'est vraiment une décision de conception sur la façon dont l'accès est modélisé.
la source