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 Firefox'u destekleyen Gecko bu özelliği hiçbir zaman uygulamamış ve WebKit bu özelliği 2019'da kaldırmıştır.

World Wide Web Consortium (W3C), web veritabanlarına ihtiyaç duyan localStorage, sessionStorage veya IndexedDB gibi Web Storage API teknolojilerine ihtiyaç duyanları teşvik eder. 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ı

  • [ Tamamlandı.] Web SQL desteği sonlandırıldı ve Chromium 97'de üçüncü taraf bağlamları nedeniyle kaldırıldı ( 4 Ocak 2022).
  • [ Tamamlandı.] 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 Issue (Sorun) panelinde bir uyarı mesajı gösterildi.

Güvenli olmayan bağlamlarda Web SQL okuyan bir uyarı içeren Chrome Geliştirici Araçları Sorunlar paneli kullanımdan kaldırıldı.

  • [ Tamamlandı.] Güvenli olmayan bağlamlarda Web SQL erişimi, Chromium 110'dan itibaren kullanılamayacaktır (4 Ocak 2022). 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.
  • [ Tamamlandı.] 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 kullanımdan kaldırma denemesi, Chromium 117'den ( 4 Ocak 2022) Chromium 123'e ( 4 Ocak 2022'de) 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 önlemler de alıyoruz. Hatta bunun yerine, açık kaynak topluluğu tarafından korunan, düzeltmeleri ve yeni özellikleri doğrudan tarayıcılara ekleme zahmetine girmeden istenilen şekilde güncellenebilecek bir paket olarak sunulan bir şey ekledik. 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 geliştirilebileceği yeni bir temel yapı sağladı.

Web SQL'in kullanımdan kaldırılma 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üzeltmelerine uyma ihtiyacı, Chromium'da SQLite'ın güncellenmesini zorunlu kılar. 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 sonuç şu şekilde olur:

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" (duygu) ve "severity" (şiddet) 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'nın SQLite üzerine inşa edilen Web SQL ile ilgili birçok endişesi vardı:

"[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 ihtiyatlı bir yaklaşım olduğunu düşünmüyoruz."

Eski Mozillan Vladimir Vukićević'in blog yayınında Mozilla'nın endişeleri hakkında bilgi edinebilirsiniz. Daha fazla geçmiş için W3C Web Uygulamaları Çalışma Grubu dakikalarına göz atın (ayrıntıları incelemek istiyorsanız IRC günlüklerini ve posta listesi arşivlerini okuyun). Ayrıca, Nolan Lawson'un blog yayını da yaşananlara genel bir bakış sunar.

Geri bildirim

Bu yayında açıklanan kullanımdan kaldırma adımlarıyla ilgili endişeleriniz varsa blink-dev posta listesinden 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.