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

ה-Web SQL Database API, שמאפשר לאחסן נתונים בצורה מובנית במחשב של המשתמש (מבוסס על המנוע של מסד הנתונים SQLite), הושק באפריל 2009 וננטש בנובמבר 2010. למרות שהיא הוטמעה ב-WebKit (שמבוססת על Safari) ונשארה פעילה במנוע Blink (שמפעיל את Chrome), ב-Gecko (שמפעיל את Firefox) מעולם לא הטמיעו את התכונה הזו, ו-WebKit הסיר אותה בשנת 2019.

הארגון World Wide Web Consortium (W3C) מעודד מסדי נתונים שזקוקים למסדי נתונים באינטרנט לאמץ טכנולוגיות Web Storage API כמו localStorage וגם sessionStorage, או IndexedDB. הטכנולוגיות האלה מייצגות את היתרונות מבחינת מאגרי מפתחות/ערך ונתונים מובְנים, אבל כמובן שיש להן גם חולשות כמו היעדר שפת שאילתות חזקה. יש סיבה לכך שאנשים רוצים להשתמש ב-SQL באינטרנט.

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

  • [ בוצע.] Web SQL הוצא משימוש והוסר בהקשרים של צד שלישי ב-Chromium 97 ( 4 בינואר 2022).
  • [ בוצע.] גישת SQL באינטרנט בהקשרים לא מאובטחים הוצאה משימוש החל מ-Chromium 105 ( 4 בינואר 2022), במועד הזה הוצגה הודעת אזהרה בחלונית הבעיות של כלי הפיתוח ל-Chrome.

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

  • [ בוצע.] החל מ-Chromium 110, אין יותר גישה ל-Web SQL בהקשרים לא מאובטחים (4 בינואר 2022). מדיניות הארגון להמשך השימוש בתכונה זמינה החל מ-Chromium 110 ( 4 בינואר 2022) ועד ל-Chromium 123 ( 4 בינואר 2022).
  • [ בוצע.] גישת Web SQL בכל ההקשרים הוצאה משימוש החל מ-Chromium 115 ( 4 בינואר 2022), ומוצגת הודעת אזהרה בחלונית הבעיות של Chrome DevTools.
  • [ בוצע.] הייתה תקופת ניסיון להוצאה משימוש כדי להמשיך להשתמש ב-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 שמציג את גילו. כילד או הילדה של סוף שנות ה-2000, זו דוגמה נהדרת ל-"callback hell" (callback hell), כמו למשל דוגמת הקוד הבאה (באדיבות נולן לוסון) שמדגים. כמו שאפשר לראות, הצהרות ה-SQL (באמצעות הדיאלקט של SQLite של SQL) מועברות כמחרוזות ל-methods של מסד הנתונים.

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 של arcane (לפחות מנקודת המבט הנוכחית), ל-Mozilla היו חששות רבים לגבי בניית Web SQL על בסיס SQLite:

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

אתם יכולים לקרוא על החששות של Mozilla בפוסט בבלוג של Mozillan ולדימיר ווקיצ'ביץ'. להיסטוריה נוספת, כדאי לעיין בדקות של קבוצת העבודה באינטרנט של W3C באינטרנט (ואם אתם באמת רוצים להיכנס לפרטים, קראו את יומני IRC) ואת הארכיונים של רשימות הדואר). בנוסף, הפוסט בבלוג של נולן לוסון מספק סקירה כללית טובה על מה שקרה.

משוב

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

אישורים

המאמר הזה נבדקו על ידי ג'ו מדלי, בן מורס, וגם ג'ושוע בל.