A API Web SQL Database, que permite armazenar dados de maneira estruturada no computador do usuário (internamente com base em mecanismo de banco de dados SQLite), foi lançado em abril de 2009 e abandonado em novembro de 2010. Embora tenha sido implementado no WebKit (que alimenta o Safari) e permaneceu ativo no o mecanismo Blink (que alimenta o Chrome), o Gecko (que alimenta o Firefox) nunca implementaram esse recurso e O WebKit o removeu em 2019.
World Wide Web Consortium (W3C)
incentiva
aqueles que precisam de bancos de dados da Web para adotar
API Web Storage
tecnologias como
localStorage
e
sessionStorage
,
ou
IndexedDB.
Essas tecnologias mostram seus pontos fortes quando se trata de armazenamentos de chave-valor e
dados estruturados, mas reconhecemos que ela também tem pontos fracos, como a falta
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 em Chromium 97 ( 4 de janeiro de 2022).
- [ concluído.] O acesso ao Web SQL em contextos não seguros foi descontinuado em Chromium 105 ( 4 de janeiro de 2022), quando uma mensagem de aviso mostrada no painel "Issues" do Chrome DevTools.
- [ concluído.] O acesso ao Web SQL em contextos não seguros não é mais disponíveis a partir do Chromium 110 ( 4 de janeiro de 2022). Um política corporativa para continuar usando o recurso está disponível em Chromium 110 ( 4 de janeiro de 2022) para o Chromium 123 ( 4 de janeiro de 2022).
- [ concluído.] O acesso ao Web SQL em todos os contextos foi descontinuado a partir de Chromium 115 ( 4 de janeiro de 2022), e uma mensagem de aviso vai aparecer no painel "Issue" do Chrome DevTools.
- [teste de descontinuação para continuar usando o Web SQL estava disponível no Chromium 117 ( 4 de janeiro de 2022) para o Chromium 123 ( 4 de janeiro de 2022). Para saber mais sobre testes de descontinuação, consulte Comece a usar os testes de origem. concluído.] Um
- [ concluído.] O acesso ao Web SQL em todos os contextos não está mais disponível do Chromium 119.
O que fazer depois disso
Como mencionado na introdução,
API Web Storage
tecnologias como
localStorage
e
sessionStorage
,
ou o
IndexedDB
padrão são boas alternativas em muitos, mas de longe não todos.
Justificativa para deixar o armazenamento para desenvolvedores 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, achamos que a comunidade de desenvolvedores pode iterar e criar novos soluções mais rápidas e melhores do que os fornecedores de navegadores.
Não estamos planejando apenas remover o Web SQL. Na verdade, nós o substituímos por algo que será mantido pela comunidade de código aberto, servindo como um pacote que podem ser atualizados à vontade, sem o fardo de introduzir correções e novos recursos diretamente nos navegadores. Nosso objetivo é permitir que os desenvolvedores tragam seu próprio banco de dados para a Web.
Além disso, esperamos que este exemplo ajude um novo ecossistema de bancos de dados de código aberto a prosperar! O lançamento identificadores de acesso ao sistema de arquivos e, finalmente, fornece o novo primitivo em que as soluções de armazenamento personalizadas podem ser construído.
Motivos para suspender o uso do Web SQL
Preocupações com sustentabilidade e segurança
A especificação SQL da Web não pode ser implementada de forma sustentável, o que limita inovação e novos recursos. A última versão da norma states "User agents devem implementar o dialeto SQL compatível com o Sqlite 3.6.19".
Inicialmente, o SQLite não era projetada para executar instruções SQL maliciosas, mas implementar o Web SQL significa e os navegadores da Web precisam fazer exatamente isso. A necessidade de acompanhar as correções de estabilidade determinam a atualização do SQLite no Chromium. Isso vem direto entram em conflito com o requisito do Web SQL de se comportar exatamente como o SQLite 3.6.19.
Formato da API
O Web SQL também é uma API que mostra a própria idade. Como criança do final dos anos 2000, é um ótimo exemplo de "inferno de comunicação de retorno", como o exemplo de código a seguir, (cortesia de Nolan Lawson) demonstra. Como é possível notar, as instruções SQL (usando o o dialeto SQL SQLite) são transmitidos como strings. a 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ê executasse esse código e inspecione a tabela criada com o Chrome DevTools, este é o resultado:
Falta de suporte do implementador
Além do formato misterioso da API (pelo menos do ponto de vista atual), o Mozilla teve muitos preocupações sobre o Web SQL ser criado no SQLite:
"Não acreditamos que o [SQLite] seja a base certa para uma API exposta a aplicativos da Web conteúdo, não menos importante, porque não há um modelo confiável padrão que faz subconjuntos do SQL de uma forma útil. Além disso, não queremos alterações para o SQLite afetar a Web mais tarde, e não acha que aproveitar (e um padrão da Web) para o SQLite é prudente."
Você pode ler sobre as preocupações do Mozilla em Postagem do blog do antigo Mozillan Vladimir Vukicesevivice. Para saber um pouco mais sobre a história, confira a Minutos do grupo de trabalho de aplicativos da Web do W3C (e, se realmente quiser entrar em detalhes, leia a registros do IRC) e o arquivos da lista de e-mails). Além disso, Postagem do blog de Nolan Lawson oferece uma boa visão geral do que aconteceu.
Feedback
Em caso de alguma preocupação sobre as etapas de descontinuação mencionadas aqui, publicar, avise-nos no lista de e-mails blink-dev. A associação a este grupo é aberta para qualquer pessoa e qualquer pessoa pode postar.
Links relacionados
- Entrada ChromeStatus: Descontinuaçã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 descontinuar e remover: WebSQL em contextos de terceiros
- Intenção de descontinuar e remover: WebSQL em contextos não seguros
- Problema do Chromium: Descontinuação e remoção do WebSQL em contextos de terceiros
- Problema do Chromium: Descontinuação e remoção do WebSQL em contextos não seguros
- Problema do Chromium: Descontinuação e remoção do WebSQL (Window#openDatabase)
- SQLite Wasm no navegador com suporte do sistema de arquivos particulares de origem (link em inglês)
Agradecimentos
Este artigo foi revisado por Joe Medley e Ben Morss e Joshua Bell.