Mapear más de 42,000 refugios, vivacs y picos alpinos presenta un desafío técnico único: muchas ubicaciones comparten el mismo nombre, como 'Jagdhütte' o 'Rosskopf'. Para resolver esto, biwak.info implementó un sistema de slugs jerárquicos que genera URLs únicas y compartibles, asegurando que una vez que un enlace se publica, permanezca funcional incluso si los datos geográficos subyacentes cambian.

Retrato de Peter Hoffmann, el desarrollador de la plataforma biwak.info.
Peter Hoffmann, quien desarrolló el sistema de slugs jerárquicos para biwak.info.peter-hoffmann.com

Este es un retrato del desarrollador responsable de la implementación técnica del registro de slugs.

El desafío de los nombres alpinos no únicos

En la geografía alpina, los nombres se repiten con frecuencia en diferentes valles. Por ejemplo, el nombre 'Jagdhütte' aparece en 70 ubicaciones diferentes. El uso de un mapeo simple de nombre a URL resultaría en colisiones, donde una sola URL como /p/jagdhuette solo podría apuntar a uno de esos 70 puntos.

El desarrollador midió el impacto de los diferentes sufijos de nomenclatura y descubrió que añadir el nombre del país aportaba poca ayuda, ya que la mayoría de los duplicados ocurren dentro del mismo país. Añadir la región redujo aproximadamente a la mitad el número de duplicados, pero se requirieron datos de elevación para resolver la mayoría de los conflictos restantes.

Lógica de generación de slugs jerárquicos

El sistema sigue un orden de preferencia específico para generar el slug único más corto. Primero intenta el nombre simple; si está ocupado, añade la región; si aún así está ocupado, añade la elevación; y como último recurso, añade el ID único de OpenStreetMap.

Para determinar la región correcta, el sistema realiza una búsqueda de punto en polígono utilizando límites simplificados de Natural Earth. Si una ubicación cae fuera de un polígono debido a fronteras simplificadas, el sistema identifica el polígono más cercano para asignar el sufijo regional correcto.

El proceso está automatizado mediante un generador que produce candidatos en orden de preferencia. Esto garantiza que un lugar como 'Rosskopf' en Tirol se convierta en /p/rosskopf-tirol, mientras que una ubicación más específica podría convertirse en /p/rosskopf-tirol-2257.

Garantizar la estabilidad de las URLs mediante un registro

Un riesgo significativo en los sistemas de datos dinámicos es el 'desplazamiento de slugs' (slug drifting), donde añadir una nueva entrada provoca que una entrada existente cambie su URL para acomodar los nuevos datos. Para evitar esto, biwak.info mantiene un registro de slugs comprometido que mapea cada slug emitido a un ID de OpenStreetMap específico.

El registro sigue tres reglas estrictas: un slug en el registro nunca se mueve a un lugar diferente, un lugar conserva su slug de registro mientras siga ajustándose a su nombre actual, y los lugares nuevos o renombrados reciben el primer candidato disponible de la jerarquía.

Esta arquitectura garantiza que incluso si se añadiera un segundo 'Matterhorn' a los datos de origen, el 'Matterhorn' original conservaría su URL /p/matterhorn, mientras que el recién llegado se le asignaría un slug con sufijo.

Compensaciones y limitaciones

Aunque el sistema prioriza la legibilidad, no puede garantizar una URL totalmente amigable para el usuario en cada ubicación. Actualmente, 458 lugares requieren un ID de OpenStreetMap en el slug porque comparten un nombre y carecen de datos de elevación en los registros de origen.

El registro es un archivo en crecimiento que mapea cada slug entregado hasta la fecha. Debido a que es un archivo JSON ordenado, cualquier cambio en las reglas de slugging —como el cambio del desarrollador de 'u' a 'ue' para las diéresis alemanas— resulta en un diff de git legible que permite auditar fácilmente miles de URLs afectadas.