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.
- [ בוצע.] החל מ-Chromium 110, אין יותר גישה ל-Web SQL בהקשרים לא מאובטחים (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 של arcane (לפחות מנקודת המבט של היום), ל-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).