Da de baja y quita Web SQL

La API de Web SQL Database, que te permite almacenar datos de manera estructurada en la computadora del usuario (internamente basada 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 utiliza Safari) y se mantuvo activa en el motor Blink (que utiliza Chrome), Gecko (que utiliza Firefox) nunca implementó esta función, por lo que WebKit la quitó en 2019.

El World Wide Web Consortium (W3C) recomienda 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 cuando se trata de almacenes de clave-valor y datos estructurados, pero se sabe que también tienen debilidades, como la falta de un lenguaje de consulta sólido. Las personas quieren usar SQL en la Web por alguna razón.

Pasos de eliminación y baja de SQL Web

  • [ 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 SQL web 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 las Herramientas para desarrolladores de Chrome.

El panel Problemas de las Herramientas para desarrolladores de Chrome con una advertencia que indica que Web SQL en contextos no seguros dejó de estar disponible.

  • [ 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 SQL Web 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 las Herramientas para desarrolladores de Chrome.
  • [ Listo] Una prueba de baja para seguir usando Web SQL estuvo disponible desde Chromium 117 (4 de enero de 2022) a 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] El acceso a SQL web en todos los contextos ya no está disponible en Chromium 119.

Cómo dar el siguiente paso

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 todos.

Razones para dejarles el almacenamiento a los desarrolladores web

Con la llegada de Wasm, las soluciones de SQL o NoSQL pueden llegar a la Web. Un ejemplo es DuckDB-Wasm, otro es absurd-sql. A partir de estas creaciones, creemos que la comunidad de desarrolladores puede iterar y crear nuevas soluciones de almacenamiento más rápido y mejores que los proveedores de navegadores.

No planeamos simplemente quitar Web SQL. De hecho, lo reemplazamos por algo que mantendrá la comunidad de código abierto, que funciona 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 que los desarrolladores traigan sus propias 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 la nueva primitiva en la que se pueden compilar soluciones de almacenamiento personalizadas.

Motivos para dar de baja Web SQL

Inquietudes sobre 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. La última versión del estándar establece literalmente "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, la implementación de Web SQL implica que los navegadores deben hacer exactamente eso. La necesidad de mantenerse al día con las correcciones de seguridad y estabilidad determina 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 hijo de fines de la década del 2000, es un excelente ejemplo de "infierno de devolución de llamada", como lo demuestra la siguiente muestra de código (cortesía de Nolan Lawson). Como puedes ver, las instrucciones de SQL (con 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 e inspeccionas la tabla creada con las Herramientas para desarrolladores de Chrome, este es el resultado:

Al inspeccionar la sección de Web SQL en las Herramientas para desarrolladores de Chrome, se muestra una base de datos llamada mydatabase con una tabla llamada lluvias de lluvia con el estado de ánimo de las columnas (texto) y la gravedad (número entero) que tiene una entrada con un estado de ánimo sombrío y una gravedad de seis.

Falta de asistencia para implementadores

Además de la arcana forma de API (al menos desde el punto de vista actual), Mozilla tenía muchas preocupaciones por la compilación de Web SQL sobre SQLite:

“No creemos que [SQLite] sea la base correcta para una API expuesta a contenido web general, y sobre todo porque no existe un estándar creíble y ampliamente aceptado que agrupe SQL de forma útil. Además, no queremos que los cambios en SQLite afecten la Web más adelante y no creemos que sea prudente aprovechar las principales actualizaciones del navegador (y un estándar web) para SQLite".

Puedes leer acerca de las inquietudes de Mozilla en la entrada de blog anterior de Mozillan Vladimir Vukićević. Para obtener más historial, consulta los minutos del grupo de trabajo de aplicaciones web de W3C (y, si quieres entrar en detalles, 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 preocupación sobre los pasos de baja que se comunican en esta publicación, comunícate con nosotros en la lista de distribución de blink-dev. La pertenencia a este grupo está abierta para cualquier persona, y cualquier persona tiene permiso para publicar.

Agradecimientos

Joe Medley, Ben Morss y Joshua Bell revisaron este artículo.