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ête performant. Les gens veulent avoir 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 liés aux outils pour les développeurs Chrome" avec un avertissement indiquant 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 phases d'évaluation avant arrêt, consultez la section Premiers pas avec les phases d'évaluation.
  • [ OK.] L'accès à Web SQL dans tous les contextes n'est plus disponible depuis 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, constituent de bonnes alternatives dans de nombreux cas.

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 version des poignées d'accès au système de fichiers fournit enfin la nouvelle primitive sur laquelle créer des solutions de stockage personnalisé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 user-agents doivent implémenter le dialecte SQL compatible avec SQL 3.6.19".

Au départ, SQLite n'a pas été conçu pour exécuter des instructions SQL malveillantes. Toutefois, l'implémentation de Web SQL signifie que les navigateurs doivent le faire exactement. 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 indique son âge. Étant un enfant de la fin des années 2000, il s'agit d'un excellent exemple de "rappel d'enfer", 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 obtenez 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 plus de la forme d'API obscure (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'historique, consultez les minutes du groupe de travail des applications Web du W3C (et, si vous souhaitez vraiment en savoir plus, lisez les journaux IRC) et les archives des listes 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é révisé par Joe Medley, Ben Morss et Joshua Bell.