Command Palette

Search for a command to run...

URL API: Parsear y Construir URLs de Forma Segura

Aprende a manipular URLs de forma programática usando la URL API de JavaScript, evitando errores comunes de parsing manual.

Lectura: 12 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • La URL API proporciona una forma segura y consistente de parsear URLs
  • El constructor URL() crea un objeto con propiedades para cada parte de la URL
  • URLSearchParams permite manipular query strings de forma sencilla
  • Siempre maneja errores con try/catch al crear objetos URL
  • La URL API es preferible a regex o manipulación de strings para URLs complejas

Introducción a la URL API

La URL API es una interfaz moderna de JavaScript que permite parsear, construir y manipular URLs de forma programática. Antes de esta API, los desarrolladores dependían de regex complejos o manipulación de strings para extraer componentes de una URL, lo que era propenso a errores y difícil de mantener.

La URL API está disponible en todos los navegadores modernos y en Node.js, lo que la hace ideal para aplicaciones que funcionan tanto en el cliente como en el servidor. Proporciona una interfaz orientada a objetos para trabajar con URLs, donde cada componente (protocolo, hostname, pathname, query params, etc.) es accesible como una propiedad.

  • <strong>Seguridad:</strong> Evita vulnerabilidades de inyección al manipular URLs
  • <strong>Consistencia:</strong> Comportamiento idéntico en todos los navegadores
  • <strong>Mantenibilidad:</strong> Código más legible que regex complejos
  • <strong>Validación:</strong> Detecta URLs inválidas automáticamente
  • <strong>Integración:</strong> Trabaja nativamente con URLSearchParams

Historia de la URL API

La URL API fue introducida en 2014 como parte de la especificación WHATWG URL Standard. Reemplazó las APIs anteriores como window.location y document.URL para proporcionar una interfaz más robusta y consistente para manipular URLs.

Crear un Objeto URL

Para crear un objeto URL, usas el constructor URL() que acepta la URL como primer parámetro. La URL puede ser absoluta (completa con protocolo y dominio) o relativa (en este caso, necesitas proporcionar una URL base como segundo parámetro).

URL Absoluta

Cuando proporcionas una URL absoluta, el constructor crea el objeto directamente sin necesidad de una URL base. Esta es la forma más común de usar la URL API cuando trabajas con URLs completas.

crear-url-absoluta.js
Loading code...

El objeto URL creado contiene todas las propiedades de la URL parseada. Puedes acceder a cada componente individualmente como href, protocol, hostname, pathname, etc. Esto es mucho más limpio que usar regex o split() para extraer partes de una URL.

URL Relativa con Base

Cuando trabajas con URLs relativas, debes proporcionar una URL base como segundo parámetro del constructor. La URL base se usa para resolver la URL relativa en una URL absoluta completa.

crear-url-relativa.js
Loading code...

La URL base puede ser cualquier URL absoluta válida. El constructor combina la URL relativa con la base para crear una URL completa. Esto es útil cuando trabajas con rutas relativas en tu aplicación y necesitas construir URLs absolutas.

Error con URLs Relativas sin Base

Si intentas crear un objeto URL con una URL relativa sin proporcionar una base, JavaScript lanzará un TypeError. Siempre verifica que tu URL sea absoluta o proporcione una base válida.

Propiedades del Objeto URL

El objeto URL expone múltiples propiedades que representan cada componente de la URL. Estas propiedades son de lectura y escritura, lo que significa que puedes modificarlas y el objeto actualizará automáticamente la URL completa.

Propiedades Básicas

El objeto URL expone las siguientes propiedades principales para acceder a cada componente de la URL:

  • <strong>href:</strong> La URL completa como string
  • <strong>protocol:</strong> El protocolo (http:, https:, ftp:, etc.)
  • <strong>hostname:</strong> El dominio sin el puerto
  • <strong>host:</strong> El dominio incluyendo el puerto (hostname:port)
  • <strong>port:</strong> El número de puerto (vacío si es el puerto por defecto)
  • <strong>pathname:</strong> La ruta después del dominio
  • <strong>search:</strong> La query string completa (incluye el ?)
propiedades-basicas.js
Loading code...

Cada propiedad devuelve el componente correspondiente de la URL. Por ejemplo, protocol devuelve "https:" incluyendo los dos puntos, mientras que hostname devuelve solo el dominio. La propiedad host es útil cuando necesitas el dominio con el puerto incluido, mientras que hostname es ideal cuando solo necesitas el dominio base.

Propiedades Avanzadas

Además de las propiedades básicas, el objeto URL incluye propiedades más específicas como origin (protocol + hostname + port), username y password (para URLs con autenticación), y hash (el fragmento de la URL después del #).

propiedades-avanzadas.js
Loading code...

La propiedad origin combina protocol, hostname y port en un solo valor de solo lectura. Esto es especialmente útil para comparar si dos URLs pertenecen al mismo origen (importante para CORS y seguridad). El hash es útil para navegación por anclas o en Single Page Applications donde el fragmento indica el estado de la aplicación.

Propiedad search vs searchParams

La propiedad search devuelve la query string completa como un string (ej: "?page=1&sort=desc"). La propiedad searchParams es un objeto URLSearchParams que permite manipular los parámetros de forma programática. Usa searchParams para manipular query strings.

Manipular URLs

Una de las ventajas más poderosas de la URL API es que puedes modificar las propiedades del objeto URL y la URL completa (href) se actualizará automáticamente. Esto hace muy fácil construir URLs dinámicas o modificar URLs existentes.

Modificar Propiedades

Puedes modificar cualquier propiedad del objeto URL asignando un nuevo valor. El objeto reconstruirá automáticamente la URL completa con los cambios aplicados. Esto es más seguro que concatenar strings manualmente.

modificar-propiedades.js
Loading code...

Al modificar propiedades como protocol, hostname o pathname, el objeto URL actualiza href automáticamente. Esto garantiza que la URL resultante siempre sea válida y esté correctamente formateada, evitando errores comunes de concatenación de strings.

Construir URL desde Cero

También puedes construir una URL desde cero creando un objeto URL con una URL base y luego modificando las propiedades necesarias. Esto es útil cuando necesitas construir URLs dinámicas basadas en datos del usuario.

construir-url-desde-cero.js
Loading code...

Este patrón es comúnmente usado para construir URLs de API con parámetros dinámicos. En lugar de concatenar strings con template literals, usas la URL API para construir la URL de forma segura y mantenible.

URLSearchParams Integrado

El objeto URL incluye una propiedad searchParams que es una instancia de URLSearchParams. Esta API permite manipular query strings de forma programática, agregando, eliminando o modificando parámetros sin tener que parsear manualmente la query string.

Métodos Principales

URLSearchParams proporciona métodos como get(), set(), append(), delete(), has(), y toString() para manipular los parámetros de la query string. Estos métodos manejan automáticamente la codificación y decodificación de caracteres especiales.

metodos-urlsearchparams.js
Loading code...

Los métodos de URLSearchParams son mucho más seguros que manipular la query string manualmente. Por ejemplo, set() reemplaza un valor existente mientras append() agrega un nuevo valor (permitiendo múltiples valores para el mismo parámetro). Todo el encoding/decoding se maneja automáticamente.

Iterar sobre Parámetros

URLSearchParams es iterable, lo que significa que puedes usar for...of, spread operator, o Array.from() para iterar sobre todos los parámetros. Esto es útil cuando necesitas procesar o transformar todos los parámetros de una query string.

iterar-parametros.js
Loading code...

Al iterar sobre URLSearchParams, cada iteración devuelve un array con dos elementos: el nombre del parámetro y su valor. Esto hace muy fácil convertir los parámetros en un objeto o procesarlos de alguna otra forma.

Mejor Práctica para Query Strings

Siempre usa URLSearchParams para manipular query strings. Evita concatenar strings manualmente o usar regex para parsear parámetros. URLSearchParams maneja automáticamente el encoding de caracteres especiales y es mucho más mantenible.

Errores Comunes

Al trabajar con la URL API, hay varios errores comunes que puedes encontrar. Conocer estos errores te ayudará a escribir código más robusto y evitar bugs difíciles de depurar.

URL Inválida

Si intentas crear un objeto URL con una URL inválida, JavaScript lanzará un TypeError. Esto incluye URLs con protocolos no válidos, formatos incorrectos, o caracteres no permitidos.

error-url-invalida.js
Loading code...

Siempre envuelve la creación de objetos URL en un bloque try/catch para manejar URLs inválidas gracefully. Esto es especialmente importante cuando trabajas con URLs proporcionadas por usuarios o fuentes externas que pueden no ser válidas.

Problemas de Encoding

Aunque URLSearchParams maneja el encoding automáticamente, aún puedes encontrar problemas si intentas manipular manualmente la query string. Los caracteres especiales deben estar correctamente codificados para ser válidos en una URL.

error-encoding.js
Loading code...

El encoding automático de URLSearchParams es una de sus mayores ventajas. Siempre usa esta API en lugar de encodeURIComponent() manualmente para parámetros de query string. Esto evita errores de encoding y hace el código más limpio.

Advertencia sobre Encoding Manual

Evita usar encodeURIComponent() directamente en query strings. URLSearchParams maneja el encoding automáticamente de forma correcta. El encoding manual puede causar doble encoding o encoding incompleto, resultando en URLs inválidas.

Resumen: URL API

Conceptos principales:

  • La URL API proporciona una interfaz orientada a objetos para manipular URLs
  • El constructor URL() crea objetos con propiedades para cada componente de la URL
  • URLSearchParams permite manipular query strings de forma programática
  • Las propiedades del objeto URL son de lectura y escritura
  • La URL API está disponible en todos los navegadores modernos y Node.js

Mejores prácticas:

  • Siempre usa try/catch al crear objetos URL para manejar URLs inválidas
  • Usa URLSearchParams en lugar de manipular query strings manualmente
  • Prefiere la URL API sobre regex para parsear URLs complejas
  • Construye URLs dinámicas modificando propiedades del objeto URL
  • Usa origin para comparar URLs o hacer solicitudes CORS