Abandonner et supprimer Web SQL

L'API de base de données Web SQL, qui permet de stocker des données de manière structurée sur l'ordinateur de l'utilisateur (en interne sur la base du moteur de base de données SQLite), a été lancée 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 qu'elle soit restée active dans le moteur Blink (qui alimente Chrome), Gecko (qui alimente Firefox) n'a jamais implémenté cette fonctionnalité 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 matière de magasins de clés-valeurs et de données structurées, mais il est évident qu'elles présentent également des faiblesses, comme l'absence d'un langage de requête efficace. Les gens veulent une bonne raison de SQL sur le Web.

É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 au Web SQL dans les contextes non sécurisés a été abandonné depuis Chromium 105 (4 janvier 2022). Un message d'avertissement s'affichait alors dans le panneau des problèmes liés aux outils pour les développeurs Chrome.

Abandon du panneau "Problèmes liés aux outils pour les développeurs Chrome" avec l'avertissement "Web SQL dans des contextes non sécurisés".

  • [ OK,] L'accès Web SQL dans des contextes non sécurisés n'est plus disponible depuis Chromium 110 (4 janvier 2022). Des règles d'entreprise pour continuer à utiliser cette fonctionnalité sont disponibles entre Chromium 110 (4 janvier 2022) et 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 des problèmes liés aux outils pour les développeurs Chrome.
  • [ Nous sommes là.] Un essai d'abandon pour continuer à utiliser Web SQL est disponible de Chromium 117 (4 janvier 2022) à Chromium 123 (4 janvier 2022). Pour en savoir plus sur les essais d'abandon, consultez Premiers pas avec les phases d'évaluation.

É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, mais pas dans tous les cas.

Pourquoi laisser le stockage aux développeurs Web ?

Avec l'avènement de Wasm, les solutions SQL et NoSQL sont désormais disponibles sur le Web. DuckDB-Wasm en est un exemple, et absurd-sql. Grâce à ces créations, nous pensons que la communauté des développeurs peut effectuer des itérations et créer des solutions de stockage plus rapides et plus efficaces que les éditeurs de navigateurs.

Nous ne prévoyons pas de simplement supprimer Web SQL. Nous l'avons d'ailleurs remplacée par quelque chose, géré par la communauté Open Source, servi comme un package pouvant être mis à jour à la demande, sans avoir à introduire de correctifs ni de nouvelles fonctionnalités directement dans les navigateurs. Notre objectif est de permettre aux développeurs d'importer leurs propres bases de données sur le Web.

De plus, nous espérons que cet exemple aidera à prospérer un nouvel écosystème de bases de données Open Source. La version des identifiants d'accès au système de fichiers fournit enfin une nouvelle primitive sur laquelle des solutions de stockage personnalisées peuvent être créées.

Motifs d'abandon de Web SQL

Enjeux de développement durable et de 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 "Les user-agents 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. Pourtant, la mise en œuvre de Web SQL oblige les navigateurs à le faire. Pour suivre les correctifs de sécurité et de stabilité, vous devez 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 âge. En tant qu'enfant de la fin des années 2000, c'est un excellent exemple de "callback hell" (l'enfer du rappel), 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 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 la table créée avec les outils pour les développeurs Chrome, voici le résultat:

En inspectant la section Web SQL dans les outils pour les développeurs Chrome, vous pouvez voir une base de données appelée "mydatabase" avec une table intitulée "rainstorms", ainsi que les colonnes "humeur" (texte) et "sévérité" (entier). L'une d'elles comporte une entrée indiquant l'humeur sombre et une gravité de six.

Manque d'assistance au programme de mise en œuvre

Hormis la forme obscurcie de l'API (du moins du point de vue actuel), Mozilla a de nombreuses préoccupations concernant l'intégration de Web SQL à SQLite:

"Nous ne pensons pas que [SQLite] constitue la base idéale pour une API exposée au contenu Web général, notamment parce qu'il n'existe pas de norme crédible et largement acceptée qui sous-ensemble SQL de manière utile. De plus, nous ne voulons pas que les modifications apportées à SQLite se répercutent ultérieurement sur le Web, et nous pensons qu'il n'est pas prudent d'exploiter les versions majeures des navigateurs (et une norme Web) sur SQLite."

Vous pouvez lire les préoccupations de Mozilla dans l'ancien article de blog de Mozillan Vladimir Vukićević. Pour en savoir plus, consultez les minutes du W3C sur les applications Web du groupe de travail (et, si vous voulez 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 inquiétudes concernant la procédure d'abandon présentée dans cet article, contactez-nous via la liste de diffusion blink-dev. L'adhésion à ce groupe est ouverte à tous, et tout le monde est autorisé à envoyer des messages.

Remerciements

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