Abandonner et supprimer Web SQL

L'API Web SQL Database, qui vous permet de stocker des données de manière structurée sur l'ordinateur de l'utilisateur (basée en interne sur le moteur de base de données SQLite), a été lancée en avril 2009 et abandonnée en novembre 2010. Bien qu'elle ait été implémentée dans WebKit (qui alimente Safari) et qu'elle soit restée active dans le moteur Blink (qui alimente Chrome), Gecko (qui alimente Firefox) ne l'a jamais implémentée et WebKit l'a supprimée en 2019.

Le World Wide Web Consortium (W3C) encourage les personnes ayant besoin de bases de données Web à adopter des technologies de l'API Web Storage telles que localStorage et sessionStorage, ou IndexedDB. Ces technologies montrent leurs points forts en ce qui concerne les magasins de clés/valeurs et les données structurées, mais elles présentent également des faiblesses, comme l'absence d'un langage de requêtes performant. Les utilisateurs veulent SQL sur le Web pour une raison.

Étapes d'abandon et de suppression de WebSQL

  • [ OK.] Web SQL a été abandonné et supprimé pour les contextes tiers dans Chromium 97 (4 janvier 2022).
  • [ OK.] L'accès Web SQL dans les contextes non sécurisés a été abandonné à partir de Chromium 105 (4 janvier 2022), date à laquelle un message d'avertissement s'affichait dans le panneau des problèmes de Chrome DevTools.

Le panneau "Problèmes" des outils de développement Chrome avec un avertissement concernant la lecture de Web SQL dans des contextes non sécurisés est obsolète.

  • [ OK.] L'accès Web SQL dans les contextes non sécurisés n'est plus disponible à partir de Chromium 110 (4 janvier 2022). Une règle d'entreprise permettant de continuer à utiliser cette fonctionnalité est disponible de Chromium 110 (4 janvier 2022) à Chromium 123 (4 janvier 2022).
  • [ OK.] L'accès Web SQL dans tous les contextes est obsolète à partir de Chromium 115 (4 janvier 2022), et un message d'avertissement s'affiche dans le panneau des problèmes de Chrome DevTools.
  • [ OK.] Une évaluation avant arrêt permettant de continuer à utiliser Web SQL était disponible de Chromium 117 (4 janvier 2022) à Chromium 123 (4 janvier 2022). Pour en savoir plus sur les essais d'abandon, consultez la section Premiers pas avec les essais d'origine.
  • [ OK.] L'accès Web SQL dans tous les contextes n'est plus disponible à partir de Chromium 119.

Étapes suivantes

Comme indiqué dans l'introduction, les technologies de l'API Web Storage telles que localStorage et sessionStorage, ou la norme IndexedDB sont de bonnes alternatives dans de nombreux cas, mais pas dans tous.

Pourquoi laisser le stockage aux développeurs Web ?

Avec l'avènement de Wasm, les solutions SQL ou NoSQL peuvent être disponibles sur le Web. DuckDB-Wasm et absurd-sql en sont deux exemples. Sur la base de ces créations, nous pensons que la communauté des développeurs peut itérer et créer de nouvelles solutions de stockage plus rapidement et mieux que les fournisseurs de navigateurs.

Nous ne prévoyons pas de supprimer uniquement WebSQL. En fait, nous l'avons remplacé par quelque chose qui sera géré par la communauté Open Source, sous la forme d'un package pouvant être mis à jour à volonté, sans avoir à apporter des correctifs et de nouvelles fonctionnalités directement dans les navigateurs. Notre objectif est vraiment de permettre aux développeurs d'importer leur propre base de données sur le Web.

De plus, nous espérons que cet exemple contribuera à l'essor d'un nouvel écosystème de bases de données Open Source. La publication des poignées d'accès au système de fichiers fournit enfin la nouvelle primitive sur laquelle des solutions de stockage personnalisées peuvent être créées.

Pourquoi abandonner Web SQL ?

Inquiétudes concernant la durabilité et la sécurité

La spécification Web SQL ne peut pas être implémentée de manière durable, ce qui limite l'innovation et les nouvelles fonctionnalités. La dernière version de la norme indique littéralement "Les agents utilisateur doivent implémenter le dialecte SQL compatible avec Sqlite 3.6.19".

Au départ, SQLite n'a pas été conçu pour exécuter des instructions SQL malveillantes. C'est pourtant exactement ce que les navigateurs doivent faire lors de l'implémentation de Web SQL. La nécessité de suivre les correctifs de sécurité et de stabilité impose la mise à jour de SQLite dans Chromium. Cela entre en conflit direct avec l'exigence de Web SQL de se comporter exactement comme SQLite 3.6.19.

Forme de l'API

Web SQL est également une API qui montre son âge. Étant un enfant de la fin des années 2000, il s'agit d'un excellent exemple de "enfer des rappels", comme le montre l'exemple de code suivant (avec l'aimable autorisation de Nolan Lawson). Comme vous pouvez le constater, les instructions SQL (à l'aide du dialecte SQL SQLite) sont transmises sous forme de chaînes aux méthodes de base de données.

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 vous exécutez ce code et inspectez le tableau créé avec les outils pour les développeurs Chrome, vous obtiendrez le résultat suivant:

L'inspection de la section Web SQL dans les outils pour les développeurs Chrome affiche une base de données appelée "mydatabase" avec une table appelée "rainstorms" avec les colonnes "mood" (textuelle) et "severity" (entier) qui comporte une entrée avec un état d'esprit sombre et une intensité de six.

Manque d'assistance des implémentateurs

En dehors de la forme d'API ésotérique (du moins du point de vue d'aujourd'hui), Mozilla avait de nombreuses inquiétudes concernant la création de Web SQL sur SQLite:

"Nous ne pensons pas que [SQLite] soit la base appropriée pour une API exposée au contenu Web général, en particulier parce qu'il n'existe pas de norme crédible et largement acceptée qui sous-sélectionne SQL de manière utile. De plus, nous ne voulons pas que les modifications apportées à SQLite affectent le Web plus tard, et nous ne pensons pas qu'il soit prudent d'exploiter les versions majeures des navigateurs (et une norme Web) pour SQLite."

Pour en savoir plus sur les inquiétudes de Mozilla, consultez l'article de blog de l'ancien employé de Mozilla Vladimir Vukićević. Pour en savoir plus sur l'histoire, consultez les minutes du groupe de travail sur les applications Web du W3C (et, si vous voulez vraiment entrer dans les détails, lisez les journaux IRC) et les archives de la liste de diffusion. De plus, l'article de blog de Nolan Lawson fournit un bon aperçu de ce qui s'est passé.

Commentaires

Si vous avez des questions concernant les étapes d'abandon communiquées dans cet article, veuillez nous en informer sur la liste de diffusion blink-dev. Tout le monde peut rejoindre ce groupe et publier des contenus.

Remerciements

Cet article a été relu par Joe Medley et Ben Morss, ainsi que par Joshua Bell.