Abandonner et supprimer Web SQL

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

Le World Wide Web Consortium (W3C) encourage ceux qui ont besoin de bases de données Web à adopter les technologies de l'API Web Storage telles que localStorage, sessionStorage ou IndexedDB. Ces technologies montrent leurs forces en matière de magasins de clés-valeurs et de données structurées, mais elles présentent également des faiblesses telles que l'absence d'un langage de requête fiable. Les gens veulent avoir SQL sur le Web pour une raison.

Étapes d'abandon et de suppression de Web SQL

  • [ 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 des contextes non sécurisés a été abandonné depuis Chromium 105 (4 janvier 2022), date à laquelle un message d'avertissement s'affiche dans le panneau "Problèmes liés aux outils pour les développeurs Chrome".

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 en SQL Web dans les contextes non sécurisés n'est plus disponible depuis Chromium 110 (4 janvier 2022). Une règle d'entreprise vous permettant de continuer à utiliser cette fonctionnalité est disponible depuis Chromium 110 (du 4 janvier 2022) à Chromium 123 (4 janvier 2022).
  • [ OK] L'accès à Web SQL dans tous les contextes est obsolète depuis Chromium 115 (4 janvier 2022) et un message d'avertissement s'affiche dans le panneau "Problèmes" des outils pour les développeurs Chrome.
  • [ OK] Un essai avant arrêt permettant de continuer à utiliser Web SQL était disponible de Chromium 117 (du 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 désormais être disponibles sur le Web. DuckDB-Wasm en est un exemple, et absurd-sql en est un autre. Sur la base de ces éléments, nous pensons que la communauté des développeurs peut itérer et créer de nouvelles solutions de stockage plus rapidement et plus efficacement que les fournisseurs de navigateurs.

Nous ne prévoyons pas de simplement supprimer Web SQL. Nous l'avons même remplacée par quelque chose qui sera géré par la communauté Open Source, qui servira de package pouvant être mis à jour à la demande, sans qu'il soit nécessaire d'introduire des correctifs et de nouvelles fonctionnalités directement dans les navigateurs. Notre objectif est de permettre aux développeurs d'importer leur propre base de données sur le Web.

De plus, nous espérons que cet exemple aidera le développement 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.

Raisons de l'abandon de Web SQL

Inquiétudes liées au développement durable et à la sécurité

La spécification Web SQL ne peut pas être mise en œuvre 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 se tenir aux correctifs de sécurité et de stabilité impose de mettre à jour 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 ancienneté. É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 voir, les instructions SQL (utilisant le dialecte SQL SQLite) sont transmises aux méthodes de base de données en tant que chaînes.

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 la table créée avec les outils pour les développeurs Chrome, voici le résultat:

En inspectant la section SQL Web des outils pour les développeurs Chrome, vous constaterez qu'une base de données appelée "mydatabase" comporte une table intitulée "rainstorms" avec les colonnes "humeur" (textuelle) et "sévérité" (entier) avec une entrée d'humeur sombre et de gravité de six.

Manque d'assistance par l'équipe chargée de l'implémentation

Outre la forme obscur de l'API (du moins du point de vue d'aujourd'hui), Mozilla a soulevé de nombreuses préoccupations concernant le développement de Web SQL à l'aide de SQLite:

"Nous pensons que [SQLite] ne constitue pas la base idéale pour une API exposée au contenu Web général, surtout parce qu'il n'existe pas de norme crédible et largement acceptée qui sous-ensemble du langage SQL de manière utile. De plus, nous ne voulons pas que les modifications apportées à SQLite n'affectent le Web par la suite, et nous ne pensons pas qu'il soit prudent d'exploiter les principales versions de navigateur (et une norme Web) de SQLite."

Pour en savoir plus sur les préoccupations de Mozilla, consultez l'ancien article de blog de Mozillan Vladimir Vukićević. Pour en savoir plus sur l'historique, consultez les minutes du groupe de travail sur les 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 offre un bon aperçu de ce qui s'est passé.

Commentaires

Si vous avez des questions concernant les étapes d'abandon décrites dans cet article, contactez-nous via la liste de diffusion blink-dev. L'adhésion à ce groupe est ouverte à tout le monde, et tout le monde est autorisé à envoyer des messages.

Remerciements

Cet article a été révisé par Joe Medley, Ben Morss et Joshua Bell.