URI vs URL vs URN

Fundamentos Jan 6, 2025 JAVASCRIPT

Definicion

Estos tres acrónimos - URI, URL y URN - causan más confusión que casi cualquier otra terminología web. Aquí está la simple verdad: URI es la categoría padre, y tanto URLs como URNs son tipos específicos de URIs. Piensa en ello como “vehículos” (URI) incluyendo tanto “coches” (URL) como “matrículas” (URN).

Una URL (Uniform Resource Locator) te dice DÓNDE está algo y CÓMO obtenerlo. https://api.example.com/users/123 es una URL - te da el protocolo (https), la ubicación (api.example.com), y la ruta (/users/123). Puedes literalmente usar esto para localizar y recuperar el recurso ahora mismo.

Un URN (Uniform Resource Name) es un identificador permanente que no te dice dónde está algo. urn:isbn:978-3-16-148410-0 identifica un libro específico independientemente de qué librería o biblioteca lo tenga. El URN del libro nunca cambia aunque se mueva entre tiendas o se agote. Los URNs son sobre identidad, no ubicación.

Aquí está la realidad práctica: en el desarrollo web del día a día, casi siempre estás trabajando con URLs. El término “URI” es técnicamente más correcto en muchos contextos (la especificación HTTP usa “URI”), pero “URL” es lo que la mayoría dice. Los URNs se usan principalmente en contextos especializados como bibliotecas digitales, estándares de publicación e identificadores persistentes.

Ejemplo

Cada dirección web que usas: https://github.com/user/repo es una URL. Te dice dónde está GitHub, qué protocolo usar, y qué repositorio específico quieres. Esto es con lo que trabajas el 99% del tiempo.

Identificadores de libros: urn:isbn:0451450523 es un URN - identifica un libro específico (Guía del Autoestopista Galáctico) independientemente de dónde puedas comprarlo. Amazon, Casa del Libro, y tu biblioteca local todos tienen el mismo libro - el URN lo identifica universalmente.

Endpoints de API: Cada endpoint de API REST es una URL. /api/v1/users te dice la ruta a un recurso. Combinado con una URL base, puedes localizarlo y accederlo.

Identificadores UUID: Cuando los sistemas usan UUIDs como urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6, están usando URNs para crear identificadores globalmente únicos que no están atados a ninguna ubicación.

Analogia

Dirección Postal vs. Número de Seguro Social: Una URL es como una dirección postal - te dice exactamente dónde encontrar algo (Calle Principal 123, Ciudad X). Un URN es como un Número de Seguro Social - identifica únicamente algo independientemente de dónde esté actualmente. Puedes cambiar de dirección, pero tu NSS permanece igual. URI es el concepto general de “formas de identificar cosas.”

Coordenadas GPS vs. Nombre de Persona: Las coordenadas GPS (URL) te dicen exactamente dónde está algo ahora mismo. El nombre legal de una persona (URN) la identifica independientemente de dónde esté parada. Si alguien pregunta “¿cómo encuentro a Juan Pérez?” podrías darles coordenadas (URL) o solo el nombre (URN) para que lo busquen ellos mismos.

Número de Teléfono vs. Dirección Física: Un número de teléfono es independiente de la ubicación (como un URN) - te identifica sin importar dónde estés. Una dirección física es específica de ubicación (como una URL). Ambos son formas de contactarte (URIs), pero funcionan diferente.

El Catálogo de Biblioteca: La ubicación de un libro en una biblioteca (URL) podría ser “3er piso, estante B, posición 47.” El número de catálogo del libro (URN) podría ser “823.912 ORW” - esto identifica el libro incluso si cambia de estante o está prestado.

Code Example


// URL (más común en APIs)
https://api.example.com/v1/products/123
|___| |______________| |_____________|
scheme    authority       path

// URN (independiente de ubicación)
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
urn:isbn:0451450523

// URI (término genérico para ambos)
const resourceUri = 'https://api.example.com/users/123';  // Esto es una URL
const bookUrn = 'urn:isbn:978-3-16-148410-0';  // Esto es un URN

// En headers HTTP
GET /users/123 [HTTP/1.1](https://reference.apios.info/es/terms/http-1-1/)
Host: api.example.com
// URI completa: https://api.example.com/users/123

Standards & RFCs