Web SQL'in kullanımdan kaldırılması ve kaldırılması

Kullanıcının bilgisayarında verileri yapılandırılmış bir şekilde depolamanıza olanak tanıyan Web SQL Veritabanı API'si (dahili olarak SQLite veritabanı motorunu temel alır), Nisan 2009'da kullanıma sunuldu ve Kasım 2010'da kullanımdan kaldırıldı. Bu özellik WebKit'te (Safari'yi destekleyen) uygulanmış ve Blink motorunda (Chrome'u destekleyen) etkin kalmıştır. Ancak Gecko (Firefox'u destekleyen) bu özelliği hiçbir zaman uygulamamış ve WebKit, 2019'da bu özelliği kaldırmıştır.

World Wide Web Consortium (W3C), web veritabanına ihtiyaç duyan kullanıcıların Web Depolama API'yi, localStorage ve sessionStorage gibi teknolojileri ya da IndexedDB'i kullanmasını önerir. Bu teknolojiler, anahtar/değer depoları ve yapılandırılmış veriler söz konusu olduğunda güçlü yönlerini gösterir ancak güçlü bir sorgu dilinin olmaması gibi zayıf yönleri de vardır. Kullanıcılar web'de SQL kullanmak istiyor.

Web SQL desteğinin sonlandırılması ve kaldırılması adımları

  • [ Bitti.] Web SQL, Chromium 97'de ( 4 Ocak 2022) üçüncü taraf bağlamları için desteği sonlandırıldı ve kaldırıldı.
  • [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 105 ( 4 Ocak 2022) sürümünden itibaren kullanımdan kaldırıldı. Bu tarihte Chrome DevTools Sorun panelinde bir uyarı mesajı gösterildi.

Güvenli olmayan bağlamlarda WebSQL desteği sonlandırıldı uyarısını içeren Chrome DevTools Sorunlar paneli.

  • [ Bitti.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 110 ( 4 Ocak 2022) sürümünden itibaren kullanılamamaktadır. Bu özelliği kullanmaya devam etmek için kurumsal politika, Chromium 110 ( 4 Ocak 2022) ile Chromium 123 ( 4 Ocak 2022) arasında kullanılabilir.
  • [ Bitti.] Tüm bağlamlarda Web SQL erişimi, Chromium 115 ( 4 Ocak 2022) itibarıyla kullanımdan kaldırıldı ve Chrome Geliştirici Araçları Sorun panelinde bir uyarı mesajı gösteriliyor.
  • [ Bitti.] Web SQL'i kullanmaya devam etmek için Chromium 117 ( 4 Ocak 2022) ile Chromium 123 ( 4 Ocak 2022) arasında destek sonu deneme sürümü sunulmuştur. Desteği sonlandırma denemeleri hakkında daha fazla bilgi edinmek için Kaynak denemelerini kullanmaya başlama başlıklı makaleyi inceleyin.
  • [ Bitti.] Chromium 119'dan itibaren tüm bağlamlarda Web SQL erişimi artık kullanılamıyor.

Şimdi beni ne bekliyor?

Giriş bölümünde belirtildiği gibi, Web Depolama API'si teknolojileri (ör. localStorage ve sessionStorage) veya IndexedDB standardı, birçok durumda iyi alternatifler olsa da her durumda iyi bir alternatif değildir.

Depolama alanını web geliştiricilerine bırakmanın nedeni

Wasm'in gelişiyle birlikte SQL veya NoSQL çözümleri web'e gelebilir. Örneğin, DuckDB-Wasm ve absurd-sql. Bu çalışmalara dayanarak, geliştirici topluluğunun tarayıcı tedarikçilerinden daha hızlı ve daha iyi şekilde yeni depolama çözümleri oluşturabileceğini düşünüyoruz.

Web SQL'i kaldırmanın yanı sıra başka adımlar da atacağız. Aslında, açık kaynak topluluğu tarafından yönetilecek ve doğrudan tarayıcılara düzeltme ve yeni özellikler ekleme yükünü ortadan kaldıracak, dilediğiniz zaman güncellenebilen bir paket olarak sunulan bir şeyle değiştirdik. Amacımız, geliştiricilerin kendi veritabanlarını web'e getirmelerine olanak tanımaktır.

Ayrıca bu örneğin, açık kaynak veritabanı ekosisteminin gelişmesine yardımcı olacağını umuyoruz. Dosya sistemi erişim tutamaçlarının kullanıma sunulması, özel depolama alanı çözümlerinin oluşturulabileceği yeni bir temel yapı sağladı.

Web SQL desteğinin sonlandırılmasının nedenleri

Sürdürülebilirlik ve güvenlikle ilgili endişeler

Web SQL spesifikasyonu sürdürülebilir bir şekilde uygulanamadığından yenilikleri ve yeni özellikleri sınırlandırıyor. Standartın son sürümünde "Kullanıcı aracıları, Sqlite 3.6.19 tarafından desteklenen SQL lehçesini uygulamalıdır" ifadesi yer almaktadır.

SQLite başlangıçta kötü amaçlı SQL ifadeleri çalıştırmak için tasarlanmamıştı ancak Web SQL'i uygulamak, tarayıcıların tam olarak bunu yapması gerektiği anlamına gelir. Güvenlik ve kararlılık düzeltmelerini takip etme ihtiyacı, Chromium'da SQLite'in güncellenmesini zorunlu kılıyor. Bu durum, Web SQL'in tam olarak SQLite 3.6.19 gibi davranma şartıyla doğrudan çelişir.

API şekli

Web SQL de yaşını gösteren bir API'dir. 2000'lerin sonlarına ait bir teknoloji olan bu yöntem, aşağıdaki kod örneğinde (Nolan Lawson'un izniyle) gösterildiği gibi "geri çağırma cehennemi"nin mükemmel bir örneğidir. Gördüğünüz gibi, SQL ifadeleri (SQLite SQL lehçesi kullanılarak) veritabanı yöntemlerine dize olarak iletilir.

openDatabase(
  // Name
  'mydatabase',
  // Version
  1,
  // Display name
  'mydatabase',
  // Estimated size
  5000000,
  // Creation callback
  function (db) {
    db.transaction(
      // Transaction callback
      function (tx) {
        // Execute SQL statement
        tx.executeSql(
          // SQL statement
          'create table rainstorms (mood text, severity int)',
          // Arguments
          [],
          // Success callback
          function () {
            // Execute SQL statement
            tx.executeSql(
              // SQL statement
              'insert into rainstorms values (?, ?)',
              // Arguments
              ['somber', 6],
              // Success callback
              function () {
                // Execute SQL statement
                tx.executeSql(
                  // SQL statement
                  'select * from rainstorms where mood = ?',
                  // Arguments
                  ['somber'],
                  // Success callback
                  function (tx, res) {
                    // Do something with the result
                    var row = res.rows.item(0);
                    console.log(
                      'rainstorm severity: ' +
                        row.severity +
                        ',  my mood: ' +
                        row.mood,
                    );
                  },
                );
              },
            );
          },
        );
      },
      // Error callback
      function (err) {
        console.log('Transaction failed!: ' + err);
      },
      // Success callback);
      function () {
        console.log('Transaction succeeded!');
      },
    );
  },
);

Bu kodu çalıştırıp oluşturulan tabloyu Chrome Geliştirici Araçları ile incelerseniz aşağıdaki sonucu elde edersiniz:

Chrome Geliştirici Araçları'ndaki Web SQL bölümünü incelediğinizde, "mydatabase" adlı bir veritabanı ve "rainstorms" adlı bir tablo görürsünüz. Bu tabloda, "mood" (metin) ve "severity" (tam sayı) sütunları bulunur. "mood" sütununda "somber" (kasvetli) ve "severity" sütununda altı değerini içeren bir giriş vardır.

Uygulayıcı desteğinin olmaması

API'nin anlaşılması zor biçimi (en azından günümüz açısından) dışında Mozilla, Web SQL'in SQLite üzerine inşa edilmesiyle ilgili birçok endişe taşıdı:

"[SQLite]'in, genel web içeriğine açık bir API için doğru temel olduğunu düşünmüyoruz. Bunun en önemli nedeni, SQL'i yararlı bir şekilde alt kümelerine ayıran güvenilir ve yaygın olarak kabul gören bir standart olmamasıdır. Ayrıca, SQLite'teki değişikliklerin web'i daha sonra etkilemesini istemiyoruz ve SQLite'te büyük tarayıcı sürümlerinden (ve bir web standardından) yararlanmanın akıllıca olduğunu düşünmüyoruz."

Mozilla'nın endişeleri hakkında daha fazla bilgiyi eski Mozilla çalışanı Vladimir Vukićević'in blog yayınında bulabilirsiniz. Daha fazla bilgi için W3C Web Uygulamaları Çalışma Grubu tutanakları'na (ve ayrıntılara gerçekten dalmak istiyorsanız IRC günlüklerine) ve posta listesi arşivlerine göz atın. Ayrıca, Nolan Lawson'un blog yayını da yaşananlara genel bir bakış sunar.

Geri bildirim

Bu yayında açıklanan desteği sonlandırma adımları hakkında herhangi bir endişeniz varsa blink-dev posta listesinde bize bildirin. Bu grup herkese açıktır ve herkes içerik yayınlayabilir.

Teşekkür ederiz

Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelenmiştir.