הוצאה משימוש והסרה של Web SQL

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.

חלונית הבעיות של Chrome DevTools עם אזהרה על כך ש-Web SQL בהקשרים לא מאובטחים הוצא משימוש.

  • [ בוצע.] החל מ-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, זו התוצאה:

בדיקה של הקטע Web SQL בכלי הפיתוח ל-Chrome מראה מסד נתונים שנקרא mydatabase עם טבלה שנקראת rainstorms עם העמודות mood (טקסטואלי) ו-severity (מספר שלם) עם רשומה אחת עם הערך של mood‏ somber ו-severity‏ six.

אין תמיכה במטמיע

חוץ מצורת ה-API של arcane (לפחות מנקודת המבט של היום), ל-Mozilla היו חששות רבים לגבי בניית Web SQL על בסיס SQLite:

"אנחנו לא חושבים ש-[SQLite] הוא הבסיס הנכון ל-API שחשוף לתוכן כללי באינטרנט, בראש ובראשונה כי אין תקן מהימן ומקובל שמגדיר את SQL בצורה מועילה. בנוסף, אנחנו לא רוצים ששינויים ב-SQLite ישפיעו על האינטרנט בהמשך, ולא נראה לנו שזה נבון לרתום גרסאות ראשיות של דפדפנים (וכן תקן אינטרנט) ל-SQLite".

אפשר לקרוא על החששות של Mozilla בפוסט בבלוג של Vladimir Vukićević, לשעבר עובד Mozilla. להיסטוריה נוספת, אפשר לעיין בפרוטוקולים של קבוצת העבודה של W3C בנושא אפליקציות אינטרנט (ואם אתם רוצים להיכנס לפרטים, כדאי לקרוא את יומני ה-IRC) ובארכיונים של רשימת התפוצה. בנוסף, בפוסט בבלוג של Nolan Lawson יש סקירה כללית טובה של מה שקרה.

משוב

אם יש לכם שאלות לגבי השלבים להוצאה משימוש שמפורטים במאמר הזה, אתם יכולים לפנות אלינו ברשימת התפוצה blink-dev. כל אחד יכול להצטרף לקבוצה הזו, וכל אחד יכול לפרסם בה.

אישורים

המאמר הזה נבדק על ידי ג'ו מדלי (Joe Medley) ובן מורז (Ben Morss), וגם על ידי ג'ושועה בל (Joshua Bell).