Türkçe
  • uri
  • url
  • urn

URI, URL ve URN'i Açığa Çıkarma

Bu kılavuz, URI, URL ve URN'e genel bir bakış sunarak bunların farklarını ve kullanım durumlarını açıklamaktadır.

Darcy Ye
Darcy Ye
Developer

Web uygulamaları geliştirirken, genellikle farklı web servislerini çağırmamız gerekir. Farklı web servislerinin iletişim ve bağlantısını yapılandırırken, sık sık URI, URL ve URN kavramlarıyla karşılaşırız. Genellikle kullanıcılar bu kavramları ayırt etmekte zorlanır ve yanlış veya karışık kullanımlara yol açar. Bu makalede, bunların farklarını açıklayacağız ve örnekler vererek herkesin bu kavramları daha iyi anlamasına ve teknik blogları, belgeleri okurken ya da diğer mühendislerle iletişim kurarken doğru bir şekilde yorumlamasına ve kullanmasına yardımcı olacağız.

URL Nedir?

URL (Uniform Resource Locator), internet üzerindeki kaynakların web adresini veya konumunu sağlar. Genellikle web sayfalarının, dosyaların veya servislerin konumunu belirtmek için kullanılır. URL, webdeki kaynaklara erişmek için standart bir format sağlar. Web tarayıcılığı, bağlantı kurma ve internet iletişiminin temel bir bileşenidir.

Bir URL, kaynak adresini ve ona erişmek için kullanılacak protokolü tanımlayan birkaç bölümden oluşur. Aşağıdaki URL'yi örnek olarak ele alıp her bir bölümün işlevini tek tek açıklayalım.

  1. Şema: Bu, kaynaklara erişmek için kullanılan protokolü veya şemayı belirtir, örneğin HTTP (Hypertext Transfer Protocol), HTTPS (HTTP Secure), FTP (File Transfer Protocol) veya diğerlerini.

    URL'deki şema https'dir.

  2. Sunucu: Sunucu, kaynağa ev sahipliği yapan sunucunun alan adını veya IP adresini belirtir.

    URL'deki sunucu example.logto.io'dur.

  3. Port: (İsteğe bağlı) Port, kaynağa erişmek için sunucu üzerinde belirli bir port numarasını temsil eder. Eğer bir port belirtilmezse, belirli şema için varsayılan porta geri dönülür.

    HTTP için varsayılan port 80 iken, HTTPS için varsayılan port 443'tür.

    URL'deki port 8080'dir.

  4. Yol: (İsteğe bağlı) Yol, sunucuda kaynağın bulunduğu belirli konumu veya dizini belirtir ve dizinleri ve dosya adlarını içerebilir.

    URL'deki yol /blogs/index.html olmalıdır.

  5. Sorgu Parametreleri: (İsteğe bağlı) Sorgu parametreleri, dinamik web uygulamalarında tipik olarak bir kaynağa geçilen ek parametrelerdir. Yoldan sonra gelirler ve ? sembolü ile ayrılırlar.

    URL'deki sorgu parametreleri params1=value1&param2=value2'dir ve genellikle & sembolüyle ayrılan anahtar-değer çiftleri şeklinde temsil edilir. Gerçek kullanım senaryolarında, boşluk gibi karakterlerden kaçınmak için kodlama gerekebilir.

  6. Parça Tanımlayıcı: (İsteğe bağlı) Ankraj olarak da adlandırılabilir ve kaynağın belirli bir konumunu bulmak için kullanılır.

    URL'deki ankraj #introduction'dır.

Ek olarak, örneğin dosya servisleri kullanırken veya birçok "Bize Ulaşın" düğmesine tıklarken, bu düğmeler URL'lere bağlanır, örneğin:

  • ftp://documents.logto.io/files/legal/soc_ii.pdf
  • mailto:[email protected]?subject=Enterprise%20quota%20request

URI Nedir?

URI, "Uniform Resource Identifier" ifadesinin kısaltmasıdır. Web sayfası, dosya veya hizmet gibi belirli bir kaynağı tanımlayan bir karakter dizesidir. URI, standartlaştırılmış bir format kullanarak kaynakları benzersiz bir şekilde tanımlamak ve bulmak için bir yol sağlar.

Bir URI esas olarak iki bileşenden oluşur:

  1. Şema: Kaynağa erişmek için kullanılan protokolü veya şemayı belirtir.
  2. Kaynak Tanımlayıcı: Erişilen veya başvurulan belirli kaynağı tanımlar. Kaynak tanımlayıcının formatı kullanılan şemaya bağlıdır.

Gramer açısından bakıldığında, URI'ler genellikle RFC 3986'da belirtilen şekilde URL'lerle aynı formatı takip eder.

Bu URI formatı URL'lerinkine benzese de, internette herhangi bir kaynağa erişim garantisi vermez. Bu formatı kullanmak, ad alanı adı çakışmalarını azaltabilir.

Yukarıdaki bölümde URL'leri tanıttık, bu sadece bir kaynağı tanımlamakla kalmaz, aynı zamanda o kaynağı bulmaya da yardımcı olur. Bu nedenle, aslında URL'ler URI'ların doğru bir alt kümesidir.

URN Nedir?

URN, URL ve URI kadar yaygın olmayabilir. "Uniform Resource Name" anlamına gelir ve kapsamı, böyle kaynaklar artık var olmasa bile kaynakları kalıcı olarak tanımlamaktır.

Bir URL'den farklı olarak, bir URN kaynak konumunu nasıl bulacağına dair herhangi bir bilgi sağlamaz; sadece bir kimlik sağlar, tıpkı bir pure (saf) URI gibi. Özellikle, URN, "urn" şeması olan bir URI türüdür ve RFC 2141'de açıklandığı gibi aşağıdaki yapıya sahiptir:

<URN>:<NID>:<NSS>

  1. URN: Genellikle urn.
  2. Namespace Identifier (NID): URN'i tanımlayan ve yöneten benzersiz bir alan adı veya tanımlayıcı sistemini temsil eder. Bağlam sağlar ve tanımlayıcının benzersizliğini sağlar. Alan adı örnekleri arasında ISBN (Uluslararası Standart Kitap Numarası) vb. bulunur.
  3. Namespace Specific String (NSS): Belirtilen alan adı içinde bir kaynağı benzersiz şekilde tanımlayan bir karakter dizesidir. Tanımlayıcı, kaynağın konumu veya erişim yöntemi hakkında herhangi bir bilgi içermez.

Örneğin, bilgisayar sistemlerini tanıtan CSAPP adlı çok ünlü bir kitabın ISBN numarası, URN olarak temsil edilmektedir: urn:isbn:9780134092669.

URN'ler genellikle SAML protokolündeki assertation (değer) gibi çeşitli standart protokollerle kullanılır. Bu URN, urn:oasis:names:tc:SAML:2.0:assertion ile karşılık bulur.

Yazılım mühendisliğinde kendi sistemlerimizde URN adlandırma kurallarına göre belirli amaçlar için URN'ler de tanımlayabiliriz. Örneğin, Logto'da Organizasyonları etkinleştirmek için SDK'yı kullanırken yapılandırmaya urn:logto:scope:organizations kapsamını eklemeniz gerekir. Her Organizasyonun ayrıca urn:logto:organization:{orgId} kendi özel URN'si vardır.

Sonuç

URI, URL ve URN arasındaki ilişki aşağıdaki Venn diyagramı kullanılarak gösterilebilir:

İlişkiler

URI, URL ve URN'nin tümü farklı kaynakları tanımlamak için kullanılabilir, ancak yalnızca URL, kaynağın konumunu tam olarak belirleyebilir.

URI ve URL, HTTP, HTTPS, FTP gibi çeşitli şemaları destekleyebilir, ancak URN yalnızca urn şemasını desteklediği kabul edilebilir.

Tüm URL'ler veya URN'ler URI'dir, ancak tüm URI'ler URL veya URN değildir.