Tenemos una base de datos de recursos, ya sean productos, publicaciones de blog o algo así. Necesitamos diseñar un esquema de URL para abordarlos, para el sitio web público.
Aquí hay dos ejemplos vinculados con ID de base de datos:
Aquí hay un ejemplo que es amigable:
(Un pequeño vistazo a mi vida de navegación allí)
Me gustan las URL amigables ya que tienes una idea sobre lo que está al final de la URL cuando pasas el mouse por encima o la ves en un correo electrónico o documento. Es mejor para SEO, o solía ser.
¿Qué sucede cuando se cambia el nombre del documento o producto? Ya sea porque cambió (es posible que Wiki no cambie pero nuestros recursos sí) o por un error tipográfico, ¿verdad? Nuestros recursos son muy técnicos, largas palabras y propensos a errores.
Además, tenemos una ID de base de datos, que es un número. Veamos una idea para la dirección de un video usando una tienda de alquiler simulada:
El ID es obvio y se usa en la búsqueda de DB. Multa.
El bit de puertas correderas no es único y solo se generó a partir del título del video, podría verificarse en GET, por lo que si se ingresaron puertas deslizantes y no coinciden con lo que realmente está en el documento 287171, responde 404.
O tal vez podría ignorarse, permitiendo que los humanos peguen lo que quieran allí, si a alguien le importa. Entonces esta URL también funcionaría:
El problema con la verificación de la parte amigable es, como se mencionó, el problema del cambio de nombre o la corrección de errores tipográficos. Si el nombre cambió, y en nuestro dominio eso sucede, no queremos romper las URL que existen, así que deberíamos:
Simplemente no verificar la parte amigable.
Verifique, pero agregue un 'historial' de partes amigables al registro de la base de datos para que cualquier ID amigable anterior siga funcionando.
Tus pensamientos e ideas son bienvenidas.
Luke
http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids
(usando una versión no verificada a la luz de los cambios en el título, también el enlace más corto "compartir" es solo la identificación:http://programmers.stackexchange.com/q/255684/25768
(y la identificación del usuario para el seguimiento de la insignia)Respuestas:
Mantener la ID en la URL es el método más a prueba de futuro y, como lo demostró, las URL aún pueden verse relativamente bien.
Otra opción utilizada por múltiples proyectos es mantener un historial de las babosas utilizadas anteriormente. Cuando cambia el título, actualiza la babosa y, si alguien intenta buscar una babosa obsoleta, busque en la lista de babosas antiguas. De esa manera, las babosas viejas se pueden reutilizar para contenido nuevo (o no dependiendo de su implementación).
Wordpress hizo eso y también lo hizo la gema friendly_id que es probablemente la gema más utilizada para administrar identificadores amigables para Rails.
Además, aunque me gustan las URL atractivas, creo que es importante recordar que es muy probable que sea una característica utilizada por usuarios más expertos en tecnología. Algunos navegadores incluso comienzan a ocultar URL (o parte de ella).
fuente
He usado dos escenarios diferentes en el pasado.
/id/some-slug
donde laid
se utiliza para las operaciones de búsqueda , la babosa no. Por lo tanto, la babosa puede ser cualquier cosa . Pero, cuando el slug no coincide con el slug real, el usuario es redirigido a la versión actual./permalink
para los casos en que no queríamos una identificación en la url o donde la url nunca debería cambiar, aunque haya una identificación disponible (consulte [1] y [2] ). Por supuesto, en este caso elpermalink
se utiliza para las operaciones de búsqueda . Tanto la babosa actual como el enlace permanente (la primera babosa) se almacenan en la base de datos.De ninguna de estas maneras necesita mantener un historial de babosas en su base de datos, lo que se volvería problemático muy pronto.
ps: en el segundo caso, necesitarás algunas rutas muy específicas para mantener los créditos sociales:
Ver [1] y [2] nuevamente.
fuente
La respuesta HTTP 301 (movida) se diseñó para este propósito. Si algún cliente va al URI anterior, simplemente envíele el nuevo URI y pueden redirigirlo.
Si sigo correctamente, este es un trabajo duplicado, tiene un identificador de nombre para el recurso y una identificación en el mismo URI. Eso no sirve para nada.
Si le preocupa que varias películas tengan el mismo nombre, puede agregar información adicional sobre la película en la URL
o
Una vez dicho esto, no hay nada de malo en usar ID si eso tiene sentido para su modelo de datos, particularmente si lo único por lo que se está agrupando es que son videos.
El cliente, ya sea una computadora o un usuario humano, no debería depender demasiado de la estructura de URI en primer lugar, deberían estar mirando el contenido que ha devuelto para averiguar qué recurso encontrar.
No hay nada de malo en tener un sistema URI sensible que facilite a alguien adivinar la ubicación de un recurso o navegar hacia arriba y hacia abajo en la estructura en función de las propiedades compartidas (es decir, todas las películas en 2004), pero su sistema no debe confiar en eso y ningún cliente debería romperse si cambia sus URI
O para decirlo de otra manera, deberías poder cambiar durante la noche de
a
y ningún cliente debería interrumpirse porque los clientes deberían mirar contenido, no URL.
fuente
La BBC usa babosas que son:
por ejemplo, http://www.bbc.co.uk/programmes/b006mk7h
Cada programa público tiene una identificación y una babosa. Las ID pueden ser enteros de incremento automático, como de costumbre, y los huecos no están expuestos.
fuente
Desde un punto de vista RESTful, los URI deben seguir una estructura jerárquica predecible y perphaps para mejorar la usabilidad.
Esto los hará más fáciles de usar por los consumidores. Si sus datos tienen relaciones, entonces sería necesario algún tipo de jerarquía.
Parece que el esquema es:
\video\[name]\[id]
Si el nombre no se utiliza para ninguna clasificación adicional, se podría descartar a favor de
\video\[id].
Sin embargo, si desea clasificar los videos, tal vez el nombre sea útil.
Ejemplos:
Es realmente una decisión de diseño sobre cómo se modela el acceso.
fuente