הוצאה משימוש והסרה של 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, שמכיל טבלה בשם 'סופות גשם' עם מצב הרוח של העמודות (טקסטואלי) וחומרה (מספר שלם) שכולל ערך אחד עם מצב רוח קודר וחומרה של שש.

חוסר תמיכה במטמיעים

מלבד הצורה המורכבת של ה-API (לפחות מנקודת המבט של היום), ל-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).