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.
- [ 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.
- [é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] Une
- [ 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 :
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.
Liens associés
- Entrée ChromeStatus : Arrêt et suppression de WebSQL dans des contextes tiers
- Entry ChromeStatus : Abandon et suppression de WebSQL dans les contextes non sécurisés
- Projet d'abandon et de suppression : WebSQL dans des contextes tiers
- Projet d'abandon et de suppression : WebSQL dans les contextes non sécurisés
- Problème Chromium : Arrêt et suppression de WebSQL dans des contextes tiers
- Problème Chromium : Abandon et suppression de WebSQL dans les contextes non sécurisés
- Problème Chromium : Abandon et suppression de WebSQL (Window#openDatabase)
- SQLite Wasm dans le navigateur, avec le système de fichiers privés Origin
Remerciements
Cet article a été révisé par Joe Medley, Ben Morss et Joshua Bell.