La API de Web SQL Database, que te permite almacenar datos de forma estructurada en la computadora del usuario (basada internamente en el motor de base de datos SQLite), se presentó en abril de 2009 y se abandonó en noviembre de 2010. Si bien se implementó en WebKit (que potencia Safari) y permaneció activo en el motor Blink (que potencia Chrome), Gecko (que potencia Firefox) nunca implementó esta función y WebKit la quitó en 2019.
El Consorcio World Wide Web (W3C) alienta a quienes necesitan bases de datos web a adoptar tecnologías de la API de Web Storage, como localStorage
y sessionStorage
, o IndexedDB.
Estas tecnologías muestran sus fortalezas en lo que respecta a los almacenes de pares clave-valor y los datos estructurados, pero también se reconoce que tienen debilidades, como la falta de un lenguaje de consulta sólido. Las personas quieren usar SQL en la Web por un motivo.
Pasos para dar de baja y quitar WebSQL
- [ Listo.] Web SQL dejó de estar disponible y se quitó para los contextos de terceros en Chromium 97 (4 de enero de 2022).
- [ Listo.] El acceso a Web SQL en contextos no seguros dejó de estar disponible a partir de Chromium 105 (4 de enero de 2022), momento en el que se mostró un mensaje de advertencia en el panel de problemas de Chrome DevTools.
- [ Listo.] El acceso a Web SQL en contextos no seguros ya no está disponible a partir de Chromium 110 (4 de enero de 2022). Hay una política empresarial para seguir usando la función disponible desde Chromium 110 (4 de enero de 2022) hasta Chromium 123 (4 de enero de 2022).
- [ Listo.] El acceso a Web SQL en todos los contextos dejó de estar disponible a partir de Chromium 115 (4 de enero de 2022) y se muestra un mensaje de advertencia en el panel de problemas de Chrome DevTools.
- [prueba de baja para seguir usando WebSQL estuvo disponible desde Chromium 117 (4 de enero de 2022) hasta Chromium 123 (4 de enero de 2022). Para obtener más información sobre las pruebas de baja, consulta Comienza a usar las pruebas de origen. Listo.] Una
- [ Listo.] El acceso a Web SQL en todos los contextos ya no está disponible a partir de Chromium 119.
Lo que vendrá
Como se señaló en la introducción, las tecnologías de la API de Web Storage, como localStorage
y sessionStorage
, o el estándar IndexedDB, son buenas alternativas en muchos casos, pero no en todos.
Razones para dejar el almacenamiento a los desarrolladores web
Con el advenimiento de Wasm, las soluciones SQL o NoSQL pueden llegar a la Web. Un ejemplo es DuckDB-Wasm, y otro es absurd-sql. En función de estas creaciones, creemos que la comunidad de desarrolladores puede iterar y crear nuevas soluciones de almacenamiento más rápido y mejor que los proveedores de navegadores.
No planeamos quitar solo WebSQL. De hecho, lo reemplazamos por algo que la comunidad de código abierto mantendrá y que se entregará como un paquete que se puede actualizar a voluntad, sin la carga de introducir correcciones y funciones nuevas directamente en los navegadores. Nuestro objetivo es permitir que los desarrolladores lleven su propia base de datos a la Web.
Además, esperamos que este ejemplo ayude a que prospere un nuevo ecosistema de bases de datos de código abierto. El lanzamiento de los controles de acceso del sistema de archivos finalmente proporciona la nueva primitiva en la que se pueden compilar soluciones de almacenamiento personalizadas.
Motivos para dar de baja Web SQL
Inquietudes sobre la sostenibilidad y la seguridad
La especificación de SQL web no se puede implementar de forma sostenible, lo que limita la innovación y las funciones nuevas. La última versión del estándar establece "Los agentes de usuario deben implementar el dialecto SQL compatible con Sqlite 3.6.19".
Inicialmente, SQLite no se diseñó para ejecutar instrucciones de SQL maliciosas; sin embargo, implementar Web SQL significa que los navegadores tienen que hacer exactamente esto. La necesidad de mantenerse al día con las correcciones de seguridad y estabilidad exige la actualización de SQLite en Chromium. Esto entra en conflicto directo con el requisito de Web SQL de comportarse exactamente como SQLite 3.6.19.
Forma de la API
Web SQL también es una API que muestra su antigüedad. Como es un producto de finales de la década de 2000, es un gran ejemplo del “infierno de devoluciones de llamada”, como lo demuestra la siguiente muestra de código (cortesía de Nolan Lawson). Como puedes ver, las instrucciones SQL (con el dialecto SQL de SQLite) se pasan como cadenas a los métodos de la base de datos.
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!');
},
);
},
);
Si ejecutaras este código y inspeccionas la tabla creada con las Herramientas para desarrolladores de Chrome, este sería el resultado:
Falta de asistencia del implementador
Además de la forma esotérica de la API (al menos desde el punto de vista actual), Mozilla tenía muchas preocupaciones sobre el hecho de que Web SQL se compilara en SQLite:
"No creemos que [SQLite] sea la base adecuada para una API expuesta al contenido web general, en particular porque no existe un estándar creíble y ampliamente aceptado que subconjunto SQL de una manera útil. Además, no queremos que los cambios en SQLite afecten a la Web más adelante y no creemos que sea prudente aprovechar las versiones principales del navegador (y un estándar web) para SQLite".
Puedes leer sobre las inquietudes de Mozilla en la entrada de blog del exmiembro de Mozilla Vladimir Vukićević. Para obtener más información histórica, consulta los actas del grupo de trabajo de aplicaciones web del W3C (y, si realmente quieres entrar en detalles, lee los registros de IRC) y los archivos de la lista de distribución. Además, la entrada de blog de Nolan Lawson proporciona una buena descripción general de lo que sucedió.
Comentarios
Si tienes alguna inquietud sobre los pasos de baja comunicados en esta publicación, comunícate con nosotros en la lista de distribución blink-dev. Cualquier persona puede unirse a este grupo y publicar en él.
Vínculos relacionados
- Entrada de ChromeStatus: Dar de baja y quitar WebSQL en contextos de terceros
- Entrada de ChromeStatus: Dar de baja y quitar WebSQL en contextos no seguros
- Intento de dar de baja y quitar: WebSQL en contextos de terceros
- Intención de dar de baja y quitar: WebSQL en contextos no seguros
- Problema de Chromium: Dar de baja y quitar WebSQL en contextos de terceros
- Problema de Chromium: Dar de baja y quitar WebSQL en contextos no seguros
- Problema de Chromium: Dar de baja y quitar WebSQL (Window#openDatabase)
- SQLite Wasm en el navegador respaldado por el sistema de archivos privados de Origin
Agradecimientos
Joe Medley, Ben Morss y Joshua Bell revisaron este artículo.