L'API Web SQL Database, che consente di memorizzare i dati in modo strutturato sul computer dell'utente (basata internamente sul motore del database SQLite), è stata introdotta ad aprile 2009 e abbandonata a novembre 2010. Sebbene sia stata implementata in WebKit (che è alla base di Safari) e sia rimasta attiva nel motore Blink (che è alla base di Chrome), Gecko (che è alla base di Firefox) non ha mai implementato questa funzionalità e WebKit l'ha rimossa nel 2019.
Il World Wide Web Consortium (W3C)
incoraggia
chi ha bisogno di database web ad adottare
API Web Storage
tecnologie come
localStorage
e
sessionStorage
,
o
IndexedDB.
Queste tecnologie mostrano i loro punti di forza per quanto riguarda gli archivi chiave/valore e i dati strutturati, ma hanno anche punti deboli, come la mancanza di un linguaggio di query efficace. Le persone vogliono SQL sul web per un motivo.
Procedura di ritiro e rimozione di Web SQL
- [ Fine.] Web SQL è stato ritirato e rimosso per i contesti di terze parti in Chromium 97 ( 4 gennaio 2022).
- [ Fine.] L'accesso a Web SQL in contesti non sicuri è stato ritirato a partire da Chromium 105 ( 4 gennaio 2022), quando è stato visualizzato un messaggio di avviso nel riquadro dei problemi di Chrome DevTools.
- [ Fine.] L'accesso a Web SQL in contesti non sicuri non è più disponibile a partire da Chromium 110 ( 4 gennaio 2022). Un criterio aziendale per continuare a utilizzare la funzionalità è disponibile da Chromium 110 ( 4 gennaio 2022) a Chromium 123 ( 4 gennaio 2022).
- [ Fine.] L'accesso a Web SQL in tutti i contesti è stato ritirato a partire da Chromium 115 (4 gennaio 2022) e viene visualizzato un messaggio di avviso nel riquadro dei problemi di Chrome DevTools.
- [prova di ritiro per continuare a utilizzare Web SQL da Chromium 117 (4 gennaio 2022) a Chromium 123 (4 gennaio 2022). Per scoprire di più sulle prove di ritiro, consulta Guida introduttiva alle prove delle origini. Fine.] È stata disponibile una
- [ Fine.] L'accesso a Web SQL in tutti i contesti non è più disponibile da Chromium 119.
Come procedere
Come sottolineato nell'introduzione, le tecnologie dell'API Web Storage come localStorage
e sessionStorage
o lo standard IndexedDB sono buone alternative in molti casi, ma non in tutti.
Motivazione per lasciare lo spazio di archiviazione agli sviluppatori web
Con l'avvento di Wasm, le soluzioni SQL o NoSQL possono essere disponibili sul web. Un esempio è DuckDB-Wasm, un altro è absurd-sql. Sulla base di queste creazioni, riteniamo che la community di sviluppatori possa eseguire l'iterazione e creare nuove soluzioni di archiviazione più velocemente e meglio dei fornitori di browser.
Non prevediamo di rimuovere solo Web SQL. In realtà, lo abbiamo sostituito con qualcosa che verrà gestito dalla community open source, fornito come pacchetto che può essere aggiornato a piacere, senza il fastidio di dover introdurre correzioni e nuove funzionalità direttamente nei browser. Il nostro obiettivo è consentire agli sviluppatori di portare il proprio database sul web.
Inoltre, ci auguriamo che questo esempio contribuisca a far prosperare un nuovo ecosistema di database open source. Il rilascio di handle di accesso al file system fornisce finalmente il nuovo elemento su cui possono essere costruite soluzioni di archiviazione personalizzate.
Motivi della ritiro di SQL web
Problemi di sostenibilità e sicurezza
La specifica Web SQL non può essere implementata in modo sostenibile, il che limita l'innovazione e le nuove funzionalità. L'ultima versione dello standard afferma letteralmente "Gli user agent devono implementare il dialetto SQL supportato da Sqlite 3.6.19".
SQLite non è stato inizialmente progettato per eseguire istruzioni SQL dannose, ma l'implementazione di Web SQL significa che i browser devono fare esattamente questo. La necessità di stare al passo con le correzioni di sicurezza e stabilitá richiede l'aggiornamento di SQLite in Chromium. Ciò è in diretto contrattempo con il requisito di Web SQL di comportarsi esattamente come SQLite 3.6.19.
Forma dell'API
Anche SQL web è un'API che mostra la sua età. Essendo nato alla fine degli anni 2000, è un ottimo esempio di "inferno di callback", come dimostra il seguente codice di esempio (per gentile concessione di Nolan Lawson). Come puoi vedere, le istruzioni SQL (che utilizzano il dialetto SQL di SQLite) vengono passate come stringhe ai metodi del database.
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!');
},
);
},
);
Se esegui questo codice e esamini la tabella creata con Chrome DevTools, il risultato è il seguente:
Mancanza di assistenza per gli implementatori
A parte la forma arcana dell'API (almeno dal punto di vista attuale), Mozilla aveva molti dubbi sul fatto che Web SQL fosse basato su SQLite:
"Non riteniamo che [SQLite] sia la base giusta per un'API esposta ai contenuti web generali, non ultimo perché non esiste uno standard credibile e ampiamente accettato che sottoinserisca SQL in modo utile. Inoltre, non vogliamo che le modifiche a SQLite influiscano in un secondo momento sul web e non riteniamo prudente utilizzare le release dei principali browser (e uno standard web) per SQLite."
Puoi leggere i dubbi di Mozilla nel post del blog dell'ex Mozilla Vladimir Vukićević. Per ulteriori informazioni storiche, consulta i verbali del gruppo di lavoro W3C per le applicazioni web (e, se vuoi davvero entrare nei dettagli, leggi i log IRC) e gli archivi della mailing list. Inoltre, il post del blog di Nolan Lawson fornisce una buona panoramica di cosa è successo.
Feedback
Se hai qualsiasi dubbio sui passaggi di ritiro comunicati in questo post, non esitare a contattarci sulla mailing list blink-dev. L'iscrizione a questo gruppo è aperta a tutti e chiunque può pubblicare.
Link correlati
- Voce di ChromeStatus: Ritiro e rimozione di WebSQL in contesti di terze parti
- Voce di ChromeStatus: Ritiro e rimozione di WebSQL in contesti non sicuri
- Intenzione di ritirare e rimuovere: Utilizzo di WebSQL in contesti di terze parti
- Intento di ritiro e rimozione: WebSQL in contesti non sicuri
- Problema di Chromium: ritiro e rimozione di WebSQL in contesti di terze parti
- Problema di Chromium: Ritiro e rimozione di WebSQL in contesti non sicuri
- Problema di Chromium: ritiro e rimozione di WebSQL (Window#openDatabase)
- SQLite Wasm nel browser supportato dal file system privato di Origin
Ringraziamenti
Questo articolo è stato esaminato da Joe Medley, Ben Morss e Joshua Bell.