Cómo crear un acortador de URL con redireccionamientos

Una guía sobre cómo crear un servicio de acortamiento de URL, que abarca las opciones tecnológicas, el diseño de bases de datos, la lógica central para la generación de código y la redirección, y la implementación.

Intermediate

La creación de un acortador de URL con redireccionamientos implica varios componentes y pasos clave. A continuación se ofrece una descripción general de cómo se puede abordar:

1. Elija su pila tecnológica

  • Lenguaje/marco de trabajo backend: Necesitará un lenguaje y un marco de trabajo del lado del servidor para gestionar las solicitudes, generar códigos cortos e interactuar con una base de datos. Entre las opciones más populares se incluyen Python (Flask, Django), Node.js (Express), Ruby (Rails), Go o PHP (Laravel).
  • Base de datos: Es esencial disponer de una base de datos para almacenar la correspondencia entre los códigos cortos y las URL originales. Entre las opciones se incluyen PostgreSQL, MySQL, MongoDB o incluso Redis para enlaces cortos temporales de muy alto rendimiento.
  • Interfaz de usuario (opcional, pero recomendada): Para una interfaz fácil de usar, puede utilizar HTML, CSS y JavaScript (con marcos como React, Vue o Angular) para permitir a los usuarios introducir URL largas y ver las URL cortas generadas.

2. Diseño del esquema de la base de datos

Necesitará una tabla (o colección) para almacenar sus asignaciones de URL. Un esquema básico podría incluir: * id: Clave principal (entero autoincremental o UUID). * short_code: una cadena corta y única (por ejemplo, «abcde») que formará parte de tu URL corta. Debe indexarse para agilizar las búsquedas. * original_url: la URL completa y larga a la que redirige el código corto. * created_at: marca de tiempo de cuándo se creó la URL corta. * clicks (opcional): un contador del número de veces que se ha accedido a la URL corta.

3. Lógica central del backend

  • Generación de códigos cortos:

    • Cuando un usuario envía una URL larga, su backend debe generar un short_code único.
    • Esto se puede hacer de la siguiente manera:
      • Generación de cadenas aleatorias: Genere una cadena aleatoria de longitud fija (por ejemplo, 6-8 caracteres) utilizando caracteres alfanuméricos. Deberá comprobar si este código ya existe en su base de datos y, en caso afirmativo, volver a generarlo para garantizar su unicidad.
      • Hash: Realice un hash de la URL original o de una combinación de la URL y una marca de tiempo, y luego tome una parte del hash. Esto puede ser más determinista, pero sigue requiriendo comprobaciones de unicidad.
      • Codificación Base62: Si utiliza un id autoincremental en su base de datos, puede convertir ese ID entero en una cadena base62 (0-9, a-z, A-Z). Esto garantiza la unicidad y es muy eficiente.
  • Almacenamiento de la asignación:

    • Una vez generado un short_code único, almacene el short_code y la original_url en su base de datos.
  • Gestión de redireccionamientos:

    • Cuando un usuario accede a una URL corta (por ejemplo, yourshortener.com/abcde), su servidor debe:
      1. Extraer el short_code (abcde) de la ruta de la URL.
      2. Consultar su base de datos para encontrar la original_url asociada a ese short_code.
      3. Si la encuentra, emitir una redirección HTTP 301 (Movido permanentemente) o 302 (Encontrado) a la original_url. Por lo general, se prefiere un 301 para las redirecciones permanentes, ya que los navegadores lo almacenan en caché, lo que reduce las solicitudes posteriores a su servidor.
      4. Si no la encuentra, devolver una página de error 404 No encontrado.

4. Puntos finales de la API (para el backend)

  • POST /shorten:

    • Toma original_url en el cuerpo de la solicitud.
    • Genera un short_code.
    • Almacena la asignación.
    • Devuelve la URL corta completa (por ejemplo, yourshortener.com/generated_code).
  • GET /:short_code:

    • Toma short_code de la ruta URL.
    • Busca original_url.
    • Realiza la redirección.

5. Interfaz (si procede)

  • Una página web sencilla con un campo de entrada para la URL larga y un botón para enviarla.
  • Muestra la URL corta generada al usuario.

6. Implementación

  • Necesitarás un nombre de dominio (por ejemplo, myurl.short).
  • Aloja tu aplicación backend en un servidor (por ejemplo, AWS, Google Cloud, Heroku, Vercel).
  • Configura tu servidor web (por ejemplo, Nginx, Apache) para enrutar las solicitudes a tu aplicación backend y gestionar el dominio.

Ejemplo de flujo:

  1. El usuario visita yourshortener.com.
  2. El usuario introduce https://www.example.com/very/long/path/to/a/resource y hace clic en «Acortar».
  3. El frontend envía una solicitud POST a yourshortener.com/shorten con la URL larga.
  4. El backend genera un short_code único, como XyZ12a.
  5. El backend almacena XyZ12a -> https://www.example.com/very/long/path/to/a/resource en la base de datos.
  6. El backend responde con yourshortener.com/XyZ12a.
  7. El usuario comparte yourshortener.com/XyZ12a.
  8. Otro usuario hace clic en yourshortener.com/XyZ12a.
  9. Su navegador envía una solicitud GET a yourshortener.com/XyZ12a.
  10. El backend busca XyZ12a y encuentra la URL original.
  11. El backend envía una respuesta de redireccionamiento HTTP 301 al navegador del usuario, apuntando a https://www.example.com/very/long/path/to/a/resource.
  12. El navegador del usuario navega entonces a la URL larga original.