إيقاف لغة الاستعلامات البنيوية (SQL) على الويب وإزالتها

تم طرح واجهة برمجة التطبيقات Web SQL Database API في نيسان (أبريل) 2009، والتي تتيح لك تخزين البيانات بطريقة منظَّمة على كمبيوتر المستخدم (تستند داخليًا إلى محرك قاعدة بيانات SQLite)، ثم تم إيقافها نهائيًا في تشرين الثاني (نوفمبر) 2010. على الرغم من أنّه تم تنفيذ هذه الميزة في WebKit (الذي يشغّل Safari) وظلّت نشطة في محرك Blink (الذي يشغّل Chrome)، لم يتم تنفيذ هذه الميزة في Gecko (الذي يشغّل Firefox) وأزالها WebKit في عام 2019.

يشجّع اتحاد شبكة الويب العالمية (W3C) مستخدمي قواعد بيانات الويب على استخدام تكنولوجيات Web Storage API مثل localStorage و sessionStorage، أو IndexedDB، إذا كانوا بحاجة إلى ذلك. تُظهر هذه التقنيات نقاط قوتها عندما يتعلق الأمر بمخازن المفاتيح/القيم والبيانات المنظَّمة، ولكن من المعروف أنّ لها أيضًا نقاط ضعف، مثل عدم توفّر لغة استعلامات فعّالة. هناك سبب وراء رغبة المستخدمين في الحصول على SQL على الويب.

خطوات إيقاف لغة الاستعلامات البنيوية (SQL) على الويب وإزالتها

  • [ تم.] تم إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها من سياقات الجهات الخارجية في Chromium 97 ( 4 كانون الثاني (يناير) 2022).
  • [ تم.] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في السياقات غير الآمنة نهائيًا اعتبارًا من الإصدار 105 من Chromium ( 4 كانون الثاني (يناير) 2022)، وفي ذلك الوقت، ظهرت رسالة تحذير في لوحة المشاكل في "أدوات مطوّري البرامج في Chrome".

تم نهائيًا إيقاف لوحة مشاكل "أدوات مطوري البرامج في Chrome" التي تعرض تحذيرًا يشير إلى أنّ لغة الاستعلامات البنيوية (SQL) على الويب في سياقات غير آمنة.

  • [ تم.] لم يعُد الوصول إلى لغة الاستعلامات البنيوية على الويب (Web SQL) في السياقات غير الآمنة متاحًا اعتبارًا من الإصدار 110 من Chromium ( 4 كانون الثاني (يناير) 2022). تتوفَّر سياسة مؤسسة لمواصلة استخدام الميزة من الإصدار 110 من Chromium ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022).
  • [تم .] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في جميع السياقات نهائيًا اعتبارًا من Chromium 115 ( 4 كانون الثاني (يناير) 2022) وستظهر رسالة تحذير في لوحة مشاكل "أدوات مطوري البرامج في Chrome".
  • [تم .] كانت هناك فترة تجريبية لإيقاف الميزة نهائيًا للحفاظ على استخدام Web SQL، وذلك من الإصدار 117 من Chromium ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022). لمعرفة مزيد من المعلومات عن الفترات التجريبية للإيقاف النهائي، يُرجى الاطّلاع على مقالة البدء في استخدام الفترات التجريبية للإصدارات الأصلية.
  • [ تم.] لم يعُد الوصول إلى Web SQL في جميع السياقات متاحًا بدءًا من الإصدار Chromium 119.

الخطوة التالية

كما هو موضّح في المقدمة، فإنّ تقنيات Web Storage API ، مثل localStorage و sessionStorage، أو معيار IndexedDB ، هي بدائل جيدة في العديد من الحالات، ولكن ليس في جميعها.

الأسباب المنطقية لترك مساحة التخزين لمطوّري الويب

مع ظهور Wasm، يمكن استخدام حلول SQL أو NoSQL على الويب. ومن الأمثلة على ذلك DuckDB-Wasm، وabsurd-sql. استنادًا إلى هذه التصاميم، نرى أنّه بإمكان منتدى المطوّرين إنشاء حلول تخزين جديدة وتحسينها بشكل أسرع وأفضل من مورّدي المتصفّحات.

لا ننوي إزالة Web SQL فقط. لقد استبدلنا هذه الميزة بميزة أخرى سيتولى منتدى البرامج مفتوحة المصدر صيانتها، وسيتم تقديمها كحزمة يمكن تحديثها متى شئت، بدون تحمل عبء تقديم إصلاحات وميزات جديدة مباشرةً في المتصفّحات. هدفنا هو السماح للمطوّرين بنقل قاعدة بياناتهم إلى الويب.

بالإضافة إلى ذلك، نأمل أن يساعد هذا المثال في ازدهار منظومة متكاملة جديدة من قواعد البيانات المفتوحة المصدر. أخيرًا، يوفّر إصدار أرقام تعريف الوصول إلى نظام الملفات الطريقة الأساسية الجديدة التي يمكن إنشاء حلول تخزين مخصّصة استنادًا إليها.

أسباب إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا

المخاوف المتعلقة بالاستدامة والأمان

لا يمكن تنفيذ مواصفات Web SQL بشكل مستدام، ما يحدّ من الابتكار والميزات الجديدة. ينصّ الإصدار الأخير من المعيار على نحو دقيق على ما يلي: "يجب أن تُنفِّذ وكلاء المستخدمين لهجة SQL المتوافقة مع Sqlite 3.6.19".

لم يتم تصميم SQLite في الأساس للقيام بتنفيذ جُمل SQL ضارة، ولكن تنفيذ Web SQL يعني أنّه على المتصفّحات تنفيذ ذلك بالضبط. تتطلّب الحاجة إلى مواكبة إصلاحات الأمان والثبات تحديث SQLite في Chromium. يتعارض ذلك مباشرةً مع متطلبات Web SQL التي تقضي بأن يعمل بالطريقة نفسها تمامًا التي يعمل بها SQLite 3.6.19.

شكل واجهة برمجة التطبيقات

لغة SQL على الويب هي أيضًا واجهة برمجة تطبيقات تعرض عمرها. وبما أنّه من أواخر الألفية الثانية، يمثّل مثالاً رائعًا على "جحيم الاستدعاءات"، كما يوضّح نموذج الرمز البرمجي التالي (بإذن من "نولان لاوسون") . كما ترى، يتم تمرير عبارات 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 (عدد صحيح) يتضمّنان إدخالًا واحدًا بمعدّل مزاج حزين ومعدّل شدة ستة.

عدم توفّر دعم للمنفّذين

بصرف النظر عن شكل واجهة برمجة التطبيقات غير الواضح (على الأقل من وجهة نظر اليوم)، كانت لدى Mozilla العديد من المخاوف بشأن لغة الاستعلامات البنيوية (SQL) على الويب التي تم إنشاؤها على SQLite:

"لا نعتقد أنّ [SQLite] هي الأساس الصحيح لواجهة برمجة التطبيقات التي تعرض محتوى الويب العام، على سبيل المثال لا الحصر، بسبب عدم توفّر معيار موثوق به ومقبول على نطاق واسع يعمل على جعل SQL (لغة الاستعلام البنيوية) فرعيًا بطريقة مفيدة. بالإضافة إلى ذلك، لا نريد أن تؤثر التغييرات التي تطرأ على SQLite في الويب لاحقًا، ولا نعتقد أنّ استخدام إصدارات المتصفّحات الرئيسية (ومعيار الويب) مع SQLite هو إجراء حكيم".

يمكنك القراءة بشأن مخاوف Mozilla في مشاركة المدونة السابقة "موزيلا فلاديمير فوكيفيتش". للاطّلاع على المزيد من المعلومات عن الإصدارات السابقة، يمكنك الاطّلاع على محاضر اجتماعات مجموعة عمل تطبيقات الويب في W3C (وإذا أردت الاطّلاع على التفاصيل، يمكنك قراءة سجلّات IRC) وأرشيف القائمة البريدية). بالإضافة إلى ذلك، تقدّم مشاركة المدونة التي نشرها "نولان لوسون" نظرة عامة جيدة حول ما حدث.

ملاحظات

إذا كان لديك أي مخاوف بشأن خطوات الإيقاف التي تم ذكرها في هذه المشاركة، يُرجى إعلامنا بها من خلال القائمة البريدية لمطوّري البرامج blink-dev. العضوية في هذه المجموعة مفتوحة للجميع، ويُسمح لأي شخص بالنشر.

الشكر والتقدير

راجع هذه المقالة كلّ من جو ميديل و بن مورسس و جوشوا بيل.