Abandonner et supprimer Web SQL

L'API Web SQL Database, qui vous permet pour stocker des données de façon structurée sur l'ordinateur de l'utilisateur (en interne, en fonction le moteur de base de données SQLite), était lancé en avril 2009 et abandonnés en novembre 2010. Elle a été implémentée dans WebKit (qui alimente Safari) et est restée active dans le moteur Blink (qui alimente Chrome), Gecko (qui alimente Firefox) n'ont jamais mis en œuvre cette fonctionnalité et WebKit l'a supprimée en 2019.

The World Wide Web Consortium (W3C) encourage à ceux qui ont besoin de bases de données Web pour adopter API Web Storage technologies telles que localStorage et sessionStorage ou IndexedDB. Ces technologies montrent leurs atouts lorsqu'il s'agit de magasins de clés-valeurs des données structurées, mais nous reconnaissons aussi qu'ils présentent également des faiblesses comme l'absence un langage de requête efficace. 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 SQL Web dans les contextes non sécurisés est obsolète depuis le Chromium 105 ( 4 janvier 2022), date à laquelle un message d'avertissement s'affiche dans le panneau des problèmes des 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 SQL Web 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 la fonctionnalité est disponible Chromium 110 ( 4 janvier 2022) vers Chromium 123. ( 4 janvier 2022).
  • [ OK] L'accès à Web SQL dans tous les contextes est obsolète depuis le Chromium 115 ( 4 janvier 2022) et qu'un message d'avertissement s'affiche dans le panneau des problèmes des outils pour les développeurs Chrome.
  • [ OK] A évaluation avant arrêt "Continuer à utiliser Web SQL" était disponible sur Chromium 117 ( 4 janvier 2022) vers Chromium 123 ( 4 janvier 2022). Pour en savoir plus sur les versions d'évaluation avant arrêt, consultez Premiers pas avec les phases d'évaluation
  • [ OK] L'accès à Web SQL n'est plus disponible dans tous les contextes de Chromium 119.

Étapes suivantes

Comme indiqué dans l'introduction, API Web Storage technologies telles que localStorage et sessionStorage, ou IndexedDB sont de bonnes alternatives dans de nombreux cas, mais de loin dans tous les 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. Exemple : est DuckDB-Wasm, et un autre est absurd-sql. Sur la base de ces créations, nous pensons que la communauté des développeurs peut effectuer des itérations et créer plus rapidement et mieux que les fournisseurs de navigateurs.

Nous ne prévoyons pas de simplement supprimer Web SQL. En fait, nous l'avons remplacé par quelque chose qui sera géré par la communauté Open Source, servi de package peuvent être mises à jour à leur guise, 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 votre propre base de données sur le Web.

De plus, nous espérons que cet exemple aidera un nouvel écosystème que les bases de données Open Source prospèrent ! La sortie de poignées d'accès au système de fichiers fournit enfin la nouvelle primitive, qui permet d'utiliser des solutions de stockage personnalisées conçue.

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 states "Les user-agents doivent implémenter le dialecte SQL compatible avec Sqlite 3.6.19".

Au départ, SQLite n'était pas conçu pour exécuter des instructions SQL malveillantes, alors que l'implémentation de Web SQL implique les navigateurs doivent le faire exactement. Le besoin de rester au fait de la sécurité et les correctifs de stabilité imposent la mise à jour de SQLite dans Chromium. Cela intervient directement entrent en conflit 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, un excellent exemple de « rappel de l'enfer », comme dans l'exemple de code suivant (avec l'aimable autorisation de Nolan Lawson) démontre. Comme vous pouvez le voir, les instructions SQL (à l'aide de la fonction 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!');
      },
    );
  },
);
<ph type="x-smartling-placeholder">

Si vous exécutez ce code et inspecter 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&#39;une base de données appelée &quot;mydatabase&quot; comporte une table intitulée &quot;rainstorms&quot; avec les colonnes &quot;humeur&quot; (textuelle) et &quot;sévérité&quot; (entier) avec une entrée d&#39;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 actuel), Mozilla avait beaucoup sur le développement de Web SQL à partir de SQLite:

"Nous pensons que [SQLite] ne constitue pas la base idéale pour une API exposée au Web non seulement parce qu'il n'existe pas de modèle crédible ni largement accepté, standard qui sous-ensemble SQL d'une manière utile. De plus, nous ne voulons pas que à SQLite pour affecter le Web par la suite, et ne pensez pas à exploiter les principaux navigateurs (ainsi qu'une norme Web) à SQLite."

Pour en savoir plus sur les préoccupations de Mozilla, consultez article de blog publié par Mozillan Vladimir Vukićević. Pour en savoir plus sur l'historique, consultez le Minutes du groupe de travail sur les applications Web du W3C (Si vous voulez vraiment entrer dans les détails, lisez le journaux IRC) et archives de listes de diffusion). En outre, Article de blog de Nolan Lawson donne un bon aperçu de ce qui s'est passé.

Commentaires

Si vous avez des questions concernant les étapes d'abandon communiquées dans ce n'hésitez pas à nous contacter sur le 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é lu par Joe Medley et Ben Morss Joshua Bell.