Desvendando URI, URL e URN
Este guia fornece uma visão geral de URI, URL e URN, explicando suas diferenças e casos de uso.
Ao desenvolver aplicativos web, muitas vezes precisamos chamar diferentes serviços web. Ao configurar a comunicação e conexão de diferentes serviços web, frequentemente encontramos os conceitos de URI, URL e URN. Geralmente, os usuários acham difícil distinguir entre eles, levando a um uso misturado ou incorreto. Neste artigo, forneceremos exemplos e explicaremos as diferenças entre eles para ajudar todos a entenderem melhor esses conceitos e usá-los corretamente ao ler blogs técnicos, documentações ou ao se comunicar com outros engenheiros.
O que é um URL?
Um URL (Uniform Resource Locator) fornece o endereço web ou a localização de recursos na internet. Ele é normalmente usado para especificar a localização de páginas web, arquivos ou serviços. Um URL fornece um formato padronizado para acessar recursos na web. É um componente chave na navegação web, criação de links e comunicação na internet.
Um URL consiste em várias partes que juntas definem o endereço do recurso e o protocolo usado para acessá-lo. Vamos analisar o URL abaixo como um exemplo e explicar a função de cada parte uma por uma.
-
Esquema: Este especifica o protocolo ou esquema usado para acessar os recursos, como HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol) ou outros.
O esquema no URL é
https
. -
Host: O host especifica o nome de domínio ou endereço IP do servidor que hospeda os recursos.
O host no URL é
example.logto.io
. -
Porta: (Opcional) A porta representa um número de porta específico no host ao acessar o recurso. Se nenhuma porta for especificada, ela será definida como a porta padrão para o esquema dado.
A porta padrão para HTTP é 80, enquanto a porta padrão para HTTPS é 443.
A porta no URL é
8080
. -
Caminho: (Opcional) O caminho indica a localização ou diretório específico no servidor onde o recurso está localizado, o que pode incluir diretórios e nomes de arquivos.
O caminho no URL deve ser
/blogs/index.html
. -
Parâmetros de Consulta: (Opcional) Parâmetros de consulta são parâmetros adicionais passados para um recurso, geralmente usados em aplicativos web dinâmicos. Eles aparecem após o caminho e são separados pelo símbolo
?
.Os parâmetros de consulta no URL são
params1=value1¶m2=value2
, que normalmente são representados na forma de pares chave-valor, com os pares separados pelo símbolo&
. Em cenários de uso real, muitas vezes é necessário codificação para evitar caracteres como espaços. -
Identificador de Fragmento: (Opcional) Também pode ser chamado de âncora, usado para localizar uma posição específica no recurso.
A âncora no URL é
#introduction
.
Além disso, por exemplo, ao usar serviços de arquivos ou muitos botões de "Entre em Contato" em páginas da web, são vinculados a URLs, como:
ftp://documents.logto.io/files/legal/soc_ii.pdf
mailto:[email protected]?subject=Enterprise%20quota%20request
O que é um URI?
URI significa "Uniform Resource Identifier". É uma sequência de caracteres que identifica um recurso específico, como uma página da web, arquivo ou serviço. O URI fornece uma maneira de identificar e localizar recursos de forma única usando um formato padronizado.
Um URI consiste principalmente em dois componentes:
- Esquema: Indica o protocolo ou esquema usado para acessar o recurso.
- Identificador de Recurso: Identifica o recurso específico sendo acessado ou referenciado. O formato do identificador do recurso depende do esquema utilizado.
Do ponto de vista gramatical, os URIs seguem principalmente o mesmo formato que os URLs, conforme especificado no RFC 3986.
Embora este formato de URI seja semelhante ao dos URLs, ele não garante acesso a qualquer recurso na Web. Usar este formato pode reduzir conflitos de nomes no espaço de nomes.
Na seção acima, apresentamos os URLs, que não só identificam um recurso, mas também ajudam a localizá-lo. Portanto, na verdade, URLs são um subconjunto adequado de URIs.
O que é um URN?
URN pode não ser tão comum quanto URL e URI. Ele significa "Uniform Resource Name", e seu escopo é identificar recursos de maneira persistente, mesmo que tais recursos não existam mais.
Ao contrário de um URL, um URN não fornece nenhuma informação sobre como localizar o recurso; ele apenas o identifica, como um URI puro. Especificamente, um URN é um tipo de URI com o esquema "urn" e tem a seguinte estrutura, conforme descrito no RFC 2141:
<URN>:<NID>:<NSS>
- URN: Geralmente
urn
. - Identificador de Espaço de Nome (NID): Representa um espaço de nome único ou sistema identificador que define e gerencia o URN. Ele fornece contexto e garante a exclusividade do identificador. Exemplos de espaços de nomes incluem ISBN (International Standard Book Number), etc.
- Cadeia Específica do Espaço de Nome (NSS): É uma sequência de caracteres que identifica exclusivamente um recurso dentro do espaço de nome especificado. O identificador em si não transmite nenhuma informação sobre a localização ou o método de acesso do recurso.
Por exemplo, um livro muito famoso que introduz sistemas de computadores CSAPP tem seu número ISBN representado como URN urn:isbn:9780134092669
.
URNs são frequentemente usados em diversos protocolos padrão, como a asserção no protocolo SAML, que corresponde ao URN urn:oasis:names:tc:SAML:2.0:assertion
.
Na engenharia de software, também podemos definir URNs para fins específicos em nossos próprios sistemas, de acordo com as regras de nomenclatura URN. Por exemplo, no Logto, para habilitar a Organização, você precisa adicionar o escopo urn:logto:scope:organizations
na configuração ao usar o SDK. Cada Organização também tem seu próprio URN dedicado urn:logto:organization:{orgId}
.
Conclusão
A relação entre URI, URL e URN pode ser ilustrada usando o diagrama de Venn a seguir:
URI, URL e URN podem ser usados para identificar diferentes recursos, mas apenas URL pode localizar precisamente a posição do recurso.
URI e URL podem suportar vários esquemas, como HTTP, HTTPS, FTP, mas URN pode ser considerado como suportando apenas o esquema urn
.
Todos os URLs ou URNs são URIs, mas nem todos os URIs são URLs ou URNs.