La API de Web SQL Database, que te permite almacenar datos de una manera 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 funciona con Safari) y se mantuvo activa en el motor Blink (que utiliza Chrome), Gecko (que usa la tecnología de Firefox) nunca implementó esta función y WebKit la quitó en 2019.
El World Wide Web Consortium (W3C) recomienda a quienes necesitan bases de datos web que adopten tecnologías de la API de Web Storage, como localStorage
, sessionStorage
o IndexedDB.
Estas tecnologías muestran sus fortalezas cuando se trata de almacenes de clave-valor y datos estructurados, pero también tienen debilidades, como la falta de un lenguaje de consultas sólido. Las personas quieren SQL en la web por una razón.
Pasos para la baja y la eliminación de Web SQL
- [ Listo.] Web SQL dejó de estar disponible y se quitó para 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) y se mostró un mensaje de advertencia en el panel de problemas de las Herramientas para desarrolladores de Chrome.
- [ Listo.] El acceso a SQL web en contextos no seguros ya no está disponible a partir de Chromium 110 (4 de enero de 2022). Hay una política empresarial disponible para seguir usando la función 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 Problemas de Herramientas para desarrolladores de Chrome.
- [prueba de baja disponible para seguir usando Web SQL 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. Estamos aquí]. Hay una
Cómo dar el siguiente paso
Como se mencionó 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, por mucho, no en todos.
Razones para dejar el almacenamiento a disposición de los desarrolladores web
Con la llegada de Wasm, las soluciones SQL o NoSQL pueden llegar a la Web. Un ejemplo es DuckDB-Wasm, el 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 estamos planeando simplemente quitar Web SQL. De hecho, la reemplazamos por algo que la comunidad de código abierto mantendrá, que se entrega como un paquete que se puede actualizar a voluntad, sin la carga de implementar correcciones y funciones nuevas directamente en los navegadores. Nuestro objetivo es permitir que los desarrolladores traigan sus bases de datos a la Web.
Además, esperamos que este ejemplo ayude a prosperar un nuevo ecosistema de bases de datos de código abierto. El lanzamiento de los controladores de acceso al sistema de archivos finalmente proporciona el nuevo tipo primitivo en el que se pueden compilar soluciones de almacenamiento personalizadas.
Motivos por los que Web SQL deja de estar disponible
Cuestiones de sustentabilidad y seguridad
La especificación de Web SQL no se puede implementar de forma sustentable, lo que limita la innovación y las funciones nuevas. En la última versión estándar, literalmente se 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, pero implementar Web SQL implica que los navegadores deben 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 genera un 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. Ser un niño de fines de la década de 2000 es un excelente ejemplo del "infierno de las devoluciones de llamada", como se demuestra en la siguiente muestra de código (cortesía de Nolan Lawson). Como puedes ver, las instrucciones de SQL (que usan el dialecto SQL 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 ejecutas este código y, luego, inspeccionas la tabla creada con las Herramientas para desarrolladores de Chrome, este es el resultado:
Falta de asistencia para implementadores
Además de la forma de la API arcane (al menos desde el punto de vista actual), Mozilla tenía muchas inquietudes sobre la compilación de Web SQL en SQLite:
"Creemos que [SQLite] no es la base adecuada para una API expuesta a contenido web general, sobre todo porque no existe un estándar creíble y ampliamente aceptado que establezca subconjuntos de SQL de una manera útil. Además, no queremos que los cambios en SQLite afecten a la Web más adelante y no consideramos prudente aprovechar las versiones principales de navegadores (y un estándar web) para SQLite".
Puedes leer sobre las inquietudes de Mozilla en la entrada de blog anterior de Mozillan Vladimir Vukićević. Para obtener más información sobre el historial, consulta los minutos del grupo de trabajo de aplicaciones web de W3C (y, si realmente quieres entrar en detalle, lee los registros de IRC) y los archivos de listas de distribución. Además, en la entrada de blog de Nolan Lawson, se proporciona una buena descripción general de lo que sucedió.
Comentarios
Si tienes alguna inquietud sobre los pasos de baja que se indican en esta publicación, comunícate con nosotros en la lista de distribución de blink-dev. Cualquier persona puede unirse a este grupo, y cualquier persona puede publicar contenido.
Vínculos relacionados
- Entrada ChromeStatus: WebSQL dejará de estar disponible y se quitará en contextos de terceros
- Entrada ChromeStatus: Dar de baja y quitar WebSQL en contextos no seguros
- Intento de dar de baja y quitar: WebSQL en contextos de terceros
- Intento de dar de baja y quitar: WebSQL en contextos no seguros
- Problema de Chromium: WebSQL dejará de estar disponible y se quitará en contextos de terceros
- Problema de Chromium: WebSQL dejó de estar disponible y se quitó 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 origen
Agradecimientos
Joe Medley, Ben Morss y Joshua Bell revisaron este artículo.