A API Web SQL Database, que permite armazenar dados de maneira estruturada no computador do usuário (baseado internamente no motor de banco de dados SQLite), foi introduzida em abril de 2009 e descontinuada em novembro de 2010. Embora tenha sido implementado no WebKit (que alimenta o Safari) e permanecido ativo no motor Blink (que alimenta o Chrome), o Gecko (que alimenta o Firefox) nunca implementou esse recurso e o WebKit o removeu em 2019.
O World Wide Web Consortium (W3C)
incentiva
que as pessoas que precisam de bancos de dados da Web adotem
tecnologias da
API Web Storage,
como
localStorage
e
sessionStorage
,
ou
IndexedDB.
Essas tecnologias mostram seus pontos fortes quando se trata de armazenamentos de chave-valor e
dados estruturados, mas também têm pontos fracos, como a falta de uma
linguagem de consulta forte. As pessoas querem SQL na Web por um motivo.
Etapas de descontinuação e remoção do Web SQL
- [ concluído.] O SQL da Web foi descontinuado e removido para contextos de terceiros no Chromium 97 ( 4 de janeiro de 2022).
- [ Concluído.] O acesso ao Web SQL em contextos não seguros foi descontinuado a partir do Chromium 105 ( 4 de janeiro de 2022), quando uma mensagem de aviso foi mostrada no painel de problemas do Chrome DevTools.
- [ Concluído.] O acesso ao Web SQL em contextos não seguros não está mais disponível a partir do Chromium 110 ( 4 de janeiro de 2022). Uma política corporativa para continuar usando o recurso está disponível do Chromium 110 ( 4 de janeiro de 2022) ao Chromium 123 ( 4 de janeiro de 2022).
- [ concluído.] O acesso ao Web SQL em todos os contextos foi descontinuado no Chromium 115 ( 4 de janeiro de 2022), e uma mensagem de aviso é exibida no painel de problemas do Chrome DevTools.
- [teste de descontinuação para continuar usando o Web SQL foi disponibilizado do Chromium 117 ( 4 de janeiro de 2022) ao Chromium 123 ( 4 de janeiro de 2022). Para saber mais sobre os testes de descontinuação, consulte Começar a usar os testes de origem. Concluído.] 1}
- [ Concluído.] O acesso ao Web SQL em todos os contextos não está mais disponível no Chromium 119.
O que fazer depois disso
Como apontado na introdução,
tecnologias da
API Web Storage
como
localStorage
e
sessionStorage
,
ou o
padrão
IndexedDB
são boas alternativas em muitos, mas não em todos os casos.
Motivação para deixar o armazenamento para desenvolvedores da Web
Com o advento do Wasm, as soluções SQL ou NoSQL podem chegar à Web. Um exemplo é DuckDB-Wasm, outro é absurd-sql. Com base nessas criações, sentimos que a comunidade de desenvolvedores pode iterar e criar novas soluções de armazenamento com mais rapidez e melhor do que os fornecedores de navegadores.
Não planejamos apenas remover o Web SQL. Na verdade, substituímos por algo que será mantido pela comunidade de código aberto, disponibilizado como um pacote que pode ser atualizado quando quiser, sem a necessidade de introduzir correções e novos recursos diretamente nos navegadores. Nosso objetivo é permitir que os desenvolvedores tragam os próprios bancos de dados para a Web.
Além disso, esperamos que esse exemplo ajude a prosperar um novo ecossistema de bancos de dados de código aberto. A versão de identificadores de acesso ao sistema de arquivos finalmente fornece a nova primitiva em que as soluções de armazenamento personalizadas podem ser criadas.
Motivos para suspender o uso do Web SQL
Questões de sustentabilidade e segurança
A especificação do Web SQL não pode ser implementada de forma sustentável, o que limita a inovação e os novos recursos. A última versão do padrão literalmente afirma "Os user agents precisam implementar o dialeto SQL compatível com o Sqlite 3.6.19.
O SQLite não foi projetado inicialmente para executar instruções SQL maliciosas, mas a implementação do Web SQL significa que os navegadores precisam fazer exatamente isso. A necessidade de acompanhar as correções de segurança e estabilidade determina a atualização do SQLite no Chromium. Isso entra em conflito direto com o requisito do Web SQL de se comportar exatamente como o SQLite 3.6.19.
Forma da API
O Web SQL também é uma API que mostra sua idade. Por ser um filho dos anos 2000, ele é um ótimo exemplo de "inferno de callbacks", como o exemplo de código abaixo (cortesia de Nolan Lawson) demonstra. Como você pode ver, as instruções SQL (usando o dialeto SQL SQLite) são transmitidas como strings para métodos de banco de dados.
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!');
},
);
},
);
Se você executar esse código e inspecionar a tabela criada com o Chrome DevTools, o resultado será este:
Falta de suporte para o implementador
Além da forma arcana da API (pelo menos do ponto de vista de hoje), a Mozilla tinha muitas preocupações com o Web SQL sendo criado com base no SQLite:
"Não acreditamos que o [SQLite] seja a base certa para uma API exposta a conteúdo geral da Web, principalmente porque não existe um padrão confiável e amplamente aceito que faça subconjuntos do SQL de maneira útil. Além disso, não queremos que as mudanças no SQLite afetem a Web mais tarde, e não achamos prudente usar as principais versões de navegadores (e um padrão da Web) no SQLite."
Leia sobre as preocupações do Mozilla na postagem do antigo blog do Mozillan Vladimir Vukicesevifeat (em inglês). Para mais informações, consulte as atas do Grupo de Trabalho de Aplicativos da Web do W3C (e, se você realmente quiser saber mais detalhes, leia os registros do IRC) e os arquivos da lista de e-mails. Além disso, a postagem do blog de Nolan Lawson oferece uma boa visão geral do que aconteceu.
Feedback
Caso você tenha alguma preocupação sobre as etapas de descontinuação comunicadas nesta postagem, entre em contato na lista de e-mails blink-dev. Qualquer pessoa pode participar deste grupo e fazer postagens.
Links relacionados
- Entrada do ChromeStatus: Suspensão e remoção do WebSQL em contextos de terceiros
- Entrada ChromeStatus: Descontinuação e remoção do WebSQL em contextos não seguros
- Intenção de descontinuação e remoção: WebSQL em contextos de terceiros
- Intenção de descontinuar e remover: WebSQL em contextos não seguros
- Problema do Chromium: Suspensão e remoção do WebSQL em contextos de terceiros
- Problema do Chromium: Suspensão e remoção do WebSQL em contextos não seguros
- Problema do Chromium: descontinuar e remover o WebSQL (Window#openDatabase)
- SQLite Wasm no navegador com suporte do sistema de arquivos particular da Origin
Agradecimentos
Este artigo foi revisado por Joe Medley, Ben Morss e Joshua Bell.