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.
- [ 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.
- [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.] Web SQL'i kullanmaya devam etmek için
- [ 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:
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.
İlgili bağlantılar
- ChromeStatus girişi: Üçüncü taraf bağlamlarında WebSQL desteğinin sonlandırılması ve kaldırılması
- ChromeStatus girişi: Güvenli olmayan bağlamlarda WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Desteği sonlandırma ve kaldırma amacı: Üçüncü taraf bağlamında WebSQL
- Desteği sonlandırma ve kaldırma amacı: Güvenli olmayan bağlamlarda WebSQL
- Chromium sorunu: Üçüncü taraf bağlamlarında WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Chromium sorunu: Güvenli olmayan bağlamlarda WebSQL desteğini sonlandırma ve WebSQL'i kaldırma
- Chromium sorunu: WebSQL desteğini sonlandırma ve WebSQL'i kaldırma (Window#openDatabase)
- Tarayıcıda Origin Private File System tarafından desteklenen SQLite Wasm
Teşekkür ederiz
Bu makale Joe Medley, Ben Morss ve Joshua Bell tarafından incelenmiştir.