Web API'leri öğrenmenin en verimli yolu, önce sayfanın DOM ağacını tanımak, ardından olayları, ağ isteklerini, depolamayı ve arka plan API'lerini sırayla eklemektir. Bu rehber, tarayıcıda JavaScript ile kullandığınız Web API'lerini sekiz öğrenme yoluna ayırır ve serideki 49 yazının her birine kısa bir açıklamayla bağlantı verir. Her yazı MDN Web Docs belgelerine dayanır; burada neyin hangi sırayla öğrenileceğini ve MDN sayfalarının nasıl okunacağını anlatıyoruz.

Seri, JavaScript dilini bildiğinizi varsayar. Değişkenler, fonksiyonlar, Promise ve async/await gibi dil konuları için JavaScript öğrenme rehberi serisine, etiketler, formlar ve öznitelikler gibi HTML konuları için HTML öğrenme rehberi serisine bakabilirsiniz. Bu seride yalnızca tarayıcının JavaScript koduna sunduğu arayüzleri ele alıyoruz.

Web API nedir, JavaScript dilinden farkı ne?

Web API nedir, JavaScript dilinden farkı ne? JavaScript dili, Tarayıcı Web API, Ortamdan bağımsız standart API, Node.js API

Web API, tarayıcının (ve bazı durumlarda başka çalışma ortamlarının) JavaScript koduna sunduğu nesne ve fonksiyon kümesidir. MDN'in Web API dizini bunları iki biçimde listeler: belirli bir işi çözen API'ler (Fetch API, Web Storage API, Canvas API gibi) ve bu API'lerin kullandığı arayüzler, yani nesne türleri (Element, Response, Blob gibi). MDN, Web API'lerin çoğunlukla JavaScript ile kullanıldığını ama bunun zorunlu olmadığını da belirtir.

Burada önemli olan ayrım şudur: JavaScript dili; tipleri, operatörleri, fonksiyonları, sınıfları ve Promise gibi yerleşik nesneleri tanımlar. Sayfadaki bir başlığı değiştirmek, sunucuya istek göndermek veya tarayıcıda veri saklamak ise dilin değil, çalışma ortamının işidir. MDN'in DOM sayfası bunu açıkça söyler: DOM, JavaScript dilinin bir parçası değildir; web siteleri kurmak için kullanılan bir Web API'dir. Aynı JavaScript kodu Node.js'te de çalışabilir, ancak Node.js farklı bir API kümesi sunar ve DOM, Node.js çalışma zamanının çekirdek bir parçası değildir.

Bazı API'ler ise ortamdan bağımsızdır. EventTarget, Event, URL, TextEncoder, AbortController ve crypto.subtle gibi arayüzler WHATWG ve W3C standartlarında tanımlıdır ve Node.js de bunları aynı standarda göre uygular. Aşağıdaki kod hem tarayıcıda hem de Node.js 24 ile aynı biçimde çalışır; çıktıyı Node.js 24.4.0 ile çalıştırarak doğruladık:

javascript
const hedef = new EventTarget();
hedef.addEventListener("selam", (olay) => {
  console.log(olay.type);             // selam
  console.log(olay instanceof Event); // true
});
const sonuc = hedef.dispatchEvent(new Event("selam"));
console.log(sonuc);                   // true
console.log(typeof EventTarget);      // function

dispatchEvent() burada true döndürür, çünkü olay iptal edilmedi. Bu tür ortamdan bağımsız örnekleri serinin ilgili yazılarında Node.js ile çalıştırarak gösteriyoruz. document, window, çerezler, IndexedDB veya kamera gibi yalnızca tarayıcıda bulunan API'lerde ise örnekleri MDN belgelerine göre yazdık ve çıktı yorumunu yalnızca MDN sayfası o çıktıyı gösteriyorsa ekledik.

KatmanKim tanımlarÖrnek
JavaScript diliECMAScript (ECMA-262)Array, Promise, class, JSON
Tarayıcı Web APIWHATWG ve W3C standartlarıdocument, fetch, localStorage, Canvas
Ortamdan bağımsız standart APIWHATWG ve W3C, Node.js de uygularEventTarget, URL, TextEncoder, crypto.subtle
Node.js APINode.js projesinode:fs, node:http, process

Bu seriyi hangi sırayla okumalısınız?

Aşağıdaki sekiz öğrenme yolu, birbirinin üzerine kurulan bir sıra izler. DOM temelleri olmadan olay delegasyonunu, olaylar olmadan form gönderimini, Promise ve fetch olmadan service worker önbelleklemesini anlamak zordur. Yeni başlıyorsanız ilk iki yolu sırayla okuyun; sonrasında ihtiyacınıza göre ağ, depolama veya PWA yoluna geçebilirsiniz. HTTP ve güvenlik yolunu ise ağ istekleri yolunu bitirdikten sonra okumanızı öneririz, çünkü CORS ve önbellek başlıkları orada öğrendiğiniz kavramlara dayanır.

1. DOM temelleri

Sayfanın JavaScript tarafından nasıl görüldüğünü, öğelerin nasıl bulunduğunu, oluşturulduğunu ve değiştirildiğini anlatan temel yazılar:

2. Olaylar ve formlar

Kullanıcının tıklamasına, tuşa basmasına veya formu göndermesine tepki vermeyi öğreten yazılar:

3. Ağ istekleri ve CORS

3. Ağ istekleri ve CORS: Fetch API ile GET ve POST isteği, Request, Response ve Headers nesneleri, CORS nedir?, CORS hataları ve çözümleri

Sunucuyla veri alışverişi yapan API'ler ve tarayıcının farklı kökenler arasındaki istekleri nasıl denetlediği:

  • Fetch API ile GET ve POST isteği: fetch() çağrısını, response.ok kontrolünü, JSON gövdeleri ve hata yakalamayı tarayıcı açısından anlatır.
  • Request, Response ve Headers nesneleri: İstek ve yanıt nesnelerini, gövdenin yalnızca bir kez okunabilmesini ve clone() kullanımını işler.
  • CORS nedir?: Aynı köken ilkesini, basit istekleri, ön uçuş (preflight) isteğini ve Access-Control-Allow-* başlıklarını açıklar.
  • CORS hataları ve çözümleri: MDN'in listelediği CORS hata mesajlarını tek tek ele alıp nedenlerini ve çözümlerini verir.
  • WebSocket API kullanımı: Tarayıcı tarafında WebSocket bağlantısı açmayı, mesaj göndermeyi ve bağlantı kapanış kodlarını gösterir.
  • XMLHttpRequest ve fetch farkı: Eski XHR arayüzünü, readyState ve ilerleme olaylarını, fetch ile farklarını karşılaştırır.

4. Depolama ve dosyalar

Tarayıcıda veri saklama yöntemleri ve kullanıcının seçtiği dosyaları okuma:

5. Arka plan, PWA ve iletişim

Ana iş parçacığının dışında çalışan kod, çevrimdışı çalışma ve sayfalar arası mesajlaşma:

6. Gözlemciler, çizim ve medya

Sayfadaki değişiklikleri izleyen gözlemciler, animasyon döngüsü, canvas ve kamera erişimi:

7. Diğer tarayıcı API'leri

7. Diğer tarayıcı API'leri: History API ile SPA yönlendirme, Clipboard API ile panoya kopyalama, Geolocation API ile konum alma, Web Crypto API

Tek sayfa uygulamalarda yönlendirme, pano, konum, şifreleme, performans ölçümü ve kendi HTML öğelerinizi tanımlama:

8. HTTP, güvenlik ve hatalar

Tarayıcı ile sunucu arasındaki protokol katmanı, yaygın saldırılara karşı savunmalar ve Web API hata türleri:

MDN'de bir API sayfası nasıl okunur?

Bu serideki her yazı MDN'deki arayüz ve üye sayfalarına bağlantı verir. Bu sayfalar belli bir düzenle yazılmıştır; düzeni bir kez öğrendiğinizde aradığınızı çok daha hızlı bulursunuz. Bir arayüz sayfası (örneğin Element) genellikle şu bölümlerden oluşur:

  • Kısa tanım: Arayüzün neyi temsil ettiği ve hangi arayüzlerin ondan türediği. Element sayfası, HTML öğelerinin HTMLElement, SVG öğelerinin SVGElement üzerinden Element'ten türediğini söyler.
  • Constructor (yapıcı): Nesneyi new ile oluşturabiliyorsanız burada yazar. DocumentFragment() veya Event() gibi. Element gibi bazı arayüzlerin doğrudan yapıcısı yoktur; nesneyi document.createElement() gibi bir fabrika metoduyla alırsınız.
  • Static properties / static methods: Nesne örneği yerine arayüzün kendisi üzerinden çağrılan üyeler, örneğin CSS.escape().
  • Instance properties (örnek özellikleri): Nesne üzerinden okuduğunuz veya yazdığınız değerler. Salt okunur olanlar ayrıca belirtilir.
  • Instance methods (örnek metotları): Nesne üzerinden çağırdığınız fonksiyonlar.
  • Events (olaylar): Bu arayüzün tetiklediği olaylar. MDN, bunları addEventListener() ile veya oneventname özelliğine atama yaparak dinleyebileceğinizi belirtir.

Kalıtım bu sayfaları okurken en sık gözden kaçan noktadır. Element sayfasının özellikler bölümü, Element'in özelliklerini üst arayüzü Node'dan, onun da üst arayüzü EventTarget'tan devraldığını yazar. Yani bir <button> nesnesinde addEventListener() (EventTarget), appendChild() (Node), querySelector() (Element), focus() (HTMLElement) ve disabled (HTMLButtonElement) aynı anda bulunur. Aradığınız üye bir sayfada yoksa üst arayüzün sayfasına bakın.

Üye sayfalarının (örneğin Element.closest()) düzeni de sabittir: Syntax bölümü çağrı biçimini, Parameters her parametrenin anlamını ve isteğe bağlı olup olmadığını, Return value dönen değeri, Exceptions hangi durumda hangi DOMException adının fırlatıldığını gösterir. Ardından Examples gelir. Sayfanın sonundaki Browser compatibility tablosu her tarayıcıdaki desteği gösterir; bu tablo serinin kaynak aldığı yerel kopyada bulunmadığı için yazılarda destek oranı veya sürüm numarası vermiyoruz. Bir özelliği kullanmadan önce canlı MDN sayfasındaki uyumluluk tablosuna bakmanızı öneririz.

Güvenli bağlam, izin ve kullanıcı etkinliği ne demek?

Bazı Web API'leri her sayfada çalışmaz. MDN üç tür kısıtlamadan söz eder ve ilgili API sayfaları hangisinin geçerli olduğunu belirtir. Bunları baştan bilmek, "kod neden çalışmıyor" sorusunun yanıtını çoğu zaman hemen verir.

Güvenli bağlam (secure context): Kimlik doğrulama ve gizlilik açısından belirli bir standardı karşılayan pencere veya worker ortamıdır. MDN'e göre kabaca, kaynakları HTTPS ile veya yerel geri döngü (loopback) adresinden sunulan belgeler güvenli bağlamdır; http://localhost ve file:// adresleri de güvenli sayılır, http://example.com ise sayılmaz. Bir <iframe> içindeki belgenin güvenli bağlam olması için hem kendi adresinin hem de onu gömen belgenin güvenli olması gerekir. Service worker yalnızca güvenli bağlamdan kaydedilebilir. Kodunuzun güvenli bağlamda olup olmadığını window.isSecureContext özelliği true veya false olarak bildirir. Sitenizi HTTPS'e taşımak için HTTPS ve TLS 1.3 rehberi ve karma içerik hatası çözümü yazılarına bakabilirsiniz.

İzin (permission): Konum, bildirim, pano okuma veya kamera gibi güçlü API'ler kullanıcıdan izin ister. Permissions API, navigator.permissions.query() ile bir iznin durumunu sorgulamanızı sağlar; dönen durum granted, prompt veya denied olabilir. MDN, bu durumun güvenli bağlam şartı, Permissions-Policy kısıtlamaları ve kullanıcı istemleri dahil bağlamdaki tüm güvenlik kısıtlamalarını bir arada yansıttığını belirtir. İzin isteme penceresinin nasıl açılacağı ise her API'nin kendi metoduna bağlıdır.

javascript
navigator.permissions.query({ name: "geolocation" }).then((result) => {
  if (result.state === "granted") {
    // konuma dayalı içeriği göster
  } else if (result.state === "prompt") {
    // kullanıcıya izin vermesi için bir düğme göster
  }
  // "denied" durumunda hiçbir şey yapma
});

Kullanıcı etkinliği (user activation): Açılır pencere, tam ekran veya pano yazma gibi kötüye kullanılabilecek özellikler, kullanıcının sayfayla gerçekten etkileşime girmesini şart koşar. MDN iki türü ayırır: geçici etkinlik (transient activation) kısa süre geçerlidir ve bazı API'ler tarafından tüketilebilir; kalıcı etkinlik (sticky activation) ise oturum boyunca sürer. Etkinliği tetikleyen olaylar arasında keydown, mousedown, fareyle yapılan pointerdown, fare dışı girdilerde pointerup ve touchend sayılır ve olayın isTrusted değerinin true olması gerekir. Clipboard.writeText() geçici etkinlik isteyen API'lerden biridir; bu yüzden sayfa yüklenir yüklenmez değil, bir düğme tıklamasının içinde çağrılmalıdır.

Bu üç kısıtlamanın ihlali genellikle bir DOMException ile sonuçlanır. Hangi durumda NotAllowedError, hangi durumda SecurityError aldığınızı ve bunları nasıl ayırt edeceğinizi DOMException ve güvenli bağlam hataları yazısında ayrıntılı anlattık.

Web API öğrenirken sık yapılan hatalar

  • Dil ile API'yi karıştırmak: document veya localStorage Node.js'te tanımlı değildir. Tarayıcı kodunu Node.js'te çalıştırıp hata aldığınızda sorun kodda değil, ortamdadır.
  • Kalıtımı unutmak: Bir özelliği HTMLInputElement sayfasında bulamadığınızda HTMLElement, Element ve Node sayfalarına bakmamak.
  • Uyumluluk tablosuna bakmamak: Yeni bir API'nin her tarayıcıda olduğunu varsaymak. Özellik algılama ("clipboard" in navigator gibi) ve MDN tablosu birlikte kullanılmalıdır.
  • HTTP üzerinde test etmek: Güvenli bağlam isteyen bir API'yi düz HTTP ile yayınlanan bir sunucuda denemek. Yerel geliştirmede localhost güvenli sayılır, ancak canlı sitede HTTPS gerekir.
  • Hata adlarını yok saymak: catch içinde yalnızca "hata oluştu" yazmak. DOMException nesnesinin name değeri sorunun türünü doğrudan söyler.

Sık Sorulan Sorular

Web API öğrenmek için hangi JavaScript bilgisi gerekir?

Fonksiyonlar, nesneler, diziler ve olay dinleyicilerinde kullanılan ok fonksiyonları yeterli bir başlangıçtır. Ağ ve depolama API'leri Promise döndürdüğü için async/await konusunu da bilmeniz gerekir. Kodun ne zaman çalıştığını anlamak için JavaScript olay döngüsü yazısı da faydalıdır.

DOM ile HTML aynı şey mi?

Hayır. HTML, sunucudan gelen metin biçimindeki kaynaktır; DOM ise tarayıcının bu kaynağı ayrıştırarak bellekte kurduğu nesne ağacıdır. JavaScript HTML metnini değil, DOM'u değiştirir. Ayrıntılar DOM nedir yazısında.

Bir API'nin tarayıcımda olup olmadığını nasıl anlarım?

İki yol vardır: Canlı MDN sayfasındaki Browser compatibility tablosuna bakmak ve kodda özellik algılama yapmak, yani API'yi kullanmadan önce ilgili nesnenin veya metodun var olup olmadığını kontrol etmek. Bu seri yerel bir MDN kopyasına dayandığı için destek bilgisi vermiyor; her yazıda uyumluluk tablosuna yönlendiriyoruz.

Bu yazılardaki örnekler çalıştırılarak mı denendi?

Tarayıcıdan bağımsız standart API örnekleri (EventTarget, Request, Response, Blob, TextEncoder, crypto.subtle gibi) Node.js 24.4.0 ile çalıştırılarak denendi ve çıktı yorumları gerçek çıktıyla eşleştirildi. DOM ve diğer tarayıcıya özgü örnekler MDN belgelerine göre yazıldı; bunlarda çıktı yorumunu yalnızca MDN sayfası o çıktıyı gösteriyorsa verdik.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: JavaScript öğrenme rehberi · HTML öğrenme rehberi · DOM nedir · Fetch API kullanımı · DOMException ve güvenli bağlam hataları