Web SQL Database API, שמאפשר לאחסן נתונים באופן מובנה במחשב של המשתמש (מבוסס באופן פנימי על מנוע מסד הנתונים SQLite), הושק בחודש אפריל 2009 והוצא משימוש בנובמבר 2010. התכונה הזו הופעלה ב-WebKit (המפעיל את Safari) ונשארה פעילה במנוע Blink (המפעיל את Chrome), אבל היא אף פעם לא הופעלה ב-Gecko (המפעיל את Firefox) וWebKit הסירה אותה ב-2019.
מומלץ לאנשים שזקוקים למסדי נתונים באינטרנט להשתמש בטכנולוגיות של Web Storage API, כמו localStorage
ו-sessionStorage
, או ב-IndexedDB.
הטכנולוגיות האלה מציגות את נקודות החוזק שלהן כשמדובר במאגרי מפתח/ערך ובנתונים מובְנים, אבל יש להן גם נקודות חולשה, כמו היעדר שפת שאילתות חזקה. יש סיבה לכך שאנשים רוצים להשתמש ב-SQL באינטרנט.
שלבי ההוצאה משימוש וההסרה של Web SQL
- [ בוצע.] Web SQL הוצא משימוש והוסר מהקשרים של צד שלישי ב-Chromium 97 (4 בינואר 2022).
- [ בוצע.] הגישה ל-Web SQL בהקשרים לא מאובטחים הוצאה משימוש החל מ-Chromium 105 (4 בינואר 2022), ומאותו רגע הוצגה הודעת אזהרה בחלונית הבעיות של Chrome DevTools.
- [ בוצע.] הגישה ל-Web SQL בהקשרים לא מאובטחים לא זמינה יותר החל מ-Chromium 110 (4 בינואר 2022). מדיניות ארגונית שמאפשרת להמשיך להשתמש בתכונה זמינה מ-Chromium 110 ( 4 בינואר 2022) עד ל-Chromium 123 ( 4 בינואר 2022).
- [ בוצע.] הגישה ל-Web SQL בכל ההקשרים הוצאה משימוש החל מ-Chromium 115 (4 בינואר 2022), ומופיעה אזהרה בחלונית הבעיות של כלי הפיתוח ל-Chrome.
- [תקופת ניסיון להוצאה משימוש כדי להמשיך להשתמש ב-Web SQL הייתה זמינה מ-Chromium 117 (4 בינואר 2022) עד ל-Chromium 123 (4 בינואר 2022). למידע נוסף על תקופות ניסיון להוצאה משימוש, קראו את המאמר תחילת העבודה עם תקופות ניסיון למקורות. בוצע.]
- [ בוצע.] הגישה ל-Web SQL בכל ההקשרים לא זמינה יותר החל מ-Chromium 119.
מה עושים עכשיו
כפי שצוין בהקדמה, טכנולוגיות של Web Storage API כמו localStorage
ו-sessionStorage
, או התקן IndexedDB הן חלופות טובות במקרים רבים, אבל לא בכל המקרים.
הסיבה לכך שאנחנו משאירים את האחסון למפתחי אתרים
עם הופעתו של Wasm, פתרונות SQL או NoSQL יכולים להגיע לאינטרנט. דוגמה אחת היא DuckDB-Wasm, ודוגמה אחרת היא absurd-sql. על סמך היצירות האלה, אנחנו סבורים שקהילת המפתחים יכולה ליצור פתרונות אחסון חדשים ולשפר אותם מהר יותר ובאופן טוב יותר מאשר ספקי הדפדפנים.
אנחנו לא מתכננים רק להסיר את Web SQL. למעשה, החלפנו אותו במשהו שקהילת הקוד הפתוח תשמור עליו, ותגיש אותו כחבילת קוד שאפשר לעדכן לפי הצורך – בלי הצורך להוסיף תיקונים ותכונות חדשות ישירות לדפדפנים. המטרה שלנו היא לאפשר למפתחים להביא את מסד הנתונים שלהם לאינטרנט.
בנוסף, אנחנו מקווים שהדוגמה הזו תעזור לפתח סביבה עסקית חדשה של מסדי נתונים בקוד פתוח. השקת אמצעי הגישה למערכת הקבצים מספקת סוף סוף את הרכיב הבסיסי החדש שאפשר לבנות עליו פתרונות אחסון בהתאמה אישית.
הסיבות להוצאת Web SQL משימוש
חששות לגבי קיימות ואבטחה
אי אפשר להטמיע את מפרט Web SQL באופן בר-קיימא, מה שמגביל את החדשנות והתכונות החדשות. בגרסה האחרונה של התקן כתוב "סוכנויות משתמשים חייבות להטמיע את הדיאלקט של SQL שנתמך על ידי Sqlite 3.6.19".
SQLite לא תוכנן במקור להריץ הצהרות SQL זדוניות, אבל הטמעת Web SQL מחייבת את הדפדפנים לעשות בדיוק את זה. כדי לעמוד בקצב של תיקוני האבטחה והיציבות, צריך לעדכן את SQLite ב-Chromium. הדבר עומד בניגוד ישיר לדרישה של Web SQL לפעול בדיוק כמו SQLite 3.6.19.
צורת ה-API
Web SQL הוא גם ממשק API שמראה את הגיל שלו. ה-callback הוא צאצא של סוף שנות ה-2000, והוא דוגמה מצוינת ל'גיהנום ה-callback', כפי שמוצג בקטע הקוד הבא (באדיבות Nolan Lawson). כפי שאפשר לראות, הצהרות ה-SQL (באמצעות הדיאלקט של SQL ב-SQLite) מועברות כמחרוזות לשיטות של מסד הנתונים.
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!');
},
);
},
);
אם מריצים את הקוד הזה ובודקים את הטבלה שנוצרה באמצעות כלי הפיתוח של Chrome, זו התוצאה:
חוסר תמיכה במטמיעים
מלבד הצורה המורכבת של ה-API (לפחות מנקודת המבט של היום), ל-Mozilla היו הרבה חששות לגבי Web SQL שנבנה על SQLite:
"אנחנו לא חושבים ש-[SQLite] הוא הבסיס הנכון ל-API שחשוף לתוכן אינטרנט כללי, בין היתר כי אין תקן מהימן ומקובל שמציג קבוצות משנה של SQL באופן שימושי. בנוסף, אנחנו לא רוצים ששינויים ב-SQLite ישפיעו על האינטרנט בהמשך, ולא חושבים ששימוש במהדורות ראשיות של דפדפנים (וכן בתקן אינטרנט) ב-SQLite הוא מועיל".
אפשר לקרוא על החששות של Mozilla בפוסט בבלוג של Vladimir Vukićević, לשעבר עובד Mozilla. למידע נוסף על ההיסטוריה, אפשר לעיין בפרוטוקולים של קבוצת העבודה של W3C לאפליקציות אינטרנט (ואם אתם רוצים להיכנס לפרטים, כדאי לקרוא את יומני ה-IRC) ובארכיונים של רשימת התפוצה. בנוסף, בפוסט בבלוג של Nolan Lawson יש סקירה כללית טובה של מה שקרה.
משוב
אם יש לכם שאלות לגבי השלבים להוצאה משימוש שמפורטים בפוסט הזה, אתם יכולים לפנות אלינו ברשימת התפוצה blink-dev. כל אחד יכול להצטרף לקבוצה הזו, וכל אחד יכול לפרסם בה.
קישורים רלוונטיים
- רשומה ב-ChromeStatus: הוצאה משימוש והסרה של WebSQL בהקשרים של צד שלישי
- רשומה ב-ChromeStatus: הוצאה משימוש והסרה של WebSQL בהקשרים לא מאובטחים
- כוונה להוצאה משימוש ולהסרה: WebSQL בהקשרים של צד שלישי
- כוונה להוצאה משימוש ולהסרה: WebSQL בהקשרים לא מאובטחים
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL בהקשרים של צד שלישי
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL בהקשרים לא מאובטחים
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL (Window#openDatabase)
- SQLite Wasm בדפדפן שמגובות על ידי מערכת הקבצים הפרטית של המקור
תודות
המאמר הזה נבדק על ידי Joe Medley ו-Ben Morss, וגם על ידי Joshua Bell.